谨慎使用MySQL auto_increment

在使用MySQL中,经常会在表中建立一个自增的ID字段,利用自增ID能够快速建立索引,也是MySQL官方比较推荐的一种方式,但是,这种方式在大量数据且配置主从时,可能会出现由于自增ID导致同步失败的情况

首先需要了解一点

Mysql主从同步主要通过bin log来同步,而MySQl中bin log最大值为1G,

这种情况触发条件如下:

1、数据库配置主从同步

2、表存在自增ID

3、表数据量大,

如果在主上执行insert into…select…类SQL,该SQL事物超过1G时,MySQL会将该SQL以row模式同步从上,即同步为insert into values(.......),而此时数据量超过1G,即超过了MySQL bin log允许的最大值,所以主从同步失败,只能删除该自增字段才能恢复主从

因此在数据量很大且存在上述计算SQL的表上,谨慎使用自增字段

谨慎使用MySQL auto_increment

时间: 2024-11-07 06:51:23

谨慎使用MySQL auto_increment的相关文章

MySQL auto increment - the MySQL auto_increment attribute

MySQL FAQ: How do I define a MySQL auto increment field? Here's an example of the way I normally create a MySQL auto increment (auto_increment) field: create table pizzas ( id int auto_increment not null, name varchar(32) not null, primary key (id) )

MySQL Auto_Increment属性应用

我们经常要用到唯一编号,以标识记录.在MySQL中可通过数据列的AUTO_INCREMENT属性来自动生成.MySQL支持多种数据表,每种数据表的自增属性都有差异,这里将介绍各种数据表里的数据列自增属性. 1 用法: CREATE TABLE test ( id INT UNSIGNED NOT NULL PRIMARY KEY AUTO_INCREMENT, username VARCHAR(15) NOT NULL )AUTO_INCREMENT = 100; 可在建表时可用"AUTO_IN

谨慎使用mysql的replace into(转载)

MySQL 对 SQL 有很多扩展,有些用起来很方便,但有一些被误用之后会有性能问题,还会有一些意料之外的副作用,比如 REPLACE INTO. MySQL 在数据冲突时实际上是删掉了旧记录,再写入新记录,这是使用 REPLACE INTO 时最大的一个误区,拿之前的例子来说,执行完 REPLACE INTO auto (k, v) VALUES (1, '1-1') 之后,由于新写入记录时并未给 extra 字段指定值,原记录 extra 字段的值就「丢失」了,而通常这并非是业务上所预期的,

MySQL auto_increment的坑

背景: Innodb引擎使用B_tree结构保存表数据,这样就需要一个唯一键表示每一行记录(比如二级索引记录引用). Innodb表定义中处理主键的逻辑是: 1.如果表定义了主键,就使用主键唯一定位一条记录 2.如果没有定义主键,Innodb就生成一个全局唯一的rowid来定位一条记录 auto_increment的由来: 1.Innodb强烈推荐在设计表中自定义一个主键,因为rowid是全局唯一的,所以如果有很多表没有定义主键,就会在生成rowid上产生争用. /* Dictionary sy

验证:mysql AUTO_INCREMENT 默认值是1

用mongodb时,有些字段需要做自增,而且是用二十进制字母表示(使用a-t对应0-19),做了一个_auto_increment字段用来保存,但是应该从0开始还是从1开始呢? 和mysql保持一致便于维护.所以试了一下mysql,AUTO_INCREMENT是从1开始的.看来a就不能用了,从b开始,比如b.c……s.t.ba.bb……bs.bt. 代码: create table users(id int(10) unsigned not null auto_increment primary

MySQL AUTO_INCREMENT 简介

可使用复合索引在同一个数据表里创建多个相互独立的自增序列,具体做法是这样的:为数据表创建一个由多个数据列组成的PRIMARY KEY OR UNIQUE索引,并把AUTO_INCREMENT数据列包括在这个索引里作为它的最后一个数据列.这样,这个复合索引里,前面的那些数据列每构成一种独一无二的组合,最末尾的AUTO_INCREMENT数据列就会生成一个与该组合相对应的序列编号. 我们经常要用到唯一编号,以标识记录.在MySQL中可通过数据列的AUTO_INCREMENT属性来自动生成.MySQL

MySQL auto_increment问题

auto_increment 问题: https://yq.aliyun.com/articles/59263?spm=5176.8091938.0.0.bjzoFN https://dev.mysql.com/doc/refman/5.7/en/innodb-auto-increment-handling.html 导致auto_increment变小的几种情况: 参考: http://dev.mysql.com/doc/refman/5.7/en/innodb-auto-increment-

MYSQL auto_increment 、default 关键字

1. auto_increment: innoDB 中 表中只可以有一个列是auto_increment的,这个列还一定要是索引. create table T(X int auto_increment primary key,Y int);               --  对 create table T(X int auto_increment,Y int ,index ix_A (X))            --  错         用了auto_increment就可以这样加索引

MySQL auto_increment实现

http://www.cnblogs.com/xpchild/p/3825309.html 运维的时候,经常遇到auto_increment的疑惑: 机器异常crash,重启后id回退的问题 性能考虑,每次获取肯定不会持久化,内存中取值,statement复制如何保证主备一致 id的取值受binlog的保护吗 1. auto_increment相关的参数控制 1.1 innodb_autoinc_lock_mode 0: 每一个statement获取一个排他lock,直到statement结束,