实验环境RHEL6.4
admin1.tuchao.com 192.168.1.201 主服务器
admin2.tuchao.com 192.168.1.202 从服务器
先在两个机器上安装mysql5.5.3,mysql的安装流程我这里就省略了。
主服务器配置:
设置一个唯一的server_id,在配置文件中定义。
server_id = 10
启用二进制日志,默认是启用的。
创建具有复制权限的用户
注意这里在初始化MySQL完成后要滚动一下日志(flush logs;)并记录当前的 show master status 状态,在从服务器上指定同步的状态,避免了主键重叠的错误。
我们先看下主服务器上的数据
接下来去配置从服务器:
指定主服务器,指定同步的二进制日志及
change master to master_host='192.168.1.201',master_user='tuchao',master_password='123456',master_log_file='mysql-bin.000004',master_log_pos=107;
启动复制线程
start slave;
show slave status\G
Seconds_Behind_Master: 0 这个值表示从服务器比主服务器落后多长时间
复制线程正常工作了,我们看看数据有没有同步过来。
我们还要了解下,在从服务器数据目录的两个文件。
master.info
relay-log.info 而这个文件则记录了,当前服务器的中继日志和主服务器的二进制日志及pos位置。
设置MySQL的半同步机制,先来看看我为大家准备的图,了解下什么是MySQL的半同步。
Master:
安装semisync_master.so插件
查看相关变量。
+------------------------------------+-------+
| Variable_name | Value |
+------------------------------------+-------+
| rpl_semi_sync_master_enabled | OFF |
| rpl_semi_sync_master_timeout | 10000 |
| rpl_semi_sync_master_trace_level | 32 |
| rpl_semi_sync_master_wait_no_slave | ON |
+------------------------------------+-------+
默认是功能是关闭的,需要启动起来。
设置等待slave相应的时间
再查看验证一下。
> show global variables like '%semi%';
+------------------------------------+-------+
| Variable_name | Value |
+------------------------------------+-------+
| rpl_semi_sync_master_enabled | ON |
| rpl_semi_sync_master_timeout | 2000 |
| rpl_semi_sync_master_trace_level | 32 |
| rpl_semi_sync_master_wait_no_slave | ON |
+------------------------------------+-------+
Slave:
安装semisync_slave.so插件
启用功能
验证
+---------------------------------+-------+
| Variable_name | Value |
+---------------------------------+-------+
| rpl_semi_sync_slave_enabled | ON |
| rpl_semi_sync_slave_trace_level | 32 |
+---------------------------------+-------+
重启IO线程,或者重启Slave都可以。
查看主服务器上的semi_sync是否开启,注意clients 变为1 ,证明主从半同步复制连接成功:
show global status like '%semi%';
可以写到my.cnf中永久生效。
Master
[mysqld]
rpl_semi_sync_master_enabled=1
rpl_semi_sync_master_timeout=1000 # 1 second
innodb_flush_logs_at_trx_commit=1 当有事务提交时,会立即记录日志,并同步到磁盘。
sync_binlog=1
Slave
[mysqld]
rpl_semi_sync_slave_enabled=1
read_only=1
skip_slave_start=1 跳过自启动Slave
基于SSL加密的同步复制
先在主服务器上自建CA,生成密钥,创建自签名证书。
(umask 077;openssl genrsa -out private/cakey.pem 2048)
openssl req -new -x509 -key private/cakey.pem -out cacert.pem -days 365
touch index.txt
echo '01' >serial
生成密钥,创建服务证书申请,签署服务证书。
cd /usr/local/mysql
mkdir ssl
(umask 077;openssl genrsa -out ssl/master.key 2048)
openssl req -new -key ssl/master.key -out ssl/master.csr -days 100
openssl ca -in ssl/master.csr -out ssl/master.crt -days 100
chown -R mysql.mysql ssl
修改my.cnf添加如下内容:
ssl
ssl-ca=/etc/pki/CA/cacert.pem
ssl-cert=/usr/local/mysql/ssl/master.crt
ssl-key=/usr/local/mysql/ssl/master.key
重启mysqld服务
来到从服务器,生成密钥申请证书。
把请求书,复制到CA上。
scp ssl/mysql.csr admin1:/etc/pki/CA
CA签署证书,并且把签好的证书和CA自己的证书复制到从服务器。
修改权限
在从服务器my.cnf文件加入一行ssl。
重启mysql服务
主服务器授权openssl用户
flush privileges;
切到从服务器,指定master。
change master to master_host='admin1.tuchao.com',master_user='openssl',master_password='123456',master_log_file='mysql-bin.000003',master_log_pos=360,master_ssl=1,master_ssl_ca='/usr/local/mysql/ssl/cacert.pem',master_ssl_cert='/usr/local/mysql/ssl/mysql.crt',master_ssl_key='/usr/local/mysql/ssl/mysql.key';
启动复制线程
查看slave状态
配置成功,还可以通过命令来检测SSL。
有问题欢迎与我交流QQ1183710107