CentOS7.5安装MySQL8以及相关设置

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 ~]$ rpm -qa|grep mariadb
mariadb-libs-5.5.56-2.el7.x86_64

卸载已安装的MariaDB,命令rpm -e --nodeps xxx,如下:

[Jhone@workstation ~]$ sudo rpm -e --nodeps mariadb-libs-5.5.56-2.el7.x86_64

若要检查系统中是否已安装MySQL,也可以使用上面的命令进行检查和卸载,将参数换成MySQL相关的即可。

2.3、解压MySQL8安装包

tar -xvf mysql-8.0.15-1.el7.x86_64.rpm-bundle.tar

[Jhone@workstation ~]$ tar -xvf mysql-8.0.15-1.el7.x86_64.rpm-bundle.tar
mysql-community-server-8.0.15-1.el7.x86_64.rpm
mysql-community-client-8.0.15-1.el7.x86_64.rpm
mysql-community-common-8.0.15-1.el7.x86_64.rpm
mysql-community-libs-8.0.15-1.el7.x86_64.rpm
mysql-community-devel-8.0.15-1.el7.x86_64.rpm
mysql-community-test-8.0.15-1.el7.x86_64.rpm
mysql-community-libs-compat-8.0.15-1.el7.x86_64.rpm
mysql-community-embedded-compat-8.0.15-1.el7.x86_64.rpm

通常,要实现MySQL的实用且标准的安装,需要把 mysql-community-server, mysql-community-client, mysql-community-libs, mysql-community-common, and mysql-community-libs-compat这些包都进行安装,即使用如下命令:

[Jhone@workstation ~]$ sudo yum install mysql-community-{server,client,common,libs}-*

安装这些包时使用更高级别的包管理工具(如yum)更可取的,喜欢使用rmp命令的用户可以考虑使用rpm -Uvh来取代yum install,然而使用rpm -Uvh安装时更容易失败,因为存在一些潜在的依赖问题。
如果只安装MySQL的客户端程序,在安装列表里面可以略过mysql-community-server,即使用如下的命令:

[Jhone@workstation ~]$ sudo yum install mysql-community-{client,common,libs}-*

2.4 安装完成后默认目录概览

使用RPM包产生安装标准的MySQL时会在系统目录下产生一写文件和资源,它们的具体路径如下:

Files or ResourcesLocation
Client programs and scripts/usr/bin
mysqld server/usr/sbin
Configuration file/etc/my.cnf
Data directory/var/lib/mysql
Error log fileFor RHEL, Oracle Linux, CentOS or Fedora platforms: /var/log/mysqld.log
For SLES: /var/log/mysql/mysqld.log
Value of secure_file_priv/var/lib/mysql-files
System V init scriptFor RHEL, Oracle Linux, CentOS or Fedora platforms: /etc/init.d/mysqld
For SLES: /etc/init.d/mysql
Systemd serviceFor RHEL, Oracle Linux, CentOS or Fedora platforms: mysqld
For SLES: mysql
Pid file/var/run/mysql/mysqld.pid
Socket/var/lib/mysql/mysql.sock
Keyring directory/var/lib/mysql-keyring
Unix manual pages/usr/share/man
Include (header) files/usr/include/mysql
Libraries/usr/lib/mysql
Miscellaneous support files (for example, error messages, and character set files)/usr/share/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=1
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock

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 ~]$ sudo grep 'temporary password' /var/log/mysqld.log
2020-03-26T08:55:59.825512Z 5 [Note] [MY-010454] [Server] A temporary password is generated for root@localhost: H5NAGiWh,tOm

因为是临时密码,在此将其公之于众也无妨 :)。
使用上面查到的临时密码登录数据库,虽说在命令行中直接显式地输入密码不提倡,但有时临时密码略显复杂,不太容易做到一次输对,所以用临时密码登录时暂且用这种方式吧:

[Jhone@workstation ~]$ mysql -uroot -pH5NAGiWh,tOm

6.2、修root用户的密码

在用临时密码登录数据库之后,需要修改root用户的密码,否则无法使用数据库。具体操作如下:

mysql> ALTER USER 'root'@'localhost' IDENTIFIED BY 'newPassword888!';
Query OK, 0 rows affected (0.01 sec)

6.3、授权远程连接

6.3.1、对远程命令行连接的支持

默认情况下,MySQL数据库不支持远程连接,可以是使用use mysql命令进入到mysql这个数据库下,查看user表中root用户的host值,查看命令如下:

