实验环境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 状态,在从服务器上指定同步的状态,避免了主键重叠的错误。

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

接下来去配置从服务器:

指定主服务器,指定同步的二进制日志及

  • 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插件

  • 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%';

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

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

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

  • 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';

启动复制线程

  • start slave;

查看slave状态

配置成功,还可以通过命令来检测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

有问题欢迎与我交流QQ1183710107

教你构建MySQL主从结构,实现基于SSL加密的主从同步机制。相关推荐

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

    实验环境RHEL6.4 admin1.tuchao.com    192.168.1.201    主服务器 admin2.tuchao.com    192.168.1.202    从服务器 先在 ...

  2. MySQL:安装和基于SSL加密的主从复制(基于5.7)

    小生博客:http://xsboke.blog.51cto.com -------谢谢您的参考,如有疑问,欢迎交流 目录: --------mysql-5.7.13简介及安装 --------配置my ...

  3. ef mysql 读写分离_基于 EntityFramework 的数据库主从读写分离服务插件

    基于 EntityFramework 的数据库主从读写分离服务插件 1. 版本信息和源码 1.1版本信息 v1.01 beta(2015-04-07),基于 EF 6.1 开发,支持 EF 6.1 之 ...

  4. Centos DNS服务(二)-bind主从配置与基于TSIG加密的动态更新

    DNS的主从配置 DNS从服务器也叫辅服DNS服务器,如果网络上某个节点只有一台DNS服务器的话,首先服务器的抗压能力是有限的,当压力达到一定的程度,服务器就可能会宕机罢工, 其次如果这台服务器出现了 ...

  5. MySQL 5.7 have_ssl 的SSL加密方法

    MySQL 5.7 have_ssl 的SSL加密方法 MySQL 5.7.6或以上版本 (1)创建证书开启SSL验证 –安装openssl yum install -y openssl openss ...

  6. mysql主从备份 ssl_基于SSL的mysql主从复制

    基于SSL的mysql主从复制 [背景] MySQL的协议是明文的,当复制一些重要数据时.有时需要用到SSL功能,以保证数据的安全性. [准备] 准备前期准备 一.主从时间一致性 [root@node ...

  7. MySQL系列:innodb源代码分析之线程并发同步机制

    innodb是一个多线程并发的存储引擎,内部的读写都是用多线程来实现的,所以innodb内部实现了一个比較高效的并发同步机制. innodb并没有直接使用系统提供的锁(latch)同步结构,而是对其进 ...

  8. MySQL(MariaDB)的 SSL 加密复制

    背景: 在默认的主从复制过程或远程连接到MySQL/MariaDB所有的链接通信中的数据都是明文的,在局域网内连接倒问题不大:要是在外网里访问数据或则复制,则安全隐患会被放大很多.由于项目要求需要直接 ...

  9. PyTorch3D 立体隐式形状渲染:教你构建场景 3D 结构

    内容导读 3D 深度学习一直是机器视觉领域的难点,为了准确高效地建立场景的立体模型,得到相对真实的渲染成果,行业内的一些大厂先后开源了自己的研发成果. 本文首发自微信公众号「PyTorch 开发者社区 ...

最新文章

  1. ThreadLocal原理与使用
  2. Upma Xmac 测试 03
  3. 学习,编译ffmpeg tutorial
  4. JAVA入门级教学之(浮点型数据类型)
  5. oracle dd if=/dev/zero of=/dev,【转】dd if=/dev/zero of=的含义是什么?Linux 下的dd命令使用详解...
  6. 8块钱搞定一个顶级域名 (全过程) B篇
  7. POJ 2229 Sumsets(递推,找规律)
  8. 【长文】CNN调优总结
  9. 帧传送、关联与身份验证状态
  10. Jenkins在Windows下的安装与配置
  11. jdbc的commit和rollback
  12. 攒机笔记二十二:台式组装机(2022.9)
  13. iphone更改照片分辨率?手机怎样修改图片分辨率?
  14. 深度学习对抗鲁棒性基础
  15. Python 制作个性化形状的云词
  16. Openssl 编译
  17. 区块链游戏 对战游戏NFT游戏模式开发方案
  18. 为啥214被塞狗粮的单身汪,520还会被塞狗粮
  19. 拓扑学+计算机,拓扑学是什么
  20. 语言学本科论文有什么好的选题推荐吗?

热门文章

  1. [Effective JavaScript 笔记]第27条:使用闭包而不是字符串来封装代码
  2. django源码阅读
  3. 正则表达式中原子的5种类型
  4. PHP版本选择讲解:VC6与VC9,Thread Safe与None-Thread Safe等的选择
  5. Android风格与主题
  6. 怀念童年啊!周二下午没有动画片……
  7. SpringBoot测试失败并报错: Unable to find a @SpringBootConfiguration, you need to use @ContextConfiguration
  8. ArcGIS Python编程案例-电子资料链接
  9. mongoDB cluster insert slow
  10. Java面试中常问的Spring方面问题(涵七大方向共55道题,含答案)