无论你是编译安装,二进制安装,还是yum,rpm,装完mysql都是要初始化才能用.
下面来介绍下初始化安装mysql,安装前要准备好my.cnf文件噢~!怎么配置my.cnf,可以看我另一篇文章.
不过要注意的是,发行版和版本号的不同,有些参数会不同或不可用,会导致初始化失败,这时需要去初始化的数据目录查看mysql.err,看看那个参数有问题,然后屏蔽了,重新再初始化一次.
-前置步骤,已做就可以不用理会
mkdir -p /data/mysql/data groupadd mysql useradd -g mysql -s /sbin/nologin mysql chown -R mysql.mysql /data/mysql/data mkdir /data/mysql/tmp chown -R mysql.mysql /data/mysql/tmp/
-注意:操作前要确保没有其他mysql发行版干扰,特别是yum安装的和rpm安装,
rpm -e --nodeps mariadb-libs-5.5.44-2.el7.centos.x86_64 rpm -e --nodeps mysql.x86_64
额外说明:--nodeps是不检查依赖,不要害怕,即使有依赖你自己的安装包都肯定有,做软连接就好了
ln -s /usr/local/mysql/lib/libmysqlclient.so.20 /usr/lib64/libmysqlclient.so.18
-------------------------这条分割线上面的无论是什么版本都要做噢~!--------------------------
-5.6及之前的版本初始化步骤(包括5.6)
确保mysql进程已停
service mysql stop
确保初始化的数据目录没有数据
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
service mysql start
初始化密码
/usr/local/mysql/bin/mysqladmin -u root password ‘新密码‘
#初始化完成,尝试登陆
/usr/local/services/mysql/bin/mysql -uroot -p‘新密码‘
------------------------------我是分割线---------------------------------
-5.7之后用新方式
确保mysql进程已停
service mysql stop
确保初始化的数据目录没有数据
rm -rf /data/mysql/data*
执行初始化命令,指定defaults-file且并必须放到最前面,切记要先编辑好my.cnf
mysqld --defaults-file=/usr/local/mysql/my.cnf --initialize
查看初始化后的密码(密码信息在最后),5.7的初始化比较特别,会自动生成密码,不用这个密码你就不能登录,除非你进安全模式破密码,或者把参数--initialize换成--initialize-insecure,初始化后可以免密码登录.
sed -n ‘/password/p‘ /data/mysql/data/mysql.err .....A temporary password is generated for [email protected]: GVedtgXDZ1-,
更改一下数据目录的属主权限,初始化并没有改这个属主问题,不改的话会启动不了
chown -R mysql:mysql /data/mysql/data/
启动mysql
service mysql start
密码还要初始化,虽然初始化数据库的时候已经有密码,可以直接登录,但是初始化还没真正完成,不然会报错,提示你改密码
mysql -uroot -p‘GVedtgXDZ1-,‘
还必须是下面这样改,不然改不了
mysql> alter user ‘root‘@‘localhost‘ identified by ‘123‘; mysql> set password for ‘root‘@‘localhost‘=password(‘123‘);
这时候才算初始化完成,尝试你设定的新密码登录吧
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数据库(初始化后做最佳)
删除任何无关的管理员用户和空密码的管理员用户,有需求再开
delete from mysql.user where user="root" and host!="localhost"; delete from mysql.user where user="root" and password=""; flush privileges;
删除test库,因为这个库默认是所有人都有权限读写,存在漏洞
drop database test;
删除存放数据库的表信息,因为还没有数据库信息。
delete from mysql.db;
其实5.7对安全做得比较好,上面这些做不做相差并不大,不过多做一步也更安全一些.