3.3 启动slave同步进程,连接主服务器
- mysql> change master to
- -> master_host='172.16.1.18',
- -> master_user='backup_ssl',
- -> master_password='redhat',
- -> master_log_file='mysql-bin.000001',
- -> master_ssl=1,
- -> master_ssl_ca='/data/mydata/ssl/cacert.pem',
- -> master_ssl_cert='/data/mydata/ssl/mysql.crt',
- -> master_ssl_key='/data/mydata/ssl/mysql.key';
- mysql> start slave
- mysql> show slave status\G; ##查看slave状态
|
关注以下参数:
- Slave_IO_Running: Yes ##IOthread是否运行,如果为No代表slave运行不正常
- Slave_SQL_Running: Yes ##SQLthread是否运行,如果为No代表slave运行不正常
- Master_SSL_CA_File: /data/mydata/ssl/cacert.pem ##是否启用了ssl
- Master_SSL_Cert: /data/mydata/ssl/mysql.crt
- Master_SSL_Key: /data/mydata/ssl/mysql.key
- Master_Log_File: mysql-bin.000023 ##最后接收的主服务器的二进制
- Exec_Master_Log_Pos: 1087 ##最后执行的位置,查看master中是不是该位置
- Last_IO_Errno: 0 ##最后一次IOthread有没有报错
|
如果与上图累似,slave基本正常,下面测试
四、测试
4.1 主服务器上建立一数据库
mysql> create database testssl; |
4.2 从服务器上查看有没有同步过去
如果同步成功,说明没有错误
4.3 从服务器mysql基于ssl连接主服务器,查看连接状态是否加密
- mysql -ubackup_ssl -predhat -h172.16.1.18 --ssl-cert=/data/mydata/ssl/mysql.crt \
- --ssl-key=/data/mydata/ssl/mysql.key
|
查看连接状态
- mysql> status;
- Current user: backup_ssl@slave.laoguang.me
- SSL: Cipher in use is DHE-RSA-AES256-SHA
|
由此可知连接是加密的,可以用tcpdump抓包测试
到此基于SSL的mysql主从同步构建完毕,如果你的从服务器是新加的,先将主服务器最近一次的完整备份恢复到从服务器,并从同步完整备份后的二进制日志,即change master时添加master_log_op=n, n代表完整备份后的二进制位置,其它的基本一致。
后记:今天尝试只给slave签发证书,master拥有有CA的证书,理论上应该能成功的,不过就是连接不上,所以暂时放弃,然后尝试master的证书名字为master.crt,slave的证书为slave.crt结果也连不上,后来google,把master与slave的证书,私钥都叫mysql.crt,mysql.key才得以完成,有了解的人说明一下,单证书为何不行,两个证书名称不一致也不行在原因,感谢!