mysql> select host, user, authentication_string plugin from user;
+-----------+------------------+------------------------------------------------------------------------+
| host      | user             | plugin                                                                 |
+-----------+------------------+------------------------------------------------------------------------+
| localhost | mysql.infoschema | $A$005$THISISACOMBINATIONOFINVALIDSALTANDPASSWORDTHATMUSTNEVERBRBEUSED |
| localhost | mysql.session    | $A$005$THISISACOMBINATIONOFINVALIDSALTANDPASSWORDTHATMUSTNEVERBRBEUSED |
| localhost | mysql.sys        | $A$005$THISISACOMBINATIONOFINVALIDSALTANDPASSWORDTHATMUSTNEVERBRBEUSED |
| localhost | root             | $A$005$(.%YF==%<b+F;(r#jtUqzHRL993Exsb.fe2ctAxgd3CXz9QwvrotzYO42LXS/ |
+-----------+------------------+------------------------------------------------------------------------+
4 rows in set (0.00 sec)

为实现远程使用root用户访问MySQL,更新user表中root用户的host值为%即可,操作详情如下:

mysql> update user set host='%'where user='root';
Query OK, 1 row affected (0.00 sec)
Rows matched: 1  Changed: 1  Warnings: 0

再次查看root用户host值:

mysql> select host, user, authentication_string plugin from user;
+-----------+------------------+------------------------------------------------------------------------+
| host      | user             | plugin                                                                 |
+-----------+------------------+------------------------------------------------------------------------+
| %         | root             | $A$005$W       4-XlUuGNx[\4j0z80uDbY0Sa4t2c0pO81/ujAy0tbtW5OE0nEkLaiX3jvD |
| localhost | mysql.infoschema | $A$005$THISISACOMBINATIONOFINVALIDSALTANDPASSWORDTHATMUSTNEVERBRBEUSED |
| localhost | mysql.session    | $A$005$THISISACOMBINATIONOFINVALIDSALTANDPASSWORDTHATMUSTNEVERBRBEUSED |
| localhost | mysql.sys        | $A$005$THISISACOMBINATIONOFINVALIDSALTANDPASSWORDTHATMUSTNEVERBRBEUSED |
+-----------+------------------+------------------------------------------------------------------------+
4 rows in set (0.00 sec)

可以看host已经变为%,然后还需要执行flush privileges;,执行效果如下:

mysql> flush privileges;
Query OK, 0 rows affected (0.00 sec)

经过以上修改,就可以从远程的命令行客户端连接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,这里采用恢复到原来版本中使用的机密方式进行修改,操作如下:

mysql> ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY 'newPassword888!';
Query OK, 0 rows affected (0.01 sec)

依然记得要执行flush privileges;,执行效果如下:

mysql> flush privileges;
Query OK, 0 rows affected (0.00 sec)

至此,通过远程命令行和GUI工具都可以连接MySQL数据库了。

6.4、修改数据存储目录

在生产环境中,如果想把数据存储在空间更大的目录下,就需要修改数据存储目录。

6.4.1、确认当前的数据目录

从命令行登录数据库,查看datadir的值:

mysql> select @@datadir;
+-----------------+
| @@datadir       |
+-----------------+
| /var/lib/mysql/ |
+-----------------+
1 row in set (0.00 sec)

可以看到当前MySQL使用的的默认数据目录——/var/lib/mysql/,之后使用exit命令退出数据库即可:

mysql> exit
Bye
6.4.2、停止运行数据库

为保证数据完整性,在更改数据存储目录之前先停止数据库:

[Jhone@workstation ~]$ systemctl stop mysqld
6.4.3、使用rsync同步数据至新目录

使用rsync命令将已有数据同步到新路径下,该命令配合-a使用可以保留全新和其他目录属性,配合-v使用可以输出详细信息以便跟踪安装进度,假设要把新目录指定到/newmysqldata下,使用如下方式进行数据同步:

[Jhone@workstation ~]$ sudo rsync -av /var/lib/mysql /newmysqldata

注意,上面的操作没有在/var/lib/mysql后加斜杠,这种方式能把mysql目录本身及其来里面的内容全部同步到新目录中。
一旦同步完成,将/var/lib/mysql重命令为/var/lib/mysql.bak,以避免再次启动数据库时可能引起的混淆:

[Jhone@workstation ~]$ sudo mv /var/lib/mysql /var/lib/mysql.bak
6.4.4、修改配置文件

修改/etc/my.cnf文件,并将datadir指向新的数据目录,另外,由于socket也指向之前的数据目录,这里也需要将它更新为新目录:

datadir=/newmysqldata/mysql
socket=/newmysqldata/mysql/mysql.sock

除了更新配置文件中已存在的内容外,还需要在配置文件中为mysql客户端添加新内容,在文件末尾添加如下新内容:

[client]
port=3306
socket=/newmysqldata/mysql/mysql.sock

以上内容,存盘即可。

6.4.5、关于selinux工作模式

CentOS中selinux默认是开启的,可以通过如下命令查看:

[Jhone@workstation ~]$ getenforce
Enforcing

selinux有三种工作模式enforcing-强制模式、permissive-宽容模式和disabled-关闭模式,上面的输出标明其默认工作在强制模式下,在这种模式下可能会影响修改数据目录后的MySQL的启动,为此需要将工作模式更改为permissive或enforcing。
更改为permissive模式
可以使用setenforce 0命令临时从enforcing切换到permissive模式,并查看模式是否已变更:

[Jhone@workstation ~]$ sudo setenforce 0
[Jhone@workstation ~]$ getenforce
Permissive

enforcing 和 permissive 模式可以通过 setenforce 1或0 命令快速切换,但是这种切换是临时性的,在系统重启后立即失效。
如果想运行在permissive模式下且永久生效,需要修改/etc/selinux/config文件,将SELINUX=enforcing改为SELINUX=permissive,重启系统即可。
更改为disabled模式
在Linux命令行中无法直接通过命令将selinux切换到disabled模式,唯一的办法就是将/etc/selinux/config文件中SELINUX的值改为disabled,并重启系统。
需要注意的是,从disabled模式切换到enforcing或permissive模式时,只能通过修改文件并重启系统的方式解决,反之亦然。

6.4.6、重新启动MySQL并查看datadir

当selinux处于permissive或disabled模式时,修改了数据目录后的MySQL均可以正常启动,启动后再次从命令行登入MySQL,查看datadir的值:

mysql> select @@datadir;
+----------------------+
| @@datadir            |
+----------------------+
| /newmysqldata/mysql/ |
+----------------------+
1 row in set (0.00 sec)

可以看到数据目录已经指向了新的目录。

7、总结

本文走过了从安装MySQL8到设置非大小敏感到设置远程连接到修改数据库默认存储目录这样一条华丽路线,给自己一份总结给读者一份帮助。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值