由于mysql的主从复制是明文传送的,但如果在生产环境中跨网络我们使用的主从复制还是明文传送的话,就保证不了数据的安全性,为了解决这一问题,我们需要加密进行传送,也就是基于SSL的加密方法进行传输数据。
实验环境:
首先准备两台mysql5.7数据库,一台为主master,一台为从slave服务器(安装mysql5.7的三种方法,上次已经说了。也可以到L宝宝聊IT公众号或博客园中找“CentOS7.2安装Mysql5.7.13”文档)
实验步骤:
1、在主 mysql 创建SSL/RSA 文件
# cd /usr/local/mysql/bin ——切换目录
#mysql_ssl_rsa_setup --user=mysql --basedir=/usr/local/mysql
--datadir=/usr/local/mysql/data ——创建新的 SSL 文件
重启mysqld 服务
#systemctl restart mysqld
发现mysql启动失败,查看错误日志
报错信息显示是不能获得私钥,执行 ls 查看 server-key.pem
发现没有 r 权限,添加 r 权限
重启mysql 服务,这时错误日志中就没有报错了
登录mysql,执行
mysql> show variables like '%ssl%';
从上图可以看到 mysql 支持了 ssl 安全连接
注:启用mysql 支持 ssl 安全连接主要用于 mysql 主从复制(局域网可以非 ssh 连接即明文复制,但 internet 复制建议采用 ssl 连接)
在主mysql 上的操作完成,再生成一个复制帐号:REQUIRE SSL
在主mysql 上启用二进制日志并重启 mysql 服务
添加下面的配置项
重启服务
#systemctl restart mysqld
查看主mysql 的状态
注:要记住上图所显示的 file 和 position 的值,配置从服务器要用到。
防火墙允许 3306/tcp 通信或直接关闭(systemctl stop firewalld.service)
2、从服务器的配置
(1)修改从 mysql 的/etc/my.cnf 文件内容,如下图:
注:server_id要唯一,不能和其他 mysql 主机的重复
(2)返回主mysql(master),把主mysql 生成的证书给了从服务器
注:192.168.1.106是从 mysql 的 IP 地址
(3)查看从 mysql 复制过来的证书
设置client-key.pem 的 r 权限
(4)继续在从上配置 SSL:修改/etc/my.cnf 文件,添加如下内容
重启mysqld 服务
查看mysqld.err 是否有错误日志
(5)查看 SSL 是否被支持:
(6)在配置主从复制之前可以在从 mysql 上用 SSL 连接主服务器试试:
注:192.168.1.108是主 mysql 的 ip 地址
SSL 测试连接成功,并且登入的 SSL 协议是: Cipher in use is DHE-RSA-AES256-SHA
(7)最后开始配置主从 replicate, 登录从 mysql
在从上change master to
启用从
查看从的状态,以下两个值必须为 yes,代表从服务器能正常连接主服务器
Slave_IO_Running:Yes
Slave_SQL_Running:Yes
3、测试:
在主mysql 上:
从服务器上:
测试同步成功,以上基于ssl安全连接的主从复制搭建完成。
SSL(SecureSockets Layer 安全套接层),及其继任者传输层安全(Transport Layer Security,TLS)是为网络通信提供安全及数据完整性的一种安全协议。复制默认是明文进行传输的,通过SSL 加密可以大大提高数据的安全性。