设为首页 收藏本站
查看: 795|回复: 0

[经验分享] MySQL Dual-Master 双向同步

[复制链接]

尚未签到

发表于 2018-9-30 09:55:42 | 显示全部楼层 |阅读模式
本文介绍的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 &quot;databasename&quot;'
最后我们需要在两台服务器上别分创建一个账号,用来同步数据。
shell>mysql -u root -p
mysql>GRANT REPLICATION SLAVE, REPLICATION CLIENT, SUPER ON databasename.* To replicate>
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里  


  • 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
将以下内容添加到从服务器  


  • server-id = 2
  • auto-increment-increment = 2
  • auto-increment-offset = 2
  • log-bin = /var/log/mysql/log-bin.log
  • binlog-do-db = databasename
  • binlog-ignore-db = mysql
  • binlog-ignore-db = test
  

注意这里auto_increment_offset选项的值跟主服务器上不一样。
分别重启mysql服务
shell>/etc/init.d/mysql restart
或者
shell>mysql -u root -p -e &quot;RESET MASTER&quot;
配置主机到从机同步
记录主机的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;
其中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
分别开启slave线程
mysql>start slave;
解锁
mysql>unlock tables;


运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-606589-1-1.html 上篇帖子: mysql修行练级之mysql新手入门常用命令 下篇帖子: MySQL高可用群集--MMM高可用架构
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表