MySQL 复制 主键冲突
看了下复制的问题,最明显的一个案例就是主键冲突,今天就看下这个问题
什么原因会导致这个问题
怎么规避这个问题
一、什么原因导致
网上最多的说就是:对于存在auto_increment字段或者unique索引字段,使用replace into操作或者主从切换,因为replace into对于auto或者unique字段会进行删除再做插入
执行replace into t values(1,2)被删除和被插入的行数的和(大于或者等于1)
master 上 SHOW CREATE TABLE `test_autoinc` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`c1` int(11) DEFAULT NULL,
`c2` varchar(100) DEFAULT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `c1` (`c1`)
) ENGINE=InnoDBAUTO_INCREMENT=7
slave 上 SHOW CREATE TABLE `test_autoinc` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`c1` int(11) DEFAULT NULL,
`c2` varchar(100) DEFAULT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `c1` (`c1`)
) ENGINE=InnoDBAUTO_INCREMENT=6
可以看到执行了replace into之后会发现字段增长不一样了,此时master的自增列为7,而slave的自增列为6,与表内最大值相同,若发生主备切换,slave提供服务,此时通过自增列插入主键6的记录,就会发生主键冲突
解决的办法有两个:
1st suggested fix is: use a delete event and a insert event to record this replace. 2nd suggested fix is: update the auto_incrment in update statements.
我看有的解决是这样的,但是不知道在数据库怎么实现的
if
not
exists (
select
phone
from
t
where
phone=
'1'
)
insert
into
t(phone, update_time)
values
(
'1'
, getdate())
else
update
t
set
update_time = getdate()
where
phone=
'1'
本文转自 aklaus 51CTO博客,原文链接:http://blog.51cto.com/aklaus/1669577
MySQL 复制 主键冲突相关推荐
- mysql insert 主键冲突_insert 时防止出现主键冲突错误的方法
最近几天,产品上线比较多,从内网测试库导出表的部分内容到线上也就比平时频繁多了,这时候可能会出现主键冲突: Error Code : 1062 Duplicate entry '1' for key ...
- MySQL忽略主键冲突,避免重复插入数据的三种方式
方案一:ignore 插入时检索主键列表,如存在相同主键记录,不更改原纪录,只插入新的记录. INSERT IGNORE INTO ignore关键字所修饰的SQL语句执行后,在遇到主键冲突时会返回一 ...
- mysql insert 主键冲突_在MySql中建立存储过程和解决insert into select 中主键冲突的有关问题...
首先说需求,我想重复插入大量数据,那么首先想到的,就是用insert into select语句. 但是因为mysql中没有将主键设为自增长,导致每次都会报主键冲突的错误,插入失败. 对于这个问题,就 ...
- mysql 导入主键冲突_MySQL 处理插入过程中的主键唯一键重复值的解决方法
本篇文章主要介绍在插入数据到表中遇到键重复避免插入重复值的处理方法,主要涉及到IGNORE,ON DUPLICATE KEY UPDATE,REPLACE:接下来就分别看看这三种方式的处理办法. IG ...
- mysql update主键冲突_mysql主键重复,不报错,只更新的操作
项目中对接一个单点登陆的回调api,需要判断用户是否在库,不在库新增用户,在库更新登陆次数,大概代码如下:<?php $isExist = true; if ($isExist) { inser ...
- mysql gtid 主键冲突_数据库开启gtid时,需要注意的问题
1.slave不能执行任何sql,包括超级用户 2.read_only=on,这个必须要开启,避免业务执行sql 3.保证当前slave的事务id为1 当slave同步出现问题时,手动跳过,需要考虑的 ...
- mysql主主 主键冲突_mysql主从复制原理,主主复制时主键冲突解决
主从复制原理: 1.master的增删改记录写入binlog: 2.slave的I/O Thread(负责读取master的binlog)读取binlog并将记录写入relaylog: 3.slave ...
- mysql 主从,主主,主主复制时的主键冲突解决
原理:slave 的i/o thread ,不断的去master抓取 bin_log, 写入到本地relay_log 然后sql thread不断的更新slave的数据 把主服务器所有的数据复制给从服 ...
- mysql主主同步冲突_MySQL主主同步主键冲突处理
两台数据库都报slave同步失败了,先说明一下环境,架构:lvs+keepalived+amoeba+mysql,主主复制,单台写入, 主1:192.168.0.223(写) 主2:192.168.0 ...
最新文章
- YII显示sql进行调试
- 学习篇之软件测试——初
- 如何解决java乱码_java如何解决乱码
- TensorFlow的各种应用,你晓得不?
- linux rsync 常见错误,Linux rsync常见错误
- JQuery 中简单的几个 类选择器 使用方法
- RabbitMQ 构建高可靠集群架构
- 《spring-boot学习》-04-综合开发
- (转)J2ME中随机数字的生成
- matlab帕累托分布函数,matlab 进行广义的帕累托参数估计
- python Udp与Tcp
- Java——面向对象三大特性学习笔记
- 自定义音乐播放器的歌词显示view
- 将本地数据库中的数据上传到云服务器数据库
- 单精度和双精度的区别
- MATLAB LibSVM安装——以MATLAB R2018B为例
- 计算英文句子中有多少单词?
- 公司为什么要融资上市?
- build-resource-filtering解释
- 在职场要避免这些“潜规则”