本文介绍的Mysql Dual-Master 复制实施方法可能不是最完美、最强大的。但是在我的应用环境下能很好的满足各项需求。

本文基于我们仅仅使用两台MySQL服务器的情况下,但是你会发现文章中介绍的方法可以很方便的应用于多台服务器的环境下。同样地,我们假设您将用于同步复制的数据库已经在其中一台MySQL服务器上建好了。最后,在开始所有工作之前,我们必须调整所有服务器的防火墙策略以保证彼此能访问对方的3306端口。

环境:

操作系统:CentOS 5.4 x86

MySQL版本:5.0.77

主服务器IP:10.10.1.1

从服务器IP:10.10.1.2

实现目标:主从两台机器MySQL数据双向同步

 
数据库准备工作
分别在两台服务器上执行锁表操作:
shell>mysql -u [user] -p  -e "FLUSH TABLES WITH READ LOCK"
将需要配置同步的数据库Dump出来:
shell>mysqldump -u [user] -p -c [database name] > /tmp/dumpeddb.sql
将dump出来的文件拷贝到另外一台服务器上,方法随意。我用scp
shell>scp -P 22000 /tmp/dumpeddb.sql user@anothermaster:/tmp
如果这台服务器已经建好库了,那么可以直接导数据:
shell>mysql -u [user] -p -D [database name] < /tmp/dumpeddb.sql
如果还没有该库,那么再导数据之前我们需要先建库。
shell>mysql -u [user] -p -e 'CREATE DATABASE "databasename"'
最后我们需要在两台服务器上别分创建一个账号,用来同步数据。
shell>mysql -u root -p
mysql>GRANT REPLICATION SLAVE, REPLICATION CLIENT, SUPER ON databasename.* To replicate IDENTIFIED BY 'replpassword';
mysql>FLUSH PRIVILEGES;
 
修改my.cnf
首先,我们需求修改bind-address选项。保证mysql监听在一个可以被对方访问到的网口上,当然如果你监听在0.0.0.0上就不会有这个问题了,但是这么做通常会带来一些安全问题。我一般会让它监听内网地址
bind-address = 10.10.1.1(主服务器)
bind-address = 10.10.1.2(从服务器)
 
将以下内容加到主服务器的my.cnf里
  1. server-id = 1
  2. auto-increment-increment = 2
  3. auto-increment-offset = 1
  4. log-bin = /var/log/mysql/log-bin.log
  5. binlog-do-db = databasename
  6. binlog-ignore-db = mysql
  7. binlog-ignore-db = test
server-id = 1
auto-increment-increment = 2
auto-increment-offset = 1
log-bin = /var/log/mysql/log-bin.log
binlog-do-db = databasename
binlog-ignore-db = mysql
binlog-ignore-db = test
server-id服务器标识,我们必须给两台机器分配不同的server-id.
log-bin,开启mysql的binlog(二进制日志).开启后mysql会将所有的修改操作记录到binlog中,可以用mysqlbinlog工具查看,里面都是一条一条的sql语句。slave I/O会读取主机的binlog,然后把读取到的内容在slave上执行,这就是mysql主从同步的基本原理。
binlog-do-db,设置哪些数据库写binlog。
binlog-ingore-db,设置哪些数据库不写binlog。
通过这两个选项我们就可以设置哪些库同步哪些库不同步。
auto-increment-incrment和auto-increment-offset这两个选项的设置是为了防止2台服务器互相复制产生关键字段的冲突。如果他们用不同的便宜,比如一个按照1,3,5,7增加而另外一台按照那个2,4,6,8增加。auto-incrment-increment=2自动增加的字段每次步进是2,auto-increment-offset=1自动增加的字段的初始值是1
 
将以下内容添加到从服务器
  1. server-id = 2 
  2. auto-increment-increment = 2
  3. auto-increment-offset = 2
  4. log-bin = /var/log/mysql/log-bin.log
  5. binlog-do-db = databasename
  6. binlog-ignore-db = mysql
  7. binlog-ignore-db = test
server-id = 2
auto-increment-increment = 2
auto-increment-offset = 2
log-bin = log-bin.log
binlog-do-db = demo1
binlog-ignore-db = mysql
binlog-ignore-db = test
binlog-ignore-db = demo
binlog-ignore-db = wang
注意这里auto_increment_offset选项的值跟主服务器上不一样。
 
分别重启mysql服务
shell>/etc/init.d/mysql restart
或者
shell>mysql -u root -p -e "RESET MASTER"
 
配置主机到从机同步
记录主机的master状态
mysql> show master status\G
*************************** 1. row ***************************
            File: log-bin.log.000001
        Position: 98
    Binlog_Do_DB: databasename
Binlog_Ignore_DB: mysql,test
1 row in set (0.00 sec)
根据主机显示结果在从机上配置master参数
mysql>CHANGE MASTER TO
    ->     MASTER_HOST='10.10.1.1',
    ->     MASTER_USER='replicate',
    ->     MASTER_PASSWORD='replpassword',
    ->     MASTER_LOG_FILE='log-bin.log.000001',
    ->     MASTER_LOG_POS=98;

CHANGE MASTER TO MASTER_HOST='192.168.1.108',MASTER_USER='replicate',MASTER_PASSWORD='123456',MASTER_LOG_FILE='log-bin.000001',MASTER_LOG_POS=120;

其中MASTER_HOST、MASTER_USER、MASTER_PASSWORD这些参数可以在my.cnf里。但是我个人更喜欢在mysql里配置,一方面安全点,另一方面MASTER_LOG_FILE和MASTER_LOG_POS这些参数还是得在mysql里面配置,不如一块在myql里配置来的方便。
 
