MySQL 是世界上最流行的开源关系型数据库管理系统。

在默认的 CentOS 8 系统源仓库里,MySQL 数据库服务器最新可用的版本是 8.0。

MySQL 8.0 引进了很多新的特性和修改,因此,有些应用可能不能兼容这个版本。在选择安装哪个版本的 MySQL 时,请仔细翻阅应用(在你想要部署数据库的那台 CentOS 服务器上)的相关文档。

CentOS 8 同时还提供 MariaDB10.3,它可以完美替代 MySQL 5.7,不过有一些限制。如果你的应用不兼容 MySQL 8.0,可以安装 MariaDB 10.3。

在这篇文章中,我们将会向你展示如何在 CentOS 8 系统上安全安装 MySQL 8.0。

一、在 CentOS 8 上安装 MySQL 8.0

以 root 或者其他有 sudo 权限的用户身份,通过使用 CentOS 包管理器来安装 MySQL 8.0 服务器:

1
sudo dnf install @mysql

@mysql模块会安装 MySQL 和所有依赖安装包。

一旦安装完成,启动 MySQL 服务并且启用开机启动功能,运行下面的命令:

1
sudo systemctl enable --now mysqld

检查 MySQL 服务器是否正在运行,输入:

1
2
3
4
5
sudo systemctl status mysqld
● mysqld.service - MySQL 8.0 database server
Loaded: loaded (/usr/lib/systemd/system/mysqld.service; enabled; vendor preset: disabled)
Active: active (running) since Thu 2019-10-17 22:09:39 UTC; 15s ago
...

二、保护 MySQL

运行mysql_secure_installation脚本,执行一些安全相关的操作,并且设置 MySQL root 用户密码:

1
sudo mysql_secure_installation

你将会被问到配置VALIDATE PASSWORD PLUGIN,这个插件是用来测试 MySQL 用户的密码强度和提高安全性的。有三个密码安全级别,弱,中等,强。如果你不想设置密码验证插件,请直接按Enter回车。

在下一个被提示的地方,你会被问到给 MySQL root 用户设置密码。一旦你操作完成,脚本将会要求你移除匿名用户,限制 root 用户访问本地机器,移除 test 测试数据库。你对于所有的问题都应该回到”Y“(yes)。

为了通过终端命令行与 MySQL 数据库交互,使用已经安装的 MySQL 客户端工具。测试 root 用户访问,输入:

1
mysql -u root -p

当被提示的时候,输入 root 用户密码,MySQL shell 将会展示如下:

1
2
3
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 12
Server version: 8.0.17 Source distribution

就这些,你已经安装并且保护了在你的 CentOS 8 服务器上的 MySQL 8.0,你可以使用它了。

三、用户验证

CentOS 8 源仓库中的 MySQL 8.0 被设置采用古老的 mysql_native_password用户验证插件,因为 CentOS 8 上的一些客户端工具和库不兼容caching_sha2_password这个 标准 MySQL 8.0 默认采用的方法。

mysql_native_password在大部分设置中都没问题。如果你想将默认的用户验证插件修改为更快更安全的caching_sha2_password,打开下面的配置文件:

1
sudo vim /etc/my.cnf.d/mysql-default-authentication-plugin.cnf

将默认的default_authentication_plugin修改为caching_sha2_password:

1
2
[mysqld]
default_authentication_plugin=caching_sha2_password

关闭并且保存文件,同时重启 MySQL 服务器,使修改生效:

1
sudo systemctl restart mysqld

四、总结

CentOS 8 上提供 MySQL 8.0。这个安装通过简单输入dnf install @mysql就可以完成。

现在你的 MySQL 服务器已经开启并运行了,你可以连接 MySQL shell,并且开始创建新的数据库和用户了。

五、常见问题总结

使用navicat无法远程连接Centos上mysql数据库

可能原因一:Centos上防火墙没有打开3306端口

1、查看防火墙开发端口
firewall-cmd –list-ports (如果上面的命令报错,可用此命令)

mysql远程访问————————————————

2、添加(开放)mysql端口3306

firewall-cmd –zone=public –add-port=3306/tcp –permanent 开放端口后要重启防火墙生效

3、重启防火墙

systemctl restart firewalld

可能原因二:权限问题,不允许远程访问,需要开启mysql的root用户远程连接服务

1
2
3
mysql> use mysql;

mysql> select host ,user from user;

mysql远程访问

表示没有远程连接的权限,需要修改权限

update user set host = ‘%’ where user = ‘root’

最后刷新数据库

flush privileges;

再次查看权限 ,下图表示已经授权 %

mysql远程访问