MySQL 是由 Oracle 公司开发的开源 SQL 数据库管理系统。
SQL 代表结构化查询语言,它是用于访问数据库的标准化语言。 当前版本的语言遵循 SQL:2003 标准。
MySQL 是一个关系数据库管理系统(RDBMS)。 这意味着数据库将数据存储在单独的表中,结构被组织成为速度优化的物理文件。 用户使用 SQL 来设置管理不同数据字段之间关系的规则。
在本教程中,我们将讨论如何在 CentOS 7 环境中安装 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 服务器的初始启动时,将创建一个超级用户帐户('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 证书,存储在 / 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 没有被使用。 所以,下一步是启用它。
- #$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