本文介绍的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. think in UML(一)

    从一开始上课老师就讲面向对象设计面向对象设计,然而对于什么是面向对象是什么没有什么具体的概念,相较于面向对象设计,面向对象又有什么什么优势.<大象>从一开始就交代了我最基础的知识欠缺,在书 ...

  2. 转帖 IBM要推POWER9,来了解一下POWER处理器的前世今生

    https://blog.csdn.net/kwame211/article/details/76669555 先来说一下最新的POWER 9 在Hot Chips会议上首次提到的IBM Power ...

  3. OneZero第四周第四次站立会议(2016.4.14)

    1. 时间: 15:00--15:10  共计10分钟. 2. 成员: X 夏一鸣 * 组长 (博客:http://www.cnblogs.com/xiaym896/), G 郭又铭 (博客:http ...

  4. 深入 Java Web

    该系列 记录下,深入 学习 Java Web 过程. 1.Tomcat总体结构 2.Tomcat 启动流程 3.ServletContext详解 4.Servlet详解

  5. robotframework运行时后台报错UnicodeDecodeError

    win10环境下报错: Traceback (most recent call last): File "C:\Python27\lib\site-packages\robotide\con ...

  6. BZOJ2001 [Hnoi2010]City 城市建设 CDQ分治

    2001: [Hnoi2010]City 城市建设 Time Limit: 20 Sec  Memory Limit: 162 MB Description PS国是一个拥有诸多城市的大国,国王Lou ...

  7. 【刷题】BZOJ 4946 [Noi2017]蔬菜

    Description http://www.lydsy.com/JudgeOnline/upload/Noi2017D2.pdf Solution 网上大部分都是并查集写法,但是有大神写了非并查集写 ...

  8. 自定义Kettle数据库插件

    项目需要实现使用Kettle向神通数据库中写入数据,Kettle官方标准的数据库插件里面并没有对神通数据库的支持,因此需要自己写一个数据库插件.下面我们开始写一个数据库插件 1.在eclipse中创建 ...

  9. jquery生成二维码并实现图片下载

    1.引入jquery的两个js文件 <script src="../scripts/erweima/jquery-1.10.2.min.js"></script& ...

  10. Ubuntu下安装BeautifulSoup4

    先去下载beautifulsoup的安装包https://www.crummy.com/software/BeautifulSoup/bs4/download/4.0/ 下载完之后解压 tar -xv ...