由于mysql的主从复制是明文传送的,但如果在生产环境中跨网络我们使用的主从还是明文传送的话,就保证不了数据的安全性,为了解决这一问题,我们需要加密进行传送,也就是基于SSL的加密方法进行传输数据
实验环境:Master—Centos7.2 —Mysql5.7
Slave—Centos7.2—Mysql5.7
首先需要安装mysql5.7这里不做演示
一、基于SSL实现Mysql加密的主从复制配置
1)在mysql主上创建SSL/RSA文件
# cd /usr/local/mysql/bin/ [root@yankerp bin]# mysql_ssl_rsa_setup --user=mysql --basedir=/usr/local/mysql --datadir=/usr/local/mysql/data Generating a 2048 bit RSA private key .........................................................................................+++ ..................................................................................................+++ writing new private key to 'ca-key.pem' ----- Generating a 2048 bit RSA private key .+++ ....+++ writing new private key to 'server-key.pem' ----- Generating a 2048 bit RSA private key ............................+++ .....+++ writing new private key to 'client-key.pem' -----
cd /usr/local/mysql/bin —切换目录
mysql_ssl_rsa_setup –user=mysql –basedir=/usr/local/mysql –datadir=/usr/local/mysql/data —创建新的 SSL 文件
创建完成后我们进入/usr/local/mysql/data中查看,我们可以看到有pem后缀名这样的文件
2)产生了pem后缀文件时,我们重启mysql服务,查看mysql的错误日志
# systemctl restart mysqld
以上错误中提示不能获取私钥,这时候我们查看错误中的server-key.pem
我们发现server-key.pem这个文件没有r权限这时候我们给予权限再次重启mysql服务
这时候我们重启了mysql服务,错误日志中就没有错误了
3)登陆mysql查看mysql是否支持ssl安全连接
4)在主 mysql 上的操作完成,再生成一个复制帐号:REQUIRE SSL
在主上启用二进制日志,添加以下两行
注意:以上的server-id是唯一的,主和从的server-id都是不一样的
5)重启mysql服务查看mysql主的状态,开放3306端口
要记住上图所显示的 file 和 position 的值,配置从服务器要用到
二、配置mysql从服务器
1)在从mysql的/etc/my.cnf文件内容
注:server_id要唯一,不能和主mysql的重复
2)把主mysql生成的证书给了从服务器
3)在从上面查看主传来的证书,并且给予client-key.pem权限
随后继续在从上面配置ssl,修改/etc/my.cnf文件
# vim /etc/my.cnf
然后重启mysql服务,并查看mysql错误日志是否有错误信息
以上确定没报错后,查看 从SSL 是否被支持:
4)在配置主从复制之前可以在从 mysql 上用 SSL 连接主服务器试试:
以上图中的192.168.236.100是Master的ip地址
此时SSL 测试连接成功
5)在从上 change master to
#change master to master_host='192.168.236.100', master_user='rep', master_password='pwd123', master_log_file='mysql-bin.000004', master_log_pos=154, master_ssl=1, master_ssl_ca=' /usr/local/mysql/data/ca.pem', master_ssl_cert='/usr/local/mysql/data/client-cert.pem', master_ssl_key='/usr/local/mysql/data/client-key.pem';
master_log_file=’mysql-bin.000004′, 是在主上面show master status的结果这个不可以随便写
6)启用从并且查看从的状态,以下两个值必须为 yes,代表从服务器能正常连接主服务器
测试:在主mysql上创建一个zhangsan库然后再从上面查看是否同步
创建完成后在从上面验证。