无论你是编译安装,二进制安装,还是yum,rpm,装完mysql都是要初始化才能用.
下面来介绍下初始化安装mysql,切记安装前要准备好my.cnf文件~!怎么配置my.cnf,可以看我另一篇文章,有很多人为了照顾初学者,直接跳过my.cnf的配置说明,我觉得是不合理的,数据库不是能用就好,是需要理解自己定义的好处和意义,真心建议大家先看那篇文章,找到自己想要的.
不过要注意的是,发行版和版本号的不同,有些参数会不同或不可用,会导致初始化失败,这时需要去初始化的数据目录查看mysql.err,看看那个参数有问题,然后屏蔽了,重新再初始化一次.
-前置步骤(已做就可以不用理会)
#创建数据目录 mkdir -p /data/mysql/data #建立mysql用户组,并更改权限 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/ #拷贝服务启动文件,yum和rpm安装的可以不需要 cp -ar /usr/local/mysql/support-files/mysql.server /etc/init.d/mysql #编辑my.cnf,可以看我另一篇文章来参考具体怎么设置,也可以用模板文件 cp -ar /usr/local/mysql/support-files/my-default.cnf /usr/local/mysql/my.cnf vim /usr/local/mysql/my.cnf
-注意:操作前要确保没有其他mysql发行版干扰,特别是yum安装的和rpm安装,
#查看已安装的rpm包中又没有mysql和mariadb的安装包 rpm -qa |grep -E 'mysql|mariadb' mariadb-libs-5.5.44-2.el7.centos.x86_64 #删除查找出来的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
要额外注意一个事情,如果存在~/.my.cnf和~/.mylogin.cnf,是默认先使用这个cnf配置文件的,并且是~/.my.cnf优先,就算你放到程序目录并用--defaults-file选项指定配置文件,都是会优先走这里,不走你指定的。不过,一般情况下是不会出现这种情况,系统也不会默认把文件放进这里,所以出现这种奇葩情况,基本上只会是人为原因。
-------------------------这条分割线上面的无论是什么版本都要做~!--------------------------
-5.6及之前的版本初始化步骤(包括5.6)
确保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
service mysql start
初始化密码
/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
service mysql start
密码还要初始化,虽然初始化数据库的时候已经有密码,可以直接登录,但是初始化还没真正完成,不然会报错,不断提示你改密码
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' -h227.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是内网的就已经可以解决安全问题.
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。