简介:
由于mysql的主从复制是明文传送的,但如果在生产环境中跨网络我们使用的主从复制还是明文传送的话,就保证不了数据的安全性,为了解决这一问题,我们需要加密进行传送,也就是基于SSL的加密方法进行传输数据
实验环境:
首先准备两台mysql5.7数据库,一台为主master,一台为从slave服务器
安装mysql,请点击下面的链接,有具体的安装步骤,这里不再一一介绍!!!
安装mysql:http://blog.csdn.net/kangshuo2471781030/article/details/79088357
一、实现基于ssl安全连接的的主从复制
(1.)在主mysql数据库上创建SSL/RSA文件
[root@kang ~]# cd /usr/local/mysql/bin/
[root@kang bin]# mysql_ssl_rsa_setup --basedir=/usr/local/mysql --datadir=/usr/local/mysql/data
(2.)查看创建好的SSL/RSA文件
(3.)重启mysqld服务
[root@kang ~]# systemctl restart mysqld
(4.)查看mysqld的错误日志
通过上图报错信息显示是不能获得私钥
(5.)执行ls查看server-key.pem
[root@kang ~]# ls -l /usr/local/mysql/data/server-key.pem
-rw-------. 1 root root 1675 Jan 18 03:29 /usr/local/mysql/data/server-key.pem
发现没有r权限,添加可读权限
[root@kang ~]# chmod +r /usr/local/mysql/data/server-key.pem
[root@kang ~]# ls -l /usr/local/mysql/data/server-key.pem
-rw-r--r--. 1 root root 1675 Jan 18 03:29 /usr/local/mysql/data/server-key.pem
重启mysql数据库服务,这时再次查看日志就没有错误信息了。
[root@kang ~]# systemctl restart mysqld
(6.)登录mysql数据库查看ssl信息
mysql> show variables like '%ssl%';
从上图可以看出mysql支持了ssl安全连接
注意:启用mysql支持ssl安全连接主要用于mysql主从复制(局域网可以明文复制,但互联网复制建议采用ssl连接)
(7.)在主数据库创建ssl完成之后,再给从服务器slave授权,并且允许从服务器来到主服务器复制数据。
mysql> grant replication slave on *.* to 'rep'@'192.168.197.%' identified by 'pwd123' require ssl;
(8.)在主数据库上启用二进制日志,并重启mysql服务
vim /etc/my.cnf
注意:必须添加server-id,而且id值不能相同。
重启mysql服务:
[root@kang ~]# systemctl restart mysqld
(9.)登录主服务器上查看数据库的状态:
show master status;
注意:上图所示的file和Position的值,配置从服务器要用到。
(10)配置防火墙允许3306/tcp通信放行。
[root@kang ~]# firewall-cmd --permanent --add-port=3306/tcp
success
[root@kang ~]# firewall-cmd --reload
success
注意:以上操作都是在主数据库服务器完成的
接下来就到从服务器上面去配置
(11.)配置从服务器的主配置并添加中继日志以及server-id。
vim /etc/my.cnf
重启mysql服务:
[root@kang ~]# systemctl restart mysqld
注意:server-id不能唯一,不能和其他主机的mysql重复!!!!
(12)、到主服务器上把生成的证书发送给从服务器。
[root@kang ~]# cd /usr/local/mysql/data/
[root@kang data]# scp ca.pem client-cert.pem client-key.pem root@192.168.197.135:/usr/local/mysql/data/
注意:192.168.197.135是从服务器的IP地址
查看从主服务器上复制过来的证书 :
[root@kang ~]# cd /usr/local/mysql/data/
[root@kang data]# ls -l ca.pem client-cert.pem client-key.pem
-rw-r--r--. 1 root root 1074 Jan 18 04:38 ca.pem
-rw-r--r--. 1 root root 1078 Jan 18 04:38 client-cert.pem
-rw-------. 1 root root 1679 Jan 18 04:38 client-key.pem
(13)设置client-key.pem的r读取权限
[root@kang data]# chmod +r client-key.pem
[root@kang data]# ls -l client-key.pem
-rw-r--r--. 1 root root 1679 Jan 18 04:38 client-key.pem
(14)继续在从服务器上配置ssl,修改/etc/my.cnf,添加如下内容
重启mysql服务::
[root@kang ~]# systemctl restart mysqld
查看mysqld.err文件是否有错误日志:
查看ssl是否被支持:
mysql> show variables like '%ssl%';
那么在配置主从复制之前,可以在从服务器上用ssl连接主服务器试试:
[root@kang data]# mysql --ssl-ca=ca.pem --ssl-cert=client-cert.pem --ssl-key=client-key.pem -urep -ppwd123 -h 192.168.197.130
注意:192.168.197.130是主服务器的IP地址
ssl测试连接成功,并且登入的SSL协议是:
Cipher in use is DHE-RSA-AES256-SHA
(15)接下来开始配置主从复制replication,登录从mysql数据库进行配置:
mysql> change master to
-> master_host='192.168.197.130',
-> master_user='rep',
-> master_password='pwd123',
-> master_log_file='mysql-bin.000001',
-> 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';
(16)启用从服务器slave功能
查看从服务器的状态,如果IO线程和SQL线程的值都为YES的话,那么就说明从服务器能够正常连接访问主服务器。
测试:
在主服务器上分别创建库、创建表、插入数据进行测试!!!
此时可以到从服务器上查看了!!
以上数据同步成功!!
SSL(Secure Sockets Layer 安全套接层),及其继任者传输层安全(TransportLayer Security,TLS)是为网络通信提供安全及数据完整性的一种安全协议。复制默认是明文进行传输的,通过SSL加密可以大大提高数据的安全性。
到这里mysql基于ssl主从复制就完事了 !
希望对你有所帮助 !!!
再见!!