配置从机到主机同步(上一节的步骤反过来执行一遍)。
记录从机上的master状态
mysql> show master status\G
*************************** 1. row ***************************
            File: log-bin.log.000001
        Position: 98
    Binlog_Do_DB: databasename
Binlog_Ignore_DB: mysql,test
1 row in set (0.00 sec)
根据从机显示的结果在主机上配置master参数
mysql>CHANGE MASTER TO
    ->     MASTER_HOST='10.10.1.2',
    ->     MASTER_USER='replicate',
    ->     MASTER_PASSWORD='replpassword',
    ->     MASTER_LOG_FILE='log-bin.log.000001',
    ->     MASTER_LOG_POS=98
 
CHANGE MASTER TO MASTER_HOST='192.168.1.109',MASTER_USER='replicate',MASTER_PASSWORD='123456',MASTER_LOG_FILE='log-bin.000001',MASTER_LOG_POS=120; 
分别开启slave线程
mysql>start slave;
 
解锁
mysql>unlock tables;

MySQL Dual-Master 双向同步的更多相关文章

  1. MySQL伪master+Binlog+同步【转】

    MySQL 中drop 等高危误操作后恢复方法 实验目的: 本次实验以恢复drop操作为例,使用不同方法进行误操作的数据恢复. 方法: 利用master同步 :伪master+Binlog+同步(本文 ...

  2. Centos下MySQL数据库主从双向同步配置

    MYSQL支持单向.异步复制,复制过程中一个服务器充当主服务器,而一个或多个其它服务器充当从服务器.主服务器将更新写入二进制日志文件,并维护日志文件的一个索引以跟踪日志循环.当一个从服务器连接到主服务 ...

  3. MYSQL单双向同步

    Master:192.168.1.101 Slave  :192.168.1.102 单向同步(一) 进入Master启动MYSQL [root@localhost ~]# service mysql ...

  4. MySQL主从双向同步

    最近部署测试环境,涉及到MySQL数据库主从双向同步的部署,记录一下部署过程,正常读写都发生在主库,从库作为备选数据库(热备份),当主库发生异常,数据库自动切换到从库,这里面是怎么监控数据库异常并触发 ...

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

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

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

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

  7. 配置MySQL主从双向同步

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

  8. Windows下MySQL双向同步及环形同步的实现

    记录一下这次做的双向同步及环形同步吧,都是最简单的实现: 具体实现之前,先说些与之有关的内容吧,大部分内容都是网上的,操作步骤则是亲自测试之后记录下的: 一. 数据同步的几种方式: 1. 触发器,在数 ...

  9. mysql 之 主从同步(单向同步和双向同步)

    一. 实验环境部署 主服务器(MySQL-01) IP: 192.168.8.241  端口3306  ,操作系统:Centos6.5 64位 从服务器(MySQL-02)  IP: 192.168. ...

随机推荐

  1. 第二阶段冲刺——seven

    个人任务: 马佳慧:设计界面背景,统一风格. 王金萱:整体运行测试上传到公网上的程序. 季方:修改优化已上传的代码. 司宇航:整体调试程序继续优化. 站立会议: 任务看板和燃尽图:

  2. Alpha 冲刺报告模板

    Alpha 冲刺报告模板 Deadline: 十分钟左右站立会议,控制好时间,不要在此会议上讨论细节问题. 每组一份博客,组内共享,每人都需提交. 模板 队名:xxx 组员1(组长) 今天完成了哪些任 ...

  3. [转帖]devops 容器管理平台 rancher 简介

    https://testerhome.com/topics/10828 chenhengjie123 for PPmoney · 2017年11月13日 · 最后由 c19950809 回复于 201 ...

  4. Fantacy团队第一次站立会议

    1.队名解释 首先队名Fantacy,并没有任何含义,想取幻想(Fantasy)之名,却并非幻想一词,因为我们组的基础并不好,幻想需要有了坚实的基础才能实现,没有基础等于空想.所以我们组的目的是,提升 ...

  5. mybatis 注解和xml 优缺点

    xml: 增加了xml文件,修改麻烦,条件不确定(ifelse判断),容易出错,特殊转义字符比如大于小于 注释: 复杂sql不好用,搜集sql不方便,管理不方便,修改需重新编译 #和$区别: 相同 都 ...

  6. JIRA部署破解和confluence整合

    JIRA是一个项目跟踪管理工具,帮助团队创建计划任务.构建并发布优秀的产品.全球成千上万的团队选择JIRA,用JIRA来捕获.组织管理缺陷.分配任务,跟踪团队的活动.不论在桌面PC还是移动终端设备上, ...

  7. 浅谈JavaSript中的this

    JavaScript的this对初学者来说一直是一个很头疼的问题,因为它的指向刚刚接触的时候往往觉得有点莫名奇妙,这篇博客用实例来概括一下,this代表什么以及如何改变函数的this. 在<Ja ...

  8. 一本通1646GT 考试

    1646:GT 考试 时间限制: 1000 ms         内存限制: 524288 KB [题目描述] 阿申准备报名参加 GT 考试,准考证号为 n 位数 X1X2⋯Xn(0≤Xi≤9),他不 ...

  9. 10缓冲流、转换流、序列化流、Files

    十.流 10.1 缓冲流 10.1.1 概述                 缓冲流是对4个基本的FileXxx流的增强,所以也是4个流,按照数据类型进行分类                     ...

  10. java 23种设计模式 深入浅出

    以下内容只作为对自己对知识进行总结,如有引用他人文章会在文段末尾表明出处: Java的23种设计模式 23种设计模式总共可以分为三大类,进行不定期更新总结,将逐步展开介绍自己对设计模式的理解,多多指教 ...