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

[经验分享] MySQL多主同步 负载均衡

[复制链接]

尚未签到

发表于 2018-10-2 09:03:03 | 显示全部楼层 |阅读模式
  解决多台写服务器主自增长ID重复问题
  二台Mysql服务器,他们的IP地址分别为:
  A:192.168.0.97
  B:192.168.0.98
  数据库都是 test_3306
  首先我给两台服务器的my.ini 贴出来
  A:my.ini
  
  server-id=2
  master-host=192.168.0.98
  master-user=mydb
  master-password=123
  master-port=3306
  master-connect-retry=1
  replicate-do-db=tbqu
  log-bin=
  log-slave-updates
  binlog-ignore-db=mysql
  slave-skip-errors=all
  B:my.ini
  
  server-id=1
  master-host=192.168.0.97
  master-user=mydb
  master-password=123
  master-port=3306
  master-connect-retry=1
  replicate-do-db=tbqu
  log-bin=
  log-slave-updates
  binlog-ignore-db=mysql
  slave-skip-errors=all
  在这里,配置文件和主从配置方法基本上一样
  log-slave-updates 这个参数一定要加上,否则不会给更新的记录些到二进制文件里
  slave-skip-errors 是跳过错误,继续执行复制操作
  其他参数请参照 http://www.tbqu.com/post/15.html
  多主互备和主从复制有一些区别,因为多主中 都可以对服务器有写权限,所以设计到自增长重复问题
  出现的问题(多主自增长ID重复)
  1:首先我们通过A,B的test表结构
  2:掉A,在B上对数据表test(存在自增长ID)执行插入操作,返回插入ID为1
  3:后停掉B,在A上对数据表test(存在自增长ID)执行插入操作,返回的插入ID也是1
  4:然后 我们同时启动A,B,就会出现主键ID重复
  解决方法:
  我们只要保证两台服务器上插入的自增长数据不同就可以了
  如:A查奇数ID,B插偶数ID,当然如果服务器多的话,你可以定义算法,只要不同就可以了
  在这里我们在A,B上加入参数,以实现奇偶插入
  A:my.ini上加入参数
  auto_increment_offset = 1
  auto_increment_increment = 2
  这样A的auto_increment字段产生的数值是:1, 3, 5, 7, …等奇数ID了
  B:my.ini上加入参数
  auto_increment_offset = 2
  auto_increment_increment = 2
  这样B的auto_increment字段产生的数值是:2, 4, 6, 8, …等偶数ID了
  可以看出,你的auto_increment字段在不同的服务器之间绝对不会重复,所以Master-Master结构就没有任何问题了。当然,你还可以使用3台,4台,或者N台服务器,只要保证auto_increment_increment = N 再设置一下auto_increment_offset为适当的初始值就可以了,那样,我们的MySQL可以同时有几十台主服务器,而不会出现自增长ID重复。
  在这里我们说的是2台MYSQL服务器,你也可以扩展到多台,实现方法类似
  A -> B -> C-> D ->A
  这样一个环形的备份结构就形成了,最后可要记住 自增长ID(主键)要设计好哦,否则会出错的。
  ————————————————————————————————————————–
  假定有三台Mysql服务器,他们的IP地址分别为:
  192.168.1.8
  192.168.1.88
  192.168.1.188
  在192.168.1.8的安装目录下找到my.ini文件,在该文件的最后加上:
  server-id=1
  log-bin
  #asyntest1是我用来试验的数据库名称,到时候要换成你的数据库名字
  binlog-do-db=asyntest1
  #下面这句话很重要,只有加上它,从前一台机器上同步过来的数据才能同步到下一台机器
  log-slave-updates
  master-host=192.168.1.188
  master-user=root
  #在此处填入192.168.1.188的root密码
  master-password=XXXXX
  #asyntest1是我用来试验的数据库名称,到时候要换成你的数据库名字
  replicate-do-db=asyntest1
  master-connect-retry=10
  #出现错误后忽略,如果不加这个,出现任何错误,同步进程会终止
  slave-skip-errors=all
  在192.168.1.88的安装目录下找到my.ini文件,在该文件的最后加上:
  server-id=2
  log-bin
  #asyntest1是我用来试验的数据库名称,到时候要换成你的数据库名字
  binlog-do-db=asyntest1
  #下面这句话很重要,只有加上它,从前一台机器上同步过来的数据才能同步到下一台机器
  log-slave-updates
  master-host=192.168.1.8
  master-user=root
  #在此处填入192.168.1.8的root密码
  master-password=XXXXX
  #asyntest1是我用来试验的数据库名称,到时候要换成你的数据库名字
  replicate-do-db=asyntest1
  master-connect-retry=10
  #出现错误后忽略,如果不加这个,出现任何错误,同步进程会终止
  slave-skip-errors=all
  在192.168.1.188的安装目录下找到my.ini文件,在该文件的最后加上:
  server-id=3
  log-bin
  #asyntest1是我用来试验的数据库名称,到时候要换成你的数据库名字
  binlog-do-db=asyntest1
  #下面这句话很重要,只有加上它,从前一台机器上同步过来的数据才能同步到下一台机器
  log-slave-updates
  master-host=192.168.1.88
  master-user=root
  #在此处填入192.168.1.88的root密码
  master-password=XXXXX
  #asyntest1是我用来试验的数据库名称,到时候要换成你的数据库名字
  replicate-do-db=asyntest1
  master-connect-retry=10
  #出现错误后忽略,如果不加这个,出现任何错误,同步进程会终止
  slave-skip-errors=all
  在192.168.1.8, 192.168.1.88, 192.168.1.188上建立完全一样的数据库asyntest1,重启这三台数据库,然后在任何一台机器上进行的更新操作,都会同步到另外的两台机 器上,这是一种环形同步,在192.168.1.8有任何修改,会首先同步到192.168.1.88的机器上,88的机器再将同步的数据同步到 192.168.1.188的机器上。同样,如果在192.168.1.88上有任何更新,首先会同步到192.168.1.188的机器上,然后再同步 到192.168.1.8的机器上;而在192.168.1.188的机器上有任何更新,首先会同步到192.168.1.8的机器上,然后在同步到 192.168.1.88的机器上。利用这种原理,可以解决任意多台机器的互相同步问题。
  如果出现问题,首先请在每一台服务器上用命令行通过telnet命令检查其他机器3306端口的连通情况。另外,请检查各机器的防火墙设置和杀毒软件的配置。可将这些软件暂停后进行试验。


运维网声明 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-607386-1-1.html 上篇帖子: Centos 上安装mysql 5.1.48 配置环境 下篇帖子: 安装MySQL之后修改编码方式
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

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

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

扫描微信二维码查看详情

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


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


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


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



合作伙伴: 青云cloud

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