最近部署测试环境,涉及到MySQL数据库主从双向同步的部署,记录一下部署过程,正常读写都发生在主库,从库作为备选数据库(热备份),当主库发生异常,数据库自动切换到从库,这里面是怎么监控数据库异常并触发自动切换,就不在这里研究记录了(公司用的自研中间件,这里可以使用heartbeat实现,暂不做研究);另外,主库和从库都还可以配置一个只读模式的备库,可以实现读写分离(使用mycat实现),这个看实际业务性能需求是否需要配置。下面只简单介绍主从双向同步的配置:

1. 原理:网上找的一张图解,应该是比较清晰的画出了组网中各个关键部件和作用,这张图解是主从复制,并不是双向同步,不过双向同步也是差不多了,只不过主库既是master也是slave,从库也即是master也是slave。

              

2. 环境准备,主从库的MySQL版本装同一个版本(5.6.38),避免出现未知的异常

主库:192.168.245.130:3306

从库:192.168.245.131:3306

3. 主库和从库的配置保持一致,除了server-id

# 设置server_id,主从服务器配置不同的值
server-id = 1
# 开启二进制日志功能,最好是绝对路径
log_bin = /opt/database/mysql/mysql-bin.log
# 中继日志路径
relay_log = /opt/database/mysql/mysql-relay-bin.log
# 允许从库将其重放的事件也记录到自身的二进制日志中
log_slave_updates = 1
# 二进制日志自动删除/过期的天数。默认值为0,表示不自动删除。
expire_logs_days = 7
# slave重放的事件时忽略的错误,all是忽略所有错误
# ddl_exist_errors:1007,1008,1050,1051,1054,1060,1061,1068,1094,1146
slave-skip-errors = ddl_exist_errors

4. 主从服务均创建帐号并授权:

# 在131机器执行下面SQL,在130机器上面把130换成131后执行,密码自定义
# 创建用户repl
CREATE USER 'repl'@'192.168.245.130' IDENTIFIED BY '';
# 授权
GRANT REPLICATION SLAVE ON *.* TO 'repl'@'192.168.245.130';
# 刷新权限
flush privileges;

5. 主从服务器上均查看slave状态:SHOW MASTER STATUS;

mysql> show master status;
+------------------+----------+--------------+------------------+-------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+------------------+----------+--------------+------------------+-------------------+
| mysql-bin.000001 | 154 | | | |
+------------------+----------+--------------+------------------+-------------------+
1 row in set (0.00 sec)

分别记录主从服务器的File 和 Position,后面有用

6. 主从服务均执行slave同步语句,MASTER_LOG_FILE和MASTER_LOG_POS填写上一步查询的值,MASTER_HOST,MASTER_USER,MASTER_PASSWORD根据实际情况填写,当使用 MASTER_AUTO_POSITION 参数的时候,MASTER_LOG_FILE,MASTER_LOG_POS参数不能使用

CHANGE MASTER TO MASTER_HOST='192.168.245.130', MASTER_USER='repl', MASTER_PASSWORD='123456', MASTER_LOG_FILE='mysql-bin.000001', MASTER_LOG_POS=154;

7. 主从服务器均启动slave:START SLAVE;

8. 主从服务器均查看slave状态:SHOW SLAVE STATUS\G;

mysql> SHOW SLAVE STATUS\G;
*************************** 1. row ***************************
Slave_IO_State: Waiting for master to send event
Master_Host: 192.168.245.130
Master_User: rep
Master_Port: 3306
Connect_Retry: 60
Master_Log_File: mysql-bin.000001
Read_Master_Log_Pos: 154
Relay_Log_File: mysqld-relay-bin.000001
Relay_Log_Pos: 117
Relay_Master_Log_File: mysql-bin.000001
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
...

状态中显示Slave_IO_Running和Slave_SQL_Running状态均为YES,说明主从同步已经配置完成,其中Seconds_Behind_Master显示比master落后的数据时延,通过这个数据可以查看主从的数据时差,判断主从同步的性能压力。

9. 常见问题:

a. 主从复制的时候,SQL线程执行的时候出现异常,Slave_SQL_Running状态编程NO,该怎么解决?

目前本人也没有比较好的办法解决,在配置参数里面添加了slave-skip-errors参数进行忽略错误,实际生产环境该参数如何添加要实际评估,如果不加该参数,出现SQL执行异常的时候,主从同步其实是会阻塞的,只能手动恢复,重新指定pos,stop salve -》change master to -》start slave

b. 怎么删除bin日志

stop salve -》reset slave -》start slave

c. 怎么开始GTID(全局事务ID)

在my.cfg配置文件添加如下参数,然后重启MySQL:

gtid_mode = on
enforce_gtid_consistency = 1
log_slave_updates = 1

