0%

rocky8(centos8)安装MySQL5.7

由于rhel8(或者centos8、rocky8等)红帽系Linux发行版中mysql数据库默认采用了mysql8版本,而当前对MySQL 5.7 的使用最多。为了兼容之前的 MySQL 5.7 数据库,需要手动安装上一版本的 mysql 数据库

永久链接:http://blog.ryjer.com/posts/a1ec96d713.html

1、通过 yum 仓库安装

1 关闭内置 mysql 8.0 模块

1
2
sudo dnf remove @mysql
sudo dnf module reset mysql && sudo dnf module disable mysql

屏蔽 yum mysql80 仓库

1
sudo yum-config-manager --disable mysql80-community  

2 添加 yum 仓库

下载 noarch 仓库安装包,由于没有 centos8 的,所以使用el7-9 的包

1
wget https://dev.mysql.com/get/mysql57-community-release-el7-9.noarch.rpm

安装

1
2
3
rpm -Uvh mysql57-community-release-el7-9.noarch.rpm
# 或者使用 yum
yum localinstall mysql57-community-release-el7-9.noarch.rpm

安装后会产生 仓库文件 /etc/yum.repos.d/mysql-community.repo

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
[mysql-connectors-community]
name=MySQL Connectors Community
baseurl=http://repo.mysql.com/yum/mysql-connectors-community/el/7/$basearch/
enabled=1
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-mysql

[mysql-tools-community]
name=MySQL Tools Community
baseurl=http://repo.mysql.com/yum/mysql-tools-community/el/7/$basearch/
enabled=1
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-mysql

# Enable to use MySQL 5.5
[mysql55-community]
name=MySQL 5.5 Community Server
baseurl=http://repo.mysql.com/yum/mysql-5.5-community/el/7/$basearch/
enabled=0
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-mysql

# Enable to use MySQL 5.6
[mysql56-community]
name=MySQL 5.6 Community Server
baseurl=http://repo.mysql.com/yum/mysql-5.6-community/el/7/$basearch/
enabled=0
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-mysql

[mysql57-community]
name=MySQL 5.7 Community Server
baseurl=http://repo.mysql.com/yum/mysql-5.7-community/el/7/$basearch/
enabled=1
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-mysql

[mysql80-community]
name=MySQL 8.0 Community Server
baseurl=http://repo.mysql.com/yum/mysql-8.0-community/el/7/$basearch/
enabled=0
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-mysql

[mysql-tools-preview]
name=MySQL Tools Preview
baseurl=http://repo.mysql.com/yum/mysql-tools-preview/el/7/$basearch/
enabled=0
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-mysql

/etc/yum.repos.d/mysql-community-source.repo

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
[mysql-connectors-community-source]
name=MySQL Connectors Community - Source
baseurl=http://repo.mysql.com/yum/mysql-connectors-community/el/7/SRPMS
enabled=0
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-mysql

[mysql-tools-community-source]
name=MySQL Tools Community - Source
baseurl=http://repo.mysql.com/yum/mysql-tools-community/el/7/SRPMS
enabled=0
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-mysql

[mysql55-community-source]
name=MySQL 5.5 Community Server - Source
baseurl=http://repo.mysql.com/yum/mysql-5.5-community/el/7/SRPMS
enabled=0
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-mysql

[mysql56-community-source]
name=MySQL 5.6 Community Server - Source
baseurl=http://repo.mysql.com/yum/mysql-5.6-community/el/7/SRPMS
enabled=0
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-mysql

[mysql57-community-source]
name=MySQL 5.7 Community Server - Source
baseurl=http://repo.mysql.com/yum/mysql-5.7-community/el/7/SRPMS
enabled=0
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-mysql

[mysql80-community-source]
name=MySQL 8.0 Community Server - Source
baseurl=http://repo.mysql.com/yum/mysql-8.0-community/el/7/SRPMS
enabled=0
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-mysql

[mysql-tools-preview-source]
name=MySQL Tools Preview - Source
baseurl=http://repo.mysql.com/yum/mysql-tools-preview/el/7/SRPMS
enabled=0
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-mysql

3 安装 mysql 5.7

标准的做法如下,直接从 mysql 官方仓库安装。但是该仓库位于国外,速度极慢,你需要花费大量的时间下载软件包

1
yum install mysql-community-server -y

这里最新版是 mysql 5.7.35,对应的安装包如下

1
2
3
4
5
6
7
8
9
10
11
12
13
===================================================================================
软件包 架构 版本 仓库 大小
===================================================================================
安装:
mysql-community-server x86_64 5.7.35-1.el7 mysql57-community 174 M
安装依赖关系:
mysql-community-client x86_64 5.7.35-1.el7 mysql57-community 25 M
mysql-community-common x86_64 5.7.35-1.el7 mysql57-community 310 k
mysql-community-libs x86_64 5.7.35-1.el7 mysql57-community 2.4 M
ncurses-compat-libs x86_64 6.1-7.20180224.el8.1 baseos 327 k

事务概要
===================================================================================

查看版本,验证安装

1
mysql --version
1
mysql  Ver 14.14 Distrib 5.7.35, for Linux (x86_64) using  EditLine wrapper

