@
欧阳方超:zhuanlan.zhihu.com
1、概述
本文记录在CentOS7.5中使用rpm包安装MySQL8的过程,以及装完数据库之后需要做的一些设置,包括设置非大小敏感、设置远程连接、修改数据库默认存储目录,是对过往工作经历的总结,一份书写一份沉淀,若能不经意间帮到正在路上的你,吾心备喜焉。
2、安装过程
2.1、上传rpm包到CentOS中
本文使用的rpm捆绑包(rpm-bundle),包含client、server以及一些其他内容,从MySQL官方的下载列表中也可以看出rpm-bundle文件大小是最大的,所以它包含的内容是也是最全的,本文使用的版本详细如下:
mysql-8.0.15-1.el7.x86_64.rpm-bundle.tar
将tar包上传到当前用户的home目录下。
2.2、检查并卸载MariaDB
从CentOS7开始,CentOS系统预装了MariaDB数据库,它是MySQL的一个分支,由最初的MySQL开发者管理维护,如果我们暂时不需要该数据线库,可以将其卸载,如果不卸载的话在安装MySQL时也会出现错误。 检查MariaDB的安装情况,命令rpm -qa|grep mariadb,如下:
[Jhone@workstation ~
卸载已安装的MariaDB,命令rpm -e --nodeps xxx,如下:
[Jhone@workstation ~
若要检查系统中是否已安装MySQL,也可以使用上面的命令进行检查和卸载,将参数换成MySQL相关的即可。
2.3、解压MySQL8安装包
tar -xvf mysql-8.0.15-1.el7.x86_64.rpm-bundle.tar
[Jhone@workstation ~
通常,要实现MySQL的实用且标准的安装,需要把 mysql-community-server, mysql-community-client, mysql-community-libs, mysql-community-common, and mysql-community-libs-compat这些包都进行安装,即使用如下命令:
[Jhone@workstation ~
安装这些包时使用更高级别的包管理工具(如yum)更可取的,喜欢使用rmp命令的用户可以考虑使用rpm -Uvh来取代yum install,然而使用rpm -Uvh安装时更容易失败,因为存在一些潜在的依赖问题。 如果只安装MySQL的客户端程序,在安装列表里面可以略过mysql-community-server,即使用如下的命令:
[Jhone@workstation ~
2.4 安装完成后默认目录概览
使用RPM包产生安装标准的MySQL时会在系统目录下产生一写文件和资源,它们的具体路径如下:
安装结束后会在系统中产生名为mysql的用户和名为mysql的组。 注意,使用老版本的安装包安装MySQL的话,会在/usr下产生一个名为my.cnf的配置文件,在此强烈推荐,将该文件的内容合并到/etc/my.conf中,并移除/usr/my.conf。
3、修改MySQL8大小写敏感问题
MySQL8默认情况下是区分大小写的,这也是在一次迁移数据库的过程中发现的问题,要想设置MySQL8为非大小写敏感,可以在/etc/my.cnf中添加一行内容,lower_case_table_names=1(1-不敏感,0-敏感,MySQL8中默认大小写敏感),注意一定要在首次启动数据库服务之前进行添加,且应该添加到datadir之前,如下所示,一旦启动后再添加该内容设置非大小写敏感将无效,且可能面临数据库无法启动的问题。
lower_case_table_names
4、MySQL启/停
MySQL在安装过程结束后是没有启动的,可以使用下面命令来管理MySQL 启动MySQL:
systemctl start mysqld
重启MySQL:
systemctl restart mysqld
停止MySQL:
systemctl stop mysqld
查看MySQL状态:
systemctl status mysqld
mysqld服务默认是使能的,随系统启动而启动。还可以使用service命令来管理MySQL,与systemctl命令的区别是,后面的两个参数互换一下位置,如下: 启动MySQL:
service mysqld start
重启MySQL:
service mysqld restart
停止MySQL:
service mysqld stop
查看MySQL状态:
service mysqld status
5、初始化时发生了什么
假设data directory是空的,那么在数据库初始化节点发生了一下几件事:
- 初始化MySQL服务
- 在data directory中生成SSL证书和key文件
- 安装密码有效性验证机制(validate_password)并使之生效
- 创建超级用户账号root,设置root的密码并将其保存在日志文件中(/var/log/mysqld.log)
注意,密码有效性验证机制要求密码包含至少一个大写密码、一个小写字母、一个数字和一个特殊字符,且密码长度至少为8为。如果安装过程中出现问题,可以查看日志文件——/var/log/mysqld.log
6、安装完毕之后的设置
6.1、查看root的临时密码并登陆
使用grep命令在日志文件中查看root用户的临时密码,如下:
[Jhone@workstation ~
因为是临时密码,在此将其公之于众也无妨 :)。 使用上面查到的临时密码登录数据库,虽说在命令行中直接显式地输入密码不提倡,但有时临时密码略显复杂,不太容易做到一次输对,所以用临时密码登录时暂且用这种方式吧:
[Jhone@workstation ~
6.2、修root用户的密码
在用临时密码登录数据库之后,需要修改root用户的密码,否则无法使用数据库。具体操作如下:
'root'@
6.3、授权远程连接
6.3.1、对远程命令行连接的支持
默认情况下,MySQL数据库不支持远程连接,可以是使用use mysql命令进入到mysql这个数据库下,查看user表中root用户的host值,查看命令如下:
select host, user, authentication_string plugin from user
为实现远程使用root用户访问MySQL,更新user表中root用户的host值为%即可,操作详情如下:
set
再次查看root用户host值:
select host, user, authentication_string plugin from user
可以看host已经变为%,然后还需要执行flush privileges;,执行效果如下:
;
Query OK,
经过以上修改,就可以从远程的命令行客户端连接MySQL了。
6.3.2、对GUI客户端工具连接的支持
如果使用GUI客户端进行连接,可能会出现以下错误:
'caching_sha2_password' cannot be loaded
这是因为MySQL8使用了最新的认证插件——caching_sha2_password,而刚才使用的GUI客户端如果因版本低不包含此插件的话就会出现这种问题,解决方法有两种,要么使用新版本的GUI工具,比如MySQL Workbench 8.0 CE,要么把密码加密方式恢复到MySQL之前版本使用的方式——mysql_native_password,这里采用恢复到原来版本中使用的机密方式进行修改,操作如下:
'root'@
依然记得要执行flush privileges;,执行效果如下:
;
Query OK,
至此,通过远程命令行和GUI工具都可以连接MySQL数据库了。
6.4、修改数据存储目录
在生产环境中,如果想把数据存储在空间更大的目录下,就需要修改数据存储目录。
6.4.1、确认当前的数据目录
从命令行登录数据库,查看datadir的值:
select @@datadir
可以看到当前MySQL使用的的默认数据目录——/var/lib/mysql/,之后使用exit命令退出数据库即可:
exit
Bye
6.4.2、停止运行数据库
为保证数据完整性,在更改数据存储目录之前先停止数据库:
[Jhone@workstation ~
6.4.3、使用rsync同步数据至新目录
使用rsync命令将已有数据同步到新路径下,该命令配合-a使用可以保留全新和其他目录属性,配合-v使用可以输出详细信息以便跟踪安装进度,假设要把新目录指定到/newmysqldata下,使用如下方式进行数据同步:
[Jhone@workstation ~
注意,上面的操作没有在/var/lib/mysql后加斜杠,这种方式能把mysql目录本身及其来里面的内容全部同步到新目录中。 一旦同步完成,将/var/lib/mysql重命令为/var/lib/mysql.bak,以避免再次启动数据库时可能引起的混淆:
[Jhone@workstation ~
6.4.4、修改配置文件
修改/etc/my.cnf文件,并将datadir指向新的数据目录,另外,由于socket也指向之前的数据目录,这里也需要将它更新为新目录:
datadir
除了更新配置文件中已存在的内容外,还需要在配置文件中为mysql客户端添加新内容,在文件末尾添加如下新内容:
[client
以上内容,存盘即可。
6.4.5、关于selinux工作模式
CentOS中selinux默认是开启的,可以通过如下命令查看:
[Jhone@workstation ~
selinux有三种工作模式enforcing-强制模式、permissive-宽容模式和disabled-关闭模式,上面的输出标明其默认工作在强制模式下,在这种模式下可能会影响修改数据目录后的MySQL的启动,为此需要将工作模式更改为permissive或enforcing。 更改为permissive模式
[Jhone@workstation ~
enforcing 和 permissive 模式可以通过 setenforce 1或0 命令快速切换,但是这种切换是临时性的,在系统重启后立即失效。 如果想运行在permissive模式下且永久生效,需要修改/etc/selinux/config文件,将SELINUX=enforcing改为SELINUX=permissive,重启系统即可。 更改为disabled模式
6.4.6、重新启动MySQL并查看datadir
当selinux处于permissive或disabled模式时,修改了数据目录后的MySQL均可以正常启动,启动后再次从命令行登入MySQL,查看datadir的值:
select @@datadir
可以看到数据目录已经指向了新的目录。
7、总结
本文走过了从安装MySQL8到设置非大小敏感到设置远程连接到修改数据库默认存储目录这样一条华丽路线,给自己一份总结给读者一份帮助。