解决多台写服务器主自增长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端口的连通情况。另外,请检查各机器的防火墙设置和杀毒软件的配置。可将这些软件暂停后进行试验。
分享到:
相关推荐
Keepalive+mysql主主同步是指在高可用性环境中,使用Keepalive和MySQL主主同步技术来实现数据库的高可用性和负载均衡。下面是相关的知识点: 一、Keepalive简介 Keepalive是一个高可用性解决方案,主要用于实现...
MySQL负载均衡是数据库系统优化和高可用性的重要手段,它能有效地分散数据库服务器的压力,确保数据的稳定性和服务的连续性。在这个完美解决方案中,主要采用了读写分离、主从复制以及HAProxy作为负载均衡器的技术...
在Windows环境下搭建MySQL主备双向复制以及Mycat负载均衡,是一种常见的数据库架构策略,用于提高数据的可用性、一致性和系统的负载均衡能力。以下详细的知识点说明了这一过程: 1. MySQL主备双向复制的概念和作用...
随着用户量和数据量的不断增长,单个MySQL实例可能无法满足高并发和大数据处理的需求,这时就需要采用一些策略来扩展数据库服务,比如主主复制、读写分离、高可用负载均衡等。 1、**简介** MySQL高可用负载均衡...
Galera Cluster 是一种高可用性和高性能的 MySQL 集群解决方案,通过多个节点组成的集群系统来实现数据同步和负载均衡。 MySQL Fabric 是 MySQL 官方提供的一款 MySQL 集群解决方案,通过 Fabric Node 和 Fabric ...
MySQL集群(MySQL Cluster)是MySQL数据库的一种分布式存储模式,它通过数据分片(Sharding)将数据分散在多个节点上,以实现负载均衡和高可用性。集群中的每个节点都包含完整的数据库副本,这样即使某个节点出现...
在本方案中,LVS负责将前端用户的读请求分发到多个MYSQL服务器上,实现负载均衡。 2. KEEPALIVED KEEPALIVED是一个用C语言编写的软件,它可以用来实现虚拟路由器冗余协议(VRRP)和负载均衡,它在LVS的基础上添加高...
MySQL 双主复制 + LVS + Keepalived 实现 MySQL 负载均衡 MySQL 双主复制 + LVS + Keepalived 是一种常见的 MySQL 负载均衡解决方案,通过使用双主复制确保数据的一致性,使用 LVS 实现负载均衡,使用 Keepalived ...
最后,需要安装MySQL,配置MySQL主从同步,实现读写分离和负载均衡。 第三部分:架构实现 本文的架构实现如图1所示。服务器1(master)和服务器2(backup)分别安装Nginx和Keepalived,Nginx分别配置服务器3和...
本文档将深入比较MySQL 5.5和PostgreSQL 9.1这两个版本在负载均衡方面的不同,提供给数据库管理员部署和扩展网站规模时的参考。 首先,我们需要了解负载均衡在数据库中的作用。负载均衡是为了提高数据库的高可用性...
- 易于扩展,可添加多个从服务器实现负载均衡。 缺点: - 在数据库切换过程中可能出现短暂的事务丢失。 1.4 实战应用 1.4.1 适用场景 适用于仅有两台数据库服务器且尚未实现读写分离的环境。这种方案简化了单台...
Keepalived+MySQL 双主同步复制可以实现高可用性和负载均衡,提高系统的可靠性和可扩展性。通过配置网络、安装 Keepalived、配置 Keepalived 和配置 MySQL,能够实现一套高可用性的 MySQL 集群系统。
主从备份的基本思路是在多个MySQL服务器之间同步数据,通常有一个主服务器(Master)和一个或多个从服务器(Slave)。主服务器负责写入操作,而从服务器则负责读取操作。当主服务器的数据发生变化时,这些变化会被...
MySQL双主复制+LVS+Keepalived实现MySQL负载均衡归类 本文档将详细介绍如何使用MySQL双主复制、LVS(Linux Virtual Server)和Keepalived实现MySQL负载均衡归类。该解决方案可以提供高可用性和负载均衡的MySQL...
MySQL Cluster是一种高可用性和负载均衡的数据存储解决方案,它通过分布式数据存储和计算来提供持续的服务。在本解决方案中,我们主要关注的是如何构建和管理MySQL Cluster以实现数据库的高可用性和负载均衡。 首先...
### MySQL负载均衡与双主热备方案详解 #### 一、引言 随着业务规模的不断扩大,单一数据库服务器往往难以满足高并发访问的需求。为了提高系统的稳定性和可用性,采用MySQL负载均衡和双主热备(Master-Master ...
在本教程中,我们将深入探讨如何在Linux环境中源码安装MySQL、MySQL主从复制、Nginx、Nginx负载均衡、Redis、PHP、phpredis以及Tomcat。这些技术是构建高效、可扩展的Web应用架构的基础。让我们逐一了解安装过程。 ...
MySQL的负载均衡是一种技术,旨在优化数据库系统的性能和可伸缩性,通过将数据库操作分散到多个服务器上,以防止单个服务器过载。本文主要介绍如何在MySQL环境下实现负载均衡,包括基本思路和多种实现方式。 **一、...