MySQL主从双向同步的更多相关文章

  1. 配置MySQL主从双向同步

    原文地址:http://www.cnblogs.com/zhongshengzhen/ 原主数据库:192.168.137.33 原从数据库:192.168.137.197   需要先阅读并操作:ht ...

  2. Centos 配置 Mysql 主从双向同步

    配置之前,请先阅读mysql主从复制: Mysql-主从复制 原:  主从环境: 主服务器:192.168.153.130 从服务器:192.168.153.131 1.从数据库创建同步用户,将主数据 ...

  3. MySQL主从双向同步复制

    本文介绍了mysql主从,实现mysql的双向同步复制. MySQL支持单向.异步复制,复制过程中一个服务器充当主服务器,而一个或多个其它服务器充当从服务器.主服务器将更新写入二进制日志文件,并维护日 ...

  4. MySQL Dual-Master 双向同步

    本文介绍的Mysql Dual-Master 复制实施方法可能不是最完美.最强大的.但是在我的应用环境下能很好的满足各项需求. 本文基于我们仅仅使用两台MySQL服务器的情况下,但是你会发现文章中介绍 ...

  5. MySQL主从数据库同步延迟问题解决(转)

    最近在做MySQL主从数据库同步测试,发现了一些问题,其中主从同步延迟问题是其中之一,下面内容是从网上找到的一些讲解,记录下来以便自己学习: MySQL的主从同步是一个很成熟的架构,优点为:①在从服务 ...

  6. 配置ogg目录索引-oracle与mysql的双向同步步骤

    以下几篇文章描述了利用ogg对oracle与mysql进行双向同步的配置过程以及注意事项,欢迎参考. 配置ogg异构oracle-mysql(1)基础环境配置 http://www.cnblogs.c ...

  7. windows下 MySQL数据库双向同步 配置步骤

          最近在项目中遇到了要实现服务器上MySql数据双向同步,在网上找了很多资料,但是大部分都是在liux系统下配置的, 而且都是互相转载,没有一个详细的步骤,于是决定写一个windows系统下 ...

  8. MYSQL主从库同步配置过程

    MYSQL主从库同步配置过程 为了实现网站数据库的异地备份,采用了MySQL数据库主从同步配置,需要两台服务器分别作为主从库,当主库发生增删改等操作,会实时反映到从库,我的个人服务器配置如下: 主库为 ...

  9. MySQL 数据库双向同步复制

    MySQL 复制问题的最后一篇,关于双向同步复制架构设计的一些设计要点与制约. 问题和制约 数据库的双主双写并双向同步场景,主要考虑数据完整性.一致性和避免冲突.对于同一个库,同一张表,同一个记录中的 ...

随机推荐

  1. 第六章、forms组件

    目录 第六章.forms组件 一.注册功能手写 二.forms组件完整写法 基本使用 三.forms组件前端渲染标签组件 三.forms组件其他知识点 在python console测试 校验数据 f ...

  2. linux在配置菜单中添加选项

  3. Makefile中代码写在同一行和分开几行写有什么区别?

    在Makefile中,写在同一行的代码就相当于是在Linux中的同一行命令行写的代码一样,是一次性执行的:如程序中如下编写Makefile代码(请注意,两个命令之间应该使用分号“:”来进行分隔): a ...

  4. 2.06_Python网络爬虫_正则表达式

    一:爬虫的四个主要步骤 明确目标 (要知道你准备在哪个范围或者网站去搜索) 爬 (将所有的网站的内容全部爬下来) 取 (过滤和匹配我们需要的数据,去掉没用的数据) 处理数据(按照我们想要的方式存储和使 ...

  5. git 获得当前分支名及其对应的远程分支

    git 获得当前分支名及其对应的远程分支 git symbolic-ref -q --short HEADgit rev-parse --abbrev-ref --symbolic-full-name ...

  6. bzoj1458: 士兵占领(最大流)

    题目描述 有一个M * N的棋盘,有的格子是障碍.现在你要选择一些格子来放置一些士兵,一个格子里最多可以放置一个士兵,障碍格里不能放置士兵.我们称这些士兵占领了整个棋盘当满足第i行至少放置了Li个士兵 ...

  7. BZOJ 4522: [Cqoi2016]密钥破解 (Pollard-Rho板题)

    Pollard-Rho 模板 板题-没啥说的- 求逆元出来后如果是负的记得加回正数 CODE #include<bits/stdc++.h> using namespace std; ty ...

  8. docker并不能把部署的工作「减少为0」,比较好的情况下是「基本减少为1」

    很多人说docker改变了运维世界,这句话是从群体角度来说的,是统计学意义上的改变,像mysql,python这样被大规模使用的基础应用,docker化之后为整个群体所节省的时间是非常巨大的. 有人可 ...

  9. /usr/share/rubygems/rubygems/core_ext/kernel_require.rb:55:in `require': cannot load such file -- redis (LoadError)

    报错信息: /usr/share/rubygems/rubygems/core_ext/kernel_require.rb:55:in `require': cannot load such file ...

  10. Codeforces Round #456 (Div. 2) B题

    B. New Year's Evetime limit per test1 secondmemory limit per test256 megabytesinputstandard inputout ...