问题起因

在使用 docker 之后,我深感这项技术的便捷,只需要短短几行命令便可以在服务器上面启动服务,比如说 MySQL、Redis、Nacos 等。但是使用 Docker 部署 MySQL 之后,去总是出现 MySQL 停止运行的问题,而且重启 MySQL 之后,数据库中所有的数据都已经消失了,要想解决还有些服务,因此,我选择直接在服务器上面部署 MySQL 来一步到位。

如何在 CentOS7 上安装 MySQL

安装 MySQL rpm 源信息

打开 MySQL :: Download MySQL Yum Repository

根据你的系统版本,选择对应的安装包,例如我的是 CentOS 7.5,这个系统的 Linux 内核是 Linux 7,所以我选择了红框内的地址,大家依次类推。

拼接下载地址头:http://dev.mysql.com/get/,得到以下地址

1
wget  http://dev.mysql.com/get/mysql80-community-release-el7-7.noarch.rpm

rpm 安装源信息

1
rpm -ivh mysql80-community-release-el7-7.noarch.rpm

安装 MySQL

1
yum install mysql-community-server

安装过程中一律输入 y 即可

检查是否安装成功

1
rpm -qa | grep mysql

输出一下内容代表安装成功

1
2
3
4
5
6
7
8
mysql-community-libs-compat-8.0.33-1.el7.x86_64
mysql-community-icu-data-files-8.0.33-1.el7.x86_64
mysql80-community-release-el7-7.noarch
mysql-community-common-8.0.33-1.el7.x86_64
mysql-community-libs-8.0.33-1.el7.x86_64
mysql-community-server-8.0.33-1.el7.x86_64
mysql-community-client-8.0.33-1.el7.x86_64
mysql-community-client-plugins-8.0.33-1.el7.x86_64

检查 mariaDB 是否被覆盖

1
rpm -qa | grep mariadb

输出空,表示 mariaDB 已经被成功覆盖。

登录和修改密码

我们安装的时候,并没有设置初始密码

所以 mysql 在第一次启动的时候,会自动初始化一个密码

通过以下这行代码,我们可以查看 mysql 自动初始化的密码:

1
2
3
4
5
6
# 第一次启动后,可以查看mysql初始化密码
grep 'temporary password' /var/log/mysqld.log

输出(root@localhost: 后面的是密码):
2023-04-21T06:03:27.071550Z 6 [Note] [MY-010454] [Server] A temporary password
is generated for root@localhost: r2to%yZ%a)%s

登录

一定要注意:-p 和’密码’之间是没有空格的

1
2
# 登录mysql
mysql -u root -p'r2to%yZ%a)%s

修改 root 密码

默认的密码策略,需要:大写英文 + 特殊字符 + 数字

1
ALTER USER 'root'@'localhost' IDENTIFIED BY 'Root_123';

特殊的密码策略需要安装插件来解决:text validate_password.so

具体方法:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
1、先按照mysql的要求,修改一次密码
ALTER USER 'root'@'localhost' IDENTIFIED BY 'Root_123';

2、退出mysql
exit

3、重新登录mysql
mysql -u root -p'Root_123'

4、安装密码验证插件
install plugin validate_password soname 'validate_password.so';

5、查看是否启用了插件
select plugin_name, plugin_status from information_schema.plugins where plugin_name like 'validate%';
+-------------------+---------------+
| plugin_name | plugin_status |
+-------------------+---------------+
| validate_password | ACTIVE |
+-------------------+---------------+
输出这样的内容,表示成功启用

查看验证策略的键支信息

1
2
3
4
5
6
7
8
9
10
11
12
13
SHOW VARIABLES LIKE 'validate_password%';

+--------------------------------------+-------+
| Variable_name | Value |
+--------------------------------------+-------+
| validate_password.check_user_name | ON |
| 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 |
+--------------------------------------+-------+

`
我们只需要修改表中数据即可该表策略。

开放 root 账户远程登录

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
# 登录
mysql -u root -p'密码'

# 如果你的数据库是 mysql 8 及以上
# 1、进入数据库
use mysql
# 2、修改user表
update user set host='%' where user='root';

# mysql 5.7 及之前,执行这行代码即可
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY '你的密码' WITH GRANT OPTION;

# 重载授权表
FLUSH PRIVILEGES;

# 退出
exit

# 重启
systemctl restart mysqld