环境:

主机名 主机IP 操作系统 MySQL版本
mysqlA 172.16.4.235

CentOS 6.5
2.6.32-431.el6.x86_64

mysql-community-server-5.7.5-0.6.m15.el6.x86_64
mysqlB 172.16.4.236

CentOS 6.5
2.6.32-431.el6.x86_64

mysql-community-server-5.7.5-0.6.m15.el6.x86_64


架构:

1、mysqlA和mysqlB互为主备,即双主架构Master-Master。

2、使用semisync半同步机制,保证双主数据一致。

3、只有一个Master承担写操作,另一个备用,可承担读操作,配合应用实现读写分离。

4、双主加上Keepavlied可搭建高可用MySQL集群,实现单点故障切换。(本文不涉及)

一、准备工作

1)安装最新版MySQL5.7

使用YUM安装最新版MySQL5.7:http://qicheng0211.blog.51cto.com/3958621/1593592

MySQL5.7改善了半同步复制,降低了主从数据不一致的风险。


2)修改MySQL配置文件

启动MySQL之前先修改/etc/my.cnf,增加下面的配置。

mysqlA的配置文件:

1
2
3
4
5
6
7
8
9
10
server-id = 1
log-bin=mysql-bin    # 打开二进制日志功能,作为主库时必须设置
log-slave-updates    # 做为从库时,数据库的修改也会写到bin-log里
binlog-ignore-db = mysql
binlog-ignore-db = information_schema
binlog-ignore-db = performance_schema
replicate-wild-ignore-table = mysql.%
replicate-wild-ignore-table = information_schema.%
replicate-wild-ignore-table = performance_schema.%
expire_logs_days=5   # 表示自动删除5天以前的binlog,可选

mysqlB的配置文件:

1
2
3
4
5
6
7
8
9
10
server-id = 2
log-bin=mysql-bin
log-slave-updates
binlog-ignore-db = mysql
binlog-ignore-db = information_schema
binlog-ignore-db = performance_schema
replicate-wild-ignore-table = mysql.%
replicate-wild-ignore-table = information_schema.%
replicate-wild-ignore-table = performance_schema.%
expire_logs_days=5


3)在mysqlA和mysqlB上创建专门用于Replication的账户

1
2
GRANT REPLICATION SLAVE ON *.* TO 'repl_user'@'172.16.4.%' IDENTIFIED BY 'MNVq_YOg9';
> FLUSH PRIVILEGES;

二、Master-Master配置

mysqlA和mysqlB都是刚安装好的、干净的数据库,可根据下面的步骤搭建Master-Master。

1)配置mysqlA为主库
在mysqlA上配置:

1
2
3
> reset master;(清空master的binlog,平时慎用,可选)
> flush tables with read lock;
> show master status;

2)配置mysqlB为mysqlA的从库
在mysqlB上配置:

1
2
3
4
> stop slave;
> CHANGE MASTER TO MASTER_HOST='172.16.4.235', MASTER_USER='repl_user', MASTER_PASSWORD='MNVq_YOg9', MASTER_LOG_FILE='mysql-bin.000001', MASTER_LOG_POS=120;
> start slave;
> show slave status\G

查看Slave_IO_Running和Slave_SQL_Running的状态,如果都为Yes,从库配置成功。

3)将mysqlB设为主

在mysqlB上设置:

1
2
3
> reset master;(清空master的binlog,平时慎用,可选)
> flush tables with read lock;
> show master status;


4)将mysqlA设为mysqlB的从

在mysqlA上配置:

1
2
3
4
5
> unlock tables;
> stop slave;
> CHANGE MASTER TO MASTER_HOST='172.16.4.236', MASTER_USER='repl_user', MASTER_PASSWORD='MNVq_YOg9', MASTER_LOG_FILE='mysql-bin.000001', MASTER_LOG_POS=120;
> start slave;
> show slave status\G

最后在mysqlB上:

1
> unlock tables;

至此双主已经配置完成,下面配置半同步。

三、Semisync半同步配置

1)加载semisync_master和semisync_slave插件

mysqlA和mysqlB上执行:

1
2
3
> INSTALL PLUGIN rpl_semi_sync_master SONAME 'semisync_master.so';
> INSTALL PLUGIN rpl_semi_sync_slave SONAME 'semisync_slave.so';
> show variables like '%semi%';

rpl_semi_sync_master_timeout=10000

表示主库在某次事务中,如果等待时间超过10秒,则降级为普通模式,不再等待备库。如果主库再次探测到备库恢复了,则会自动再次回到semisync模式。
rpl_semi_sync_master_wait_point=AFTER_SYNC

这个参数是MySQL5.7新增的,AFTER_SYNC工作流程:
1、客户端提交一个事务,master将事务写入binlog并刷新到磁盘,发送到slave,master等待slave反馈。
2、slave接收master的binlog,写到本地的relaylog里。发送确认信息给master。
3、当接收到slave反馈,master提交事务并返回结果给客户端。这样就保证了主从数据一致。

2)开启semisync master和slave

mysqlA和mysqlB上执行:

1
2
SET GLOBAL rpl_semi_sync_master_enabled = 1;
SET GLOBAL rpl_semi_sync_slave_enabled = 1;

并修改my.cnf,添加下面两行:

