欢迎您访问 最编程 本站为您分享编程语言代码,编程技术文章!
您现在的位置是: 首页

初始化mysql数据库-前置步骤(已做就可以不用理会)

最编程 2024-01-15 09:23:18
...

确保mysql进程已停

service mysql stop

确保初始化的数据目录没有数据,由my.cnf定义的数据目录

rm -rf /data/mysql/data/*

执行初始化脚本,添加参数,切记要先编辑好my.cnf

/usr/local/mysql/scripts/mysql_install_db --defaults-file=/usr/local/mysql/my.cnf --basedir=/usr/local/mysql/ --datadir=/data/mysql/data --user=mysql > /dev/null 2>&1

启动mysql

#使用/etc/init.d/mysql的启动方式启动
service mysql start
#使用mysqld的启动方式
/usr/local/mysql/bin/mysqld --defaults-file=/usr/local/mysql/my.cnf &
#切换为mysql账户并关闭numa启动mysql进程
sudo su - mysql -s /bin/bash -c "numactl --interleave=all /usr/local/mysql/bin/mysqld --defaults-file=/usr/local/mysql/my.cnf " &

初始化密码

/usr/local/mysql/bin/mysqladmin -u root password '新密码'

#初始化完成,尝试登陆

/usr/local/mysql/bin/mysql -uroot  -p'新密码'


------------------------------我是分割线---------------------------------

-5.7之后用新方式初始化

确保mysql进程已停

service mysql stop

确保初始化的数据目录没有数据,由my.cnf定义的数据目录

rm -rf /data/mysql/data/*

执行初始化命令,指定defaults-file且并必须放到最前面,切记要先编辑好my.cnf

mysqld --defaults-file=/usr/local/mysql/my.cnf --initialize

5.7的初始化采用了新的模式,虽然繁琐一些,但是也更安全.

程序会自动生成密码,不用这个密码你就不能登录,除非你进安全模式破密码.

或者把参数--initialize换成--initialize-insecure,初始化后可以免密码登录,这里不细说,各位可以慢慢测试.

查看初始化后的密码(密码信息在行的最后)的方法,

密码记录在数据目录的mysql.err里面,假设我的数据目录定义是/data/mysql/data,所以密码就应该是记录在/data/mysql/data/mysql.err里面,我直接截取出来看了.

sed -n '/password/p' /data/mysql/data/mysql.err
.....A temporary password is generated for root@localhost: GVedtgXDZ1-,

更改一下数据目录的属主权限,这种初始化方式并没有改这个属主问题,但是不改的话会启动不了

chown -R mysql:mysql /data/mysql/data/

启动mysql

#使用/etc/init.d/mysql的启动方式启动
service mysql start
#使用mysqld的启动方式
/usr/local/mysql/bin/mysqld --defaults-file=/usr/local/mysql/my.cnf &
#切换为mysql账户并关闭numa启动mysql进程
sudo su - mysql -s /bin/bash -c "numactl --interleave=all /usr/local/mysql/bin/mysqld --defaults-file=/usr/local/mysql/my.cnf " &

密码还要初始化,虽然初始化数据库的时候已经有密码,可以直接登录,但是初始化还没真正完成,不然会报错,不断提示你改密码

mysql -uroot -p'GVedtgXDZ1-,'

由于5.7之后,系统用户表有变化,直接用password是不行的,所以必须是下面的方法来这样改,不然改不了

mysql> alter user 'root'@'localhost' identified by '123';
mysql> set password for 'root'@'localhost'=password('123');
mysql> update mysql.user set authentication_string=password('123') where user='root' and Host = 'localhost';
mysql> flush privileges;

这时候才算初始化完成,尝试你设定的新密码登录吧

mysql -uroot -p'123'


-扩展阅读:mysql 5.7增加了两个字段password_last_changed、password_lifetime来完善安全策略,可以设置参数default_password_lifetime来延长使用期限

ALTER USER 'root'@'localhost' PASSWORD EXPIRE INTERVAL 90 DAYS;
ALTER USER 'root'@'localhost' PASSWORD EXPIRE NEVER;
ALTER USER 'root'@'localhost' PASSWORD EXPIRE DEFAULT;


---------------------------------我也是分割线-----------------------------------

-安全加固.

安全加固mysql数据库(初始化后做最佳)

-5.6,5.7通用加固方式

1.删除任何无关的管理员用户和空密码的管理员用户,有需求再开

mysql> delete from mysql.user where user="root" and host!="localhost";
#在5.6的旧环境下,可能存在空密码的用户,这显然不被允许,5.7则没有这种用户,可以不做
mysql> delete from mysql.user where user="root" and password="";
mysql> flush privileges;

2.删除test库(5.7没了),因为这个库默认是所有人都有权限读写,存在漏洞

mysql> drop database test;

3.删除存放数据库的表信息,因为本来就还没有数据库信息,万一被注入就不好了。

mysql> delete from mysql.db;

4.SSL加密设置,用途就是把数据加密,防止被截取后破解,5.6要加ssl指定文件位置配置,5.7自动开,然后执行命令就可以了.

#执行命令,在数据目录创建key文件,下面这个命令是封装了整个创建过程,就不用做那么多复杂的事了
#不过这个命令文件是5.7新加入的,5.6中没有这个命令文件,但是可以放到在5.6上面用,还算方便.
/usr/local/mysql/bin/mysql_ssl_rsa_setup --datadir=/data/mysql/data/
#然后看看开启了没有
mysql>SHOW VARIABLES LIKE 'have_ssl';  
| have_ssl          | YES     |  
#进入mysql,授权ssl专用用户
mysql> grant all privileges on *.* to 'sslroot'@'%' identified by '123123' require ssl;
#用ssl专用用户登录
mysql -usslroot -p'123123' -h127.0.0.1
#查看当前状态,SSL已启用
mysql> \s
Current user:        sslroot@127.0.0.1
SSL:            Cipher in use is ECDHE-RSA-AES128-GCM-SHA256

不过开启SSL需要谨慎,因为数据进行了加密处理,毫无疑问服务器需要消耗资源来校验密文,官方说明可能会下降25%的性能,还是比较高的.

对于高并发的环境自然是性能下降明显,除非安全要求非常高,不然不建议开,一般来说只要授权限制访问IP是内网的就已经可以解决安全问题.