阿里云-云小站(无限量代金券发放中)
【腾讯云】云服务器、云数据库、COS、CDN、短信等热卖云产品特惠抢购

CentOS 7上安装MySQL并配置远程安全连接

115次阅读
没有评论

共计 4579 个字符,预计需要花费 12 分钟才能阅读完成。

介绍

MySQL 是由 Oracle 公司开发的开源 SQL 数据库管理系统。

SQL 代表结构化查询语言,它是用于访问数据库的标准化语言。当前版本的语言遵循 SQL:2003 标准。

MySQL 是一个关系数据库管理系统(RDBMS)。这意味着数据库将数据存储在单独的表中,结构被组织成为速度优化的物理文件。用户使用 SQL 来设置管理不同数据字段之间关系的规则。

在本教程中,我们将讨论如何在 CentOS 7 环境中安装 MySQL 并配置安全的远程连接。

安装 MySQL

最新稳定的 MySQL 版本是 5.7,所以这是我们将在本教程中安装和配置的版本。该包是您需要添加的第一件事,它在 MySQL 存储库中可用。执行以下命令开始:

# yum localinstall -y https://dev.mysql.com/get/mysql57-community-release-el7-9.noarch.rpm

该命令将添加可以用于安装数据库系统的 MySQL 存储库:

# yum install -y mysql-community-server

在安装过程结束时,使用 systemd 工具启动 MySQL:

# systemctl start mysqld

检查 MySQL 状态:

mysqld.service - MySQL Server
 Loaded: loaded (/usr/lib/systemd/system/mysqld.service; enabled; vendor preset: disabled)
 Active: active (running) ...

MySQL 可以通过执行 netstat 工具看到 3306 端口,

# netstat -plntu | grep mysql
tcp6 0 0 :::3306 :::* LISTEN 8776/mysqld

MySQL 配置

在 MySQL 服务器的初始启动时,将创建一个超级用户帐户(’root’@’localhost),并将默认密码设置并存储在错误日志文件中。通过执行以下命令显示此密码:

# grep 'temporary password' /var/log/mysqld.log

输出为:

[Note] A temporary password is generated for root@localhost: en>_g6syXIXq

第一步是更改 root 密码。

登录到 MySQL shell:

# mysql -u root -p

输入使用上一个命令显示的自动生成的密码。

接下来,使用以下查询更改密码:

mysql> ALTER USER 'root'@'localhost' IDENTIFIED BY 'RootStrongPassword1!';

刷新权限并退出:

mysql> FLUSH PRIVILEGES;
Query OK, 0 rows affected (0.00 sec)

mysql> EXIT;
Bye

为 MySQL 启用 SSL

默认情况下,MySQL 有自己的 SSL 证书,存储在 /var/lib/mysql 中。为了本教程的目的,这些证书是足够好的。

注意:在生产中,始终使用更安全和“personal”的证书。

从 MySQL shell 检查 SSL。

# mysql -u root -p

mysql> SHOW GLOBAL VARIABLES LIKE '%ssl%';
+---------------+-----------------+
| Variable_name | Value           |
+---------------+-----------------+
| have_openssl  | YES             |
| have_ssl      | YES             |
| ssl_ca        | ca.pem          |
| ssl_capath    |                 |
| ssl_cert      | server-cert.pem |
| ssl_cipher    |                 |
| ssl_crl       |                 |
| ssl_crlpath   |                 |
| ssl_key       | server-key.pem  |
+---------------+-----------------+
9 rows in set (0.01 sec)

检查 SSL 状态:

mysql> STATUS;
--------------
mysql Ver 14.14 Distrib 5.7.18, for Linux (x86_64) using EditLine wrapper

Connection id: 4
Current database: 
Current user: root@localhost
SSL: Not in use
Current pager: stdout
Using outfile: ''
Using delimiter: ;
Server version: 5.7.18 MySQL Community Server (GPL)
Protocol version: 10
Connection: Localhost via UNIX socket
Server characterset: latin1
Db characterset: latin1
Client characterset: utf8
Conn. characterset: utf8
UNIX socket: /var/lib/mysql/mysql.sock
Uptime: 27 min 25 sec

Threads: 1 Questions: 12 Slow queries: 0 Opens: 113 Flush tables: 1 Open tables: 106 Queries per second avg: 0.007
--------------

如您所见,SSL 没有被使用。所以,下一步是启用它。

在 MySQL 配置文件中启用 SSL

编辑 MySQL 配置文件:

# $EDITOR /etc/my.cnf

在 [mysqld] 部分,粘贴以下内容:

