首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

mysql双主 防主键冲突

基础概念

MySQL双主(Master-Master)复制是一种高可用性架构,其中两个MySQL服务器互相作为对方的主服务器,数据在两个服务器之间双向同步。这种架构可以提高系统的可用性和容错性。

优势

  1. 高可用性:当一个主服务器出现故障时,另一个主服务器可以接管服务。
  2. 负载均衡:可以将读写请求分散到两个主服务器上,提高系统性能。
  3. 数据冗余:数据在两个服务器上都有备份,减少数据丢失的风险。

类型

MySQL双主复制主要有以下几种类型:

  1. 异步复制:主服务器在提交事务后立即返回,不等待从服务器确认。
  2. 半同步复制:主服务器在提交事务后等待至少一个从服务器确认后才返回。
  3. 组复制:多个服务器组成一个复制组,数据在组内同步。

应用场景

  1. 高并发读写系统:适用于需要处理大量读写请求的系统。
  2. 高可用性要求高的系统:适用于对系统可用性要求极高的应用。
  3. 地理分布式系统:适用于需要在不同地理位置部署多个数据中心的系统。

主键冲突问题

在MySQL双主复制中,主键冲突是一个常见的问题。当两个主服务器同时插入具有相同主键的记录时,就会发生主键冲突。

原因

  1. 并发插入:两个主服务器同时插入具有相同主键的记录。
  2. 数据不一致:由于网络延迟或其他原因,两个主服务器上的数据不一致。

解决方法

  1. 使用自增主键:确保每个服务器的自增主键步长不同,避免主键冲突。
  2. 使用自增主键:确保每个服务器的自增主键步长不同,避免主键冲突。
  3. 使用UUID作为主键:UUID是全局唯一的,不会发生主键冲突。
  4. 使用UUID作为主键:UUID是全局唯一的,不会发生主键冲突。
  5. 使用分布式ID生成器:如Twitter的Snowflake算法,生成全局唯一的ID。
  6. 配置复制过滤:在复制过程中过滤掉可能导致冲突的表或列。
  7. 配置复制过滤:在复制过程中过滤掉可能导致冲突的表或列。
  8. 监控和报警:设置监控系统,及时发现和处理主键冲突。

参考链接

通过以上方法,可以有效解决MySQL双主复制中的主键冲突问题,确保系统的高可用性和数据一致性。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

MySQL adddrop字段时报主键冲突

问题现象 很多DBA朋友做ddl 变更比如添加、删除字段时,一定概率上会遇到如下报错: Duplicate entry '7458421' for key 'PRIMARY' 错误提示是主键冲突,但是当我们去查询...问题分析 首先我们通过一个思维导图了解一下MySQL online DDL 的过程,大家注意commit阶段,会把ddl 执行期间的记录的 log 重新应用到新的表上。 ?...从官方文档中的描述所说 online ddl 期间,其他会话执行的dml操作造成唯一键冲突的sql会记录到 online log 中,在commit阶段等变更结束之后再应用这些sql会导致报错唯一键冲突...https://bugs.mysql.com/bug.php?...76895 https://bugs.launchpad.net/percona-server/+bug/1445589 关联知识 innodb_online_alter_log_max_size 是MySQL

