mysql SSL 机制_教你构建MySQL主从结构,实现基于SSL加密的主从同步机制。

实验环境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

启用二进制日志,默认是启用的。

创建具有复制权限的用户grant replication slave,replication client on *.* to 'tuchao'@'192.168.1.%' identified by '123456';

注意这里在初始化MySQL完成后要滚动一下日志(flush logs;)并记录当前的 show master status 状态,在从服务器上指定同步的状态,避免了主键重叠的错误。

我们先看下主服务器上的数据

38cedfc7a508480f7b73d7668d3caffe.png

接下来去配置从服务器:

48c4d29ad52e2bbc8ee32acfbc6ca52d.png

指定主服务器,指定同步的二进制日志及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

c38140f45d248831d97b8ed56b30e464.png

Seconds_Behind_Master: 0    这个值表示从服务器比主服务器落后多长时间

复制线程正常工作了,我们看看数据有没有同步过来。

9e55a41b7a83dace0c261595e3c8b1f6.png

我们还要了解下,在从服务器数据目录的两个文件。

master.info

144cc51df834cdfedef4490f35852e9c.png

relay-log.info  而这个文件则记录了,当前服务器的中继日志和主服务器的二进制日志及pos位置。

设置MySQL的半同步机制,先来看看我为大家准备的图,了解下什么是MySQL的半同步。

36b7fb78ba3b53c808e9c884e6b9f073.png

Master:

安装semisync_master.so插件install plugin rpl_semi_sync_master soname 'semisync_master.so';

查看相关变量。show global variables like '%semi%';

+------------------------------------+-------+

| 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    |

+------------------------------------+-------+

默认是功能是关闭的,需要启动起来。set global rpl_semi_sync_master_enabled = 1;

设置等待slave相应的时间set global rpl_semi_sync_master_timeout = 2000;

再查看验证一下。

> 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插件install plugin rpl_semi_sync_slave soname 'semisync_slave.so';

启用功能set global rpl_semi_sync_slave_enabled = 1;

验证show global variables like 'rpl_semi%';

+---------------------------------+-------+

| Variable_name                   | Value |

+---------------------------------+-------+

| rpl_semi_sync_slave_enabled     | ON    |

| rpl_semi_sync_slave_trace_level | 32    |

+---------------------------------+-------+

重启IO线程,或者重启Slave都可以。stop slave

start slave

查看主服务器上的semi_sync是否开启,注意clients 变为1 ,证明主从半同步复制连接成功:

show global status like '%semi%';

c660b611e59bf2e7877850114e41e8f8.png

可以写到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

f05497867b277dd345e40d8a769cf39c.png

修改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服务

来到从服务器,生成密钥申请证书。mkdir ssl

(umask 077;openssl genrsa -out ssl/mysql.key 2048)

openssl req -new -key ssl/mysql.key  -out ssl/mysql.csr -days 100

把请求书,复制到CA上。

scp ssl/mysql.csr admin1:/etc/pki/CA

CA签署证书,并且把签好的证书和CA自己的证书复制到从服务器。openssl ca -in mysql.csr -out mysql.crt -days 100

scp cacert.pem mysql.crt admin2:/usr/local/mysql/ssl/

修改权限chown -R mysql.mysql ssl

在从服务器my.cnf文件加入一行ssl。

重启mysql服务

主服务器授权openssl用户grant replication slave,replication client on *.* to openssl@'admin2.tuchao.com' identified by '123456';

flush privileges;

切到从服务器,指定master。spacer.gifchange 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';

启动复制线程start slave;

查看slave状态

dcdbc00569a51a03260bb8c28657e3d2.png

配置成功,还可以通过命令来检测SSL。mysql --ssl-ca=/usr/local/mysql/ssl/cacert.pem   --ssl-cert=/usr/local/mysql/ssl/mysql.crt --ssl-key=/usr/local/mysql/ssl/mysql.key -uopenssl -hadmin1.tuchao.com -p123456

ae76df89363bd8a9fd20ecefc45abb3d.png

有问题欢迎与我交流QQ1183710107

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值