1
2
rpl_semi_sync_master_enabled = 1
rpl_semi_sync_slave_enabled = 1

我们看到semi_sync_master_status是ON的,而semi_sync_slave_status是OFF的,下面我们启动它。

3)使半同步机制生效

mysqlA和mysqlB上执行:

1
2
> stop slave;start slave;
> show status like '%semi%';

我们看到semi_sync_slave_status是ON了,已经启动。

本文转自 张斌_青岛 51CTO博客,原文链接:http://blog.51cto.com/qicheng0211/1596131

MySQL双主(master-master)+半同步(Semisync Replication)相关推荐

  1. mysql双主不同步问题

    1:碰到的问题 mysql双主数据库数据不同步 错误提示类似于:1032等,不仅1032我跳过后还有其他的各种问题 查询网上后,基本是两种解决方案1:直接跳过这一步错误,但是因为不同步太多了,跳过之后 ...

  2. mysql双主使用reset master清除日志要小心

    假设a.b两台服务器做了mysql双主. 有一表是tab是这样的 create table tab(id int primary key auto_increment,name varchar(20) ...

  3. 搭建Mysql双主双从报错The slave I/O thread stops because master and slave have equal MySQL server UUIDs(已解决)

    搭建Mysql双主双从报错The slave I/O thread stops because master and slave have equal MySQL server UUIDs 具体问题 ...

  4. 运维工程师必备之MySQL数据的主从复制、半同步复制和主主复制详解

    一.MySQL复制概述 ⑴.MySQL数据的复制的基本介绍 目前MySQL数据库已经占去数据库市场上很大的份额,其一是由于MySQL数据的开源性和高性能,当然还有重要的一条就是免费~不过不知道还能免费 ...

  5. MySQL 5.7 深度解析: 半同步复制技术

    复制架构衍生史 在谈这个特性之前,我们先来看看MySQL的复制架构衍生史. MySQL的复制分为四种: 普通的replication,异步同步. 搭建简单,使用非常广泛,从mysql诞生之初,就产生了 ...

  6. keepalived mysql双主架构图_基于MySQL双主的高可用解决方案理论及实践

    MySQL在互联网应用中已经遍地开花,但是在银行系统中,还在生根发芽的阶段.本文记录的是根据某生产系统实际需求,对数据库高可用方案从需求.各高可用技术特点对比.实施.测试等过程进行整理,完善Mysql ...

  7. MySQL双主(master-master)补充

    环境: 主机名 主机IP 操作系统 MySQL版本 mysqlA 172.16.4.235 CentOS 6.5 2.6.32-431.el6.x86_64 mysql-community-serve ...

  8. 企业级运维——Mysql主从复制(异步、半同步、全同步)

    文章目录 主从复制原理 1.主节点 binary log dump 线程 2.从节点I/O线程 3.从节点SQL线程 主从复制过程 异步模式(mysql async-mode) 半同步模式(mysql ...

  9. mysql server 2012_Windows server 2012 搭建mysql双主

    Windows server 2012 搭建mysql双主 环境介绍 Window server 2012 r2 Mysql 5.5.25 主机IP Server1 172.16.79.112 Ser ...

最新文章

  1. python 中 sorted() 和 list.sort() 的用法
  2. 遍历jenkins build后的文件夹,找出最新“build NO.”复制到制定目录进行操作
  3. vim中开shell
  4. nlp mrc的损失是什么_你对NLP的迁移学习爱的有多深?21个问题弄懂最新的NLP进展...
  5. Javascript 获取页面高度(多种浏览器)
  6. java研发工程师与java后端工程师有什么区别?
  7. hdu 4640 Island and study-sister(状态压缩dp)
  8. 深度学习pytorch基础入门教程(1小时)-张量、操作、转换
  9. php 工资 2018,2018年PHP程序员的进阶之路
  10. Python 宽学网
  11. 几个找pdf资源的网站
  12. 编译华硕路由器ACRH17源代码小记
  13. flash swf文件 网页播放功能方案实现
  14. 庄子 独与天地精神往来,而不敖倪于万物
  15. js练习之--数组方法,数组实现文字内容高亮、替换!
  16. mysql8初始化 2021-12-18版本 设置mysql大写
  17. Win10系统 Python解释器:anaconda的安装
  18. 教你一键开发桌面应用程序
  19. 小米5x android auto,小米 5s Plus重生——伪装Pixel XL
  20. android打开蓝牙设置界面,Android 点击跳转到蓝牙设置界面

热门文章

  1. 谷歌开源 MobileNetV3:新思路 AutoML 改进计算机视觉模型移动端
  2. 阿布扎比成立全球首所培养研究生的人工智能大学
  3. 从换脸到换姿势,AI 在图像处理的道路上越走越魔幻
  4. python中的装饰器介绍
  5. 深度丨深度强化学习研究的短期悲观与长期乐观(长文)
  6. 干货丨机器学习和深度学习概念入门
  7. 《数学之美》第13章 Google AK-47的设计者—阿米特.辛格博士
  8. Pytorch+LSTM+AI自动写诗实战
  9. 解析|2G~5G与未来天线技术!
  10. 定了!5G商用牌照近期发放​​​​,透露两大信息(附:2019年5G行业关键材料及市场研究报告)...