4.8K21
  • Mysql(双主)主主架构配置

    因此,如果是双主或者多主,就会增加mysql入口,增加高可用。...不过多主需要考虑自增长ID问题,这个需要特别设置配置文件,比如双主,可以使用奇偶,总之,主之间设置自增长ID相互不冲突就能完美解决自增长ID冲突问题。...MySQL双主(主主)架构方案思路是: 1.两台mysql都可读写,互为主备,默认只使用一台(masterA)负责数据的写入,另一台(masterB)备用; 2.masterA是masterB的主库,masterB...又是masterA的主库,它们互为主从; 3.两台主库之间做高可用,可以采用keepalived等方案(使用VIP对外提供服务); 4.所有提供服务的从服务器与masterB进行主从同步(双主多从);...2,4,6,8 等,这样会避开双主 id 重复的问题。

    8.7K120

    mysql5.7主主(双主)复制 原

    准备工作 (本文永久地址:http://woymk.blog.51cto.com/10000269/1922786) 配置环境:centos6.9,mysql5.7 先安装、配置好两台MySQL服务器...在server2操作 vi /etc/my.cnf 修改或增加: server-id=2 #这个数值不能和主一样 log-bin=mysql-bin # 启用二进制日志 auto-increment-increment...= 2  #每次增长2 auto-increment-offset = 2 #设置自动增长的字段的偏移量 可选参数(2选1,这两个参数设置成和主一样): replicate-do-db=db1,db2...回到server1上操作 运行mysql客户端 mysql -uroot -p 取消server1上数据库的锁定 mysql> unlock tables; 执行以下命令 stop slave; ...主主复制测试 经测试,主主复制配置成功。 具体过程略,请自行请参考上一篇 mysql5.7主从配置 里的方法。

    2.6K20

    MySQL 高可用——双主

    MySQL的高可用方案一般有如下几种: keepalived+双主,MHA,PXC,MMM,Heartbeat+DRBD等,比较常用的是keepalived+双主,MHA和PXC。...Keepalived+mysql双主来实现MySQL-HA,我 们必须保证两台MySQL数据库的数据完全一样,基本思路是两台MySQL互为主从关系,通过Keepalived配置虚 拟IP,实现当其中的一台...一、配置两台MySQL主主同步 该过程的第一部分就是master记录二进制日志。在每个事务更新数据完成之前,master在二日志记录这些改 变。MySQL将事务写入二进制日志。...auto-increment-offset是用来设定数 据库中自动增长的起点(即初始值),因为这两能服务器都设定了一次自动增长值2,所以它们的起点必须得不同,这样才能避免两台服务器数据同步时出现主键冲突...注:若主MYSQL服务器已经存在,只是后期才搭建从MYSQL服务器,在置配数据同步前应先将主 MYSQL服务器的要同步的数据库拷贝到从MYSQL服务器上(如先在主MYSQL上备份数据库,再用备份 在从MYSQL

    2.1K21

    MySQL主从配置——双主 原

    MySQL主从配置——双主 本人是测试环境,准备了两台安装好mysql的服务器(masterA和masterB),可以保证没数据写入,否则需要先将两台服务器上的数据一致,然后再进行主从配置,步骤是:先...环境 MySQL双主(主主)架构思路: 两台mysql都可读写,互为主备,默认只使用一台(masterA)负责数据的写入,另一台(masterB)备用; masterA是masterB的主库,masterB...又是masterA的主库,它们互为主从; 所有提供服务的从服务器与masterB进行主从同步(即可实现双主多从); 架构图 搭建主从配置 创建主从同步用户 masterA: [root@adailinux...server-id不同 auto_increment_increment = 2 #设置主键单次增量 auto_increment_offset = 1 #设置单次增量中主键的偏移量 log_bin...= 2 #设置单次增量中主键的偏移量 log_bin = mysql-bin #创建主从需要开启log-bin日志文件 log-slave-updates

    1.3K40

    mysql 5.6配置双主同步

    mysql8.0已经发布几年了,现在还有使用mysql5.6的情况,今天我们来温故一下mysql5.6的双主配置, 配置 MySQL 5.6 双主同步的步骤如下: 请注意,你需要在两个服务器上都执行这些步骤...1.配置 my.cnf 文件 打开 /etc/my.cnf 文件并添加以下配置: 在 Master1 上: [mysqld] server_id=1 log_bin=mysql-bin replicate-do-db...2.重启 MySQL 服务 使用以下命令重启 MySQL 服务: sudo service mysql restart 3....在 MySQL 交互式命令行中输入: CREATE USER 'repl'@'%' IDENTIFIED BY 'password'; GRANT REPLICATION SLAVE ON *.* TO...以上就是配置 MySQL 5.6 双主同步的步骤。请注意,双主同步需要小心处理,因为它可能导致数据不一致的问题,如双重写入。因此,建议只在熟悉这个概念的情况下使用它,并确保有恰当的冲突解决策略。

    33320

    MySQL的双主复制介绍

    MySQL的双主复制 今天搭建了一套双主复制的架构,这种架构包含两台服务器,每一台都被配置成对方的主库和备库,是一种特殊的主从,架构图如下: ?...这种架构,最容易出现的问题是数据冲突,例如: 1、我们在操作两台服务器修改同一条记录,将会产生冲突; 2、在同一个有自增列的表里面插入数据; 为了解决第二个问题,mysql里面配置了两个参数来避免该问题的发生...也就是说,A服务器从1开始,每次按照步长为2进行自增,保证它的id值全部都是奇数,B服务器从2开始,每次按照步长为2进行自增,保证它的id值全部都是偶数,这样,可以在一定程度上解决自增id值带来的数据冲突问题...综上所述,这种架构,目前来看,是已经被淘汰掉了,可以选用主动---被动模式下的双主复制来进行替代,具体有时间再分析吧。 时间原因,今天就先到这里吧。

    3.4K10

    基于HAVIP +Keepalived部署MySQL双主双从

    ,就不能写了 多主多从架构可避免该问题 01和02互为主主 03和04为从库 2.安装MySQL vim /etc/yum.repos.d/mysql.repo [Mysql] name = Mysql...auto_increment-offset:增长的起始值 如:01长为 2,起始值为1,插入数据的主键为 1,3,5,7...。...同样02步长为2,起始值为2,所以插入数据主键为2,4,6,8...。 log-slave-updates:设置两台主服务器,彼此间复制的数据要不要往其下面的从服务器复制。....000001,Position为154即可 查看02 image.png 在从slave服务器上设置主Master: 在02和03的主为01,同理01和04的主为02。...01中创建表 image.png 在04中查询 image.png image.png image.png 确定同步无异常 2.测试HAVIP——使用root账户登陆正常 qinhl——双主多从环境

    1.4K20

    MySQL数据同步【双主热备】

    Show Slave Status 部分释义  ① Slave_IO_Status:线程已经连接上主服务器,正等待二进制日志事件到达。如果主服务器正空闲,会持续较长的时间。...解决自增长列的问题 原因:当同步断开,两台服务器分别有新数据进入,那么主键ID是自增长列会出现冲突的情况,会导致同步无法继续。...模拟测试自增长列解决方案 测试过程模拟同步在断开后,两个数据库分别都有数据插入,然后再开启同步,是否会有自增ID的冲突。 1.先分别在服务器242和243上停止Slave线程 ?...------------------------------------------------------------- 大功告成,同步成功,且没有发生冲突!...后台根据提示定位是在没关掉同步的情况下进行了一些冲突的SQL操作,      解决步骤: ① 停止SQL服务                     ② 删除master.info和relay-log.info

    2.6K100

    003.Heartbeat MySQL双主复制

    [root@master1 ~]# yum -y remove mysql* #为避免冲突引,卸载已存在的组件 3 [root@master1 ~]# yum -y install mariadb...2.3 master01 my.cf配置 1 [root@master1 ~]# vi /etc/my.cnf 2 [mysqld] 3 …… 4 server-id=1 #设置主服务器...2 [mysqld] 3 server-id=2 #设置主服务器master的id 4 log-bin=mysql-bin #配置二进制变更日志命名格式 5 replicate-wild-ignore-table...master02: file:mysql-bin.000001 position:245 三 启动主从 3.1 手动同步 如果Master01和Master02已经存在数据,则在开启主备复制之前,需要将...libexec/heartbeat/ipfail 注意: 主机和备机之间进行心跳检测,当备机无法检测到主机的心跳,则开启vip; 如果主机和备机都没有挂掉,由于通信问题导致相互无法连接,则会出现裂脑,即主备都对外声明了

    86320

    Mysql Dual Master双主复制架构

    常用的复制方式是一主一从的基本架构,但有时可能还会需要在一些特定的场景下进行Master的切换 如在Master端进行一些维护操作时,可能要停止MySQL的服务。...MySQL早就想到了这一点,所以在MySQL的Binary Log中记录了当前MySQL的server-id,而且这个参数也是搭建MySQL Replication的时候必须明确指定的,只有Master...和Slave的server-id参数值不一致时MySQL Replication才能搭建成功。...一旦有了server-id的值,MySQL就很容易判断某个变更是从哪一个MySQL Server最初产生的,所以就很容易避免出现循环复制的情况 通过Dual Master复制架构,能够避免因为正常维护所带来的重新搭建...主要还是为了避免数据的冲突,防止造成数据的不一致性

    2.2K40

    MySQL + Keepalived 双主热备搭建

    什么是双主复制 在传统的主从复制架构中,从库仅仅是作为主库数据的备份,当主库发生故障时,数据库将停止对外提供服务,并且主库故障后手动进行主从切换的过程也较为繁琐。...B) 192.168.1.38 3308 虚拟 IP 搭建 MySQL 双主同步 准备工作 创建相关目录 #创建用户 userdel -r mysql groupadd mysql useradd...针对 GTIP 的方式同步有两个参数必须设置: gtid_mode=on enforce_gtid_consistency=on 防止主键冲突: 设置自增主键步长,通常有几个主库 就写几,避免主键冲突:...--------------------------- auto_increment_increment=2 #自增主键步长,通常有几个主库A就写几,避免主键冲突 auto_increment_offset...并且查看表中的内容可以发现主键是以 2 为间隔递增的,这是为了防止主从切换时插入数据产生主键冲突。主库 A 的主键会以 1,3,5,7,9 的序号递增。

    5.3K21

    MySQL运维16-双主双从读写分离

    一、双主双从架构介绍   在MySQL多主多从的架构配置中和双主双从是一样的,学会了双主双从的架构部署,多主多从的配置也同样就回了。下面以双主双从作为示例演示。...192,168.3.91即当MySQL服务器,又充当Mycat的服务器  三、master1节点配置   3.1 修改mysql配置文件     192.168.3.91这个台服务器当做双主中的一个,修改其配置文件如下...这个台服务器当做双主中的另外一个,修改其配置文件如下:vim /etc/my.cnf     说明1:这里的server-id=3   4.2 重启mysql      4.3 创建用于主从复制的账号...十、双主双从的高可用测试   测试一台主机宕机下,双主双从是否可以继续运行。   ...MySQL依然可读可写,所以高可用也没问题     总结:在双主双从的基础上,多主多从同样的实现思路。

    35710
    领券