ssl-ca=/var/lib/mysql/ca.pem
ssl-cert=/var/lib/mysql/server-cert.pem
ssl-key=/var/lib/mysql/server-key.pem

保存,退出并重启 MySQL 服务。

# systemctl restart mysqld

再次检查 MySQL shell 中的 SSL 状态。

# mysql -u root -p

mysql> STATUS;
mysql Ver 14.14 Distrib 5.7.18, for Linux (x86_64) using EditLine wrapper

Connection id: 5
Current database: 
Current user: root@localhost
SSL: Not in use
Current pager: stdout
Using outfile: ''
Using delimiter: ;
Server version: 5.7.18 MySQL Community Server (GPL)
Protocol version: 10
Connection: Localhost via UNIX socket
Server characterset: latin1
Db characterset: latin1
Client characterset: utf8
Conn. characterset: utf8
UNIX socket: /var/lib/mysql/mysql.sock
Uptime: 1 min 2 sec

Threads: 1 Questions: 6 Slow queries: 0 Opens: 105 Flush tables: 1 Open tables: 98 Queries per second avg: 0.096

启用客户端

此时尚未使用 SSL。这是因为我们需要通过 SSL 强制所有的客户端连接。所以,退出 MySQL shell 并再次编辑 my.cnf 文件。

# $EDITOR /etc/my.cnf

在文件末尾粘贴以下内容:

[client]
ssl-ca=/var/lib/mysql/ca.pem
ssl-cert=/var/lib/mysql/client-cert.pem
ssl-key=/var/lib/mysql/client-key.pem

再次保存,退出并重新启动 MySQL:

# systemctl restart mysqld

检查 MySQL 状态如上所述:

mysql> STATUS
--------------
mysql Ver 14.14 Distrib 5.7.18, for Linux (x86_64) using EditLine wrapper

Connection id: 3
Current database: 
Current user: root@localhost
SSL: Cipher in use is DHE-RSA-AES256-SHA
Current pager: stdout
Using outfile: ''
Using delimiter: ;
Server version: 5.7.18 MySQL Community Server (GPL)
Protocol version: 10
Connection: Localhost via UNIX socket
Server characterset: latin1
Db characterset: latin1
Client characterset: utf8
Conn. characterset: utf8
UNIX socket: /var/lib/mysql/mysql.sock
Uptime: 1 min 32 sec

Threads: 1 Questions: 6 Slow queries: 0 Opens: 105 Flush tables: 1 Open tables: 98 Queries per second avg: 0.065
现在启用,连接通过它进行保护。

启用远程连接

本教程的最后一步是启用远程连接。每个系统管理员都知道,只允许经过验证的客户端是至关重要的。

编辑 MySQL 配置文件:

# $EDITOR /etc/my.cnf

在 [mysqld] 部分的末尾粘贴以下行:

bind-address = *
require_secure_transport = ON

保存,退出并重启 MySQL。

# systemctl restart mysqld

为远程连接创建新用户

此时,SSL 和远程连接已启用。接下来要做的是创建一个新的 MySQL 用户:

# mysql -u root -p

创建一个新用户:

mysql> CREATE USER 'gmolica'@'%' IDENTIFIED BY 'Unixmen1!' REQUIRE X509;
mysql> GRANT ALL PRIVILEGES ON *.* TO 'gmolica'@'%' IDENTIFIED BY 'Unixmen1!' REQUIRE X509;
mysql> FLUSH PRIVILEGES;
mysql> EXIT;

总结

通过上一步,我们已经为 MySQL 配置好了。现在,可以使用创建的凭据远程登录数据库系统。当然,客户端必须具有证书副本才能通过 SSL 连接。

版本小于 5.7.6 时按照 MySQL 5.6 SSL 配置的方式进行 http://www.linuxidc.com/Linux/2017-07/145338.htm。

MySQL 5.7 使用 SSL 加密连接实例  http://www.linuxidc.com/Linux/2017-07/145345.htm

本文永久更新链接地址:http://www.linuxidc.com/Linux/2017-07/145740.htm

正文完
星哥说事-微信公众号
post-qrcode
 0
星锅
版权声明:本站原创文章,由 星锅 于2022-01-22发表,共计4579字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
【腾讯云】推广者专属福利,新客户无门槛领取总价值高达2860元代金券,每种代金券限量500张,先到先得。
阿里云-最新活动爆款每日限量供应
评论(没有评论)
验证码
【腾讯云】云服务器、云数据库、COS、CDN、短信等云产品特惠热卖中