一、安装MySQL库
1、准备配置文件
先创建一个名字默认为my.cnf的配置文件,路径放至/var/mysql/data_3306下面,内容如下
[mysqld]
port=3306
datadir=/var/mysql/data_3306
log_errot=/var/mysql/data_3306/error.log
basedir=/var/mysql/
2、执行创建数据库命令
/var/mysql/bin/mysqld --defaults-file=/var/mysql/data_3306/my.cnf --initialize --user=mysql
执行之后,在目录/var/mysql/data_3306/中生成的目录及文件如下
默认的数据库都生成了,同时也生成了指定的error.log文件;sys库为MySQL5.7中新加入的库。
从上图中可以看到,所有的库文件及目录都是通过文件组mysql及用户mysql创建的。
3、MySQL启动
通过1中配置文件启动MySQL的命令如下:
/var/mysql/bin/mysqld --defaults-file=/var/mysql/data_3306/my.cnf --user=mysql
此时,可以通过日志文件看到,服务器已经成功启动,也可以通过ps -ef | grep mysqld来查看进程信息
二、MySQL5.7的权限处理
1、连接报错
启动完成之后,执行下面连接命令:
mysql -uroot -h127.0.0.1 -P3306
系统直接报错,提示如下信息:
ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: NO)
这个现象是正常的,在MySQL5.7新版本中,调整了安全策略,新安装数据库之后,默认情况下root账号不像5.6一样没有密码,在5.7版本中,数据库启动时为root账号随机生成一个密码,存储在了log_error文件中,生成信息如下所示:
2017-01-10T04:22:05.200129Z 1 [Note] A temporary password is generated for root@localhost: JqJhi1g,?o0r
这里可以看到,可以用来临时登录的用户是root@localhost,而密码是“JqJhi1g,?o0r”,这个密码很不规则,很复杂,安全性比较高,但只是用来临时登录的。在登录之后MySQL5.7要求必须要修改密码,不然做不了其他事情,比如show variables like “%sock%”;
从上图可以看出,MySQL提醒,必须要通过ALTER USER语句修改密码之后才可以正常使用,所以通过下面的语句,先修改了root账号。
alter user 'root'@'localhost' identified by 'new password';
这样从当前会话退出去之后,就可以使用这个密码来登录了。
【缺陷】
上文中的处理使得自动化程序变得比较麻烦。
【解决】
MySQL提供了一种兼容方式,在初始化数据库时,可以通过指定参数–initialize-insecure来初始化,这样一来,其行为就与MySQL5.6及之前版本是一致的了。
这种方法给自动化运维带来了方便,不过背离了MySQL5.7这种处理的初衷,所以需要想清楚这个可能造成的不安全因素。
这点从日志文件/var/mysql/data_3306/error.log中就可以看出来,内容如下。
2017-01-10T04:45:56.249101Z 1 [Warning] root@localhost is created with an empty password ! Please consider switching off the --initialize-insecure option.
第二章完毕,下一章为MySQL启动过程。