4 启动 mysql 服务器

如果你之前已经安装过 mysql,使用dnf 或 yum 卸载后数据文件目录 /var/lib/mysql 会有残留。如果之前的版本高于当前按照的版本,则有可能不兼容导致启动失败。请使用 mysqldump 导出数据后删除数据目录下的文件

1
2
systemctl start mysqld.service
systemctl status mysqld.service

第一次启动,mysql 安全机制会产生一个默认密码到日志文件中,可用使用以下命令查看日志中产生的默认密码

1
grep 'temporary password' /var/log/mysqld.log
1
2021-08-29T11:04:29.752733Z 1 [Note] A temporary password is generated for root@localhost: gH_Q.d3G&N>i

上面,我的密码是 gH_Q.d3G&N>i,可用使用这个密码登录 mysql

1
mysql -u root -p

然后输入上面的密码即可登录。需要注意的是,mysql 要求登录后立即修改密码,其会阻止任何其他操作

1
ERROR 1820 (HY000): You must reset your password using ALTER USER statement before executing this statement.

mysql 5.7 支持以下语句设置密码,但这并不符合 sql 规范

1
2
3
4
# 修改当前用户和连接密码
set password = password('新密码');
# 修改指定用户和连接密码
set password for 用户名@localhost = password('新密码');

在 mysql 8 中不再支持以上方式,仅支持正规的传统 sql 语句修改密码

1
ALTER USER 'root'@'localhost' IDENTIFIED BY '新密码';

5 关闭密码策略

可以通过以下语句查看 mysql 当前的密码策略

1
SHOW VARIABLES LIKE 'validate_password%';
1
2
3
4
5
6
7
8
9
10
11
12
13
+--------------------------------------+--------+
| Variable_name | Value |
+--------------------------------------+--------+
| validate_password_check_user_name | OFF |
| validate_password_dictionary_file | |
| validate_password_length | 8 |
| validate_password_mixed_case_count | 1 |
| validate_password_number_count | 1 |
| validate_password_policy | MEDIUM |
| validate_password_special_char_count | 1 |
+--------------------------------------+--------+
7 rows in set (0.00 sec)

在mysql 配置文件 /etc/my.cnf[mysqld]中添加 validate_password=off 可以直接关闭密码验证插件

1
2
3
4
5
[mysqld]
# 关闭密码插件
validate_password=off
# 防止密码过期
default_password_lifetime=0

修改完后记得需要重新启动MySQL服务

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
validate_password相关参数说明:
validate_password_dictionary_file:密码策略文件,策略为STRONG才需要
validate_password_length:密码最少长度
validate_password_mixed_case_count:大小写字符长度,至少1个
validate_password_number_count :数字至少1个
validate_password_special_char_count:特殊字符至少1个上述参数是默认策略MEDIUM的密码检查规则。
validate_password_policy:密码策略,默认为MEDIUM策略,共有如下三种密码策略:

策略 检查规则
0 or LOW Length
1 or MEDIUM Length; numeric, lowercase/uppercase, and special characters
2 or STRONG Length; numeric, lowercase/uppercase, and special characters; dictionary file

临时改:

1. set global validate_password_policy=0;
2. set global validate_password_length=1;

永久改,my.cnf里:

validate_password_policy=0 #0(弱),1(中),2(强)

6 设置默认字符集为 utf8mb4

修改配置文件 /etc/my.cnf ,分别在 [mysqld]中添加 character-set-server=utf8mb4[client]中添加 default-character-set=utf8mb4[mysql]中添加default-character-set=utf8mb4

1
2
3
4
5
6
7
8
9
10
[mysqld]
# 设置数据库字符集为 utf8mb4
character-set-server=utf8mb4
collation-server=utf8mb4_unicode_ci

[client]
default-character-set=utf8mb4

[mysql]
default-character-set=utf8mb4

然后重启 mysql,完成配置

1
systemctl restart mysqld.service

2、迁移 mysql 8 到 mysql 5.7

由于 mysql 8表字符集编码和排序规则变化,mysqldump 导出的 mysql 8 数据库归档无法直接使用mysql导入 mysql 5.7,需要进行一些文本替换

1
2
3
4
5
6
7
8
9
10
# 1. 复制一个副本,保护源文件
cp 原文件 副本文件
# 进行文本替换 utf8mb4_0900_ai_ci 替换为 utf8_general_ci
sed -i 's|utf8mb4_0900_ai_ci|utf8_general_ci|g' 副本文件
# utf8_croatian_ci替换为utf8_general_ci
sed -i 's|utf8_croatian_ci|utf8_general_ci|g' 副本文件
# utf8mb4_general_ci替换为utf8_general_ci
sed -i 's|utf8mb4_general_ci|utf8_general_ci|g' 副本文件
# utf8mb4 替换为 utf8
sed -i 's|utf8mb4|utf8|g' 副本文件

然后就可以导入数据库归档到 mysql 5.7 了

1
mysql -u 用户名 -p 密码 数据库名 < f

参考文章

将Mysql 8.0数据导入到5.7及以下版本解决方案_程序员zz的博客-CSDN博客