MySQL基于SSL的半同步复制2014-06-23MySQL的主从复制应用场景非常多,默认的MySQL复制是基于异步且明文传输的,也就是说,速度快,但是从服务器的数据会有着一定的滞后性,明文也就意味着数据传输的不安全。因此笔者这里构建一个简单的基于加密并半同步的主从MySQL,当然由于其半同步的特性,主服务器的写操作速度必会有所降低。究竟如何选择,这取决于场景需要了。实验环境:RHEL5.8 MySQL5.5.28192.168.88.21 master.mos.com master192.168.88.22 slave.mos.com slave注意:笔者做了双机互信,但在此并未写出,且笔者的两个MySQL默认的root用户的密码皆为空,笔者实验环境的/etc/hosts的文件,皆如上。一、 创建CA私有认证及所需密钥文件,在主服务器(master)上操作1、 使用脚本创建CA内部机构,笔者将脚本放到网盘,链接如下:
http://pan.baidu.com/share/link?shareid=139821&uk=1678158691./ casetup.sh #输入ca的主机名和email或者两次回车即可2、 创建Master和salve所需的密钥文件,(内部CA需要国家,省,城市,公司,部门这些信息一致)
# mkdir -pv /data/{mysql,ssl}# cd /data/ssl# (umask 077; openssl genrsa 1024 > mysql.key)# openssl req -new -key mysql.key -out mysql.csr# openssl ca -in mysql.csr -out mysql.crt -days 365# cp /etc/pki/CA/cacert.pem .# cd /data# cp /etc/pki/CA/cacert.pem .# (umask 077; openssl genrsa 1024 > slave.key)# openssl req -new -key slave.key -out slave.csr# openssl ca -in slave.csr -out slave.crt -days 365# ssh slave "mkdir -pv /data/mysql" # scp slave.* cacert.pem slave:/data/ssl/# rm –rf slave.* cacert.pem
二、 载入半同步支持并提供从复制用户(位于主服务器操作)1、 安装MySQL过程参考笔者之前的文章即可:
http://mos1989.blog.51cto.com/4226977/10396532、 插入谷歌提供的半同步补丁模块semisync的主模块支持,并创建复制所需用户mysql> INSTALL PLUGIN rpl_semi_sync_master SONAME "semisync_master.so";mysql> GRANT REPLICATION CLIENT, REPLICATION SLAVE ON *.* TO sroot@192.168.88.22 IDENTIFIED BY "123" REQUIRE SSL;mysql> FLUSH PRIVILEGES ;mysql> qPs: 若需要卸载半同步模块,在mysql中执行如下语句:
mysql> UNINSTALL PLUGIN rpl_semi_sync_master;三、 配置主服务端配置文件/etc/my.cnf[mysqld]ssl #开启sslserver-id = 1 #主ID和从不一致即可rpl_semi_sync_master_enabled=1 #使半同步默认开启rpl_semi_sync_master_timeout=1000 #超过1秒则回到异步模式sync_binlog=1 #将sql语句即时写入二进制日志ssl_ca=/data/ssl/cacert.pemssl_cert=/data/ssl/mysql.crtssl_key=/data/ssl/mysql.key