1. 程式人生 > >MySQL--自增列持久化問題

MySQL--自增列持久化問題

其他 包含 mysqld 分配 5.7 style 清空 持久 最大

======================================================================

自增列持久化問題

5.5/5.6/5.7三個版本中,MySQL並不會將自增列分配的自增值信息固化到磁盤,當MySQL重啟後,會根據自增列上當前最大值和參數auto_increment_offset來確定下一次的自增值,為快速獲取自增列上最大值,MySQL要求自增列必須建有索引。

如果一張自增表的數據在重啟實例前被清空,實例重啟後該表數據會從”1”開始自增(假設表的自增初始值定義為1)。

在某次數據庫升級過程中,某張業務表”恰好”因為業務邏輯將表中所有數據刪除,重啟後該表自增值從1開始生成,當該表數據流轉到其他表出現數據沖突,發現問題後,我們緊急手動設置該表自增值,避免事故進一步惡化,並再後期類似操作時,重點關註此類自增表。

如果業務會對自增表數據進行硬刪除,在服務器重啟前應重點關註該自增表使用的自增值,可以通過information_schema.tables中的auto_increment列來獲取。

PS1:在MySQL 8.0中引入自增列持久化特性,可以避免上述問題。

=====================================================================

自增列初始值問題

自增列初始值和增量值取決於:

1、全局參數auto_increment_increment和auto_increment_offset,這兩參數作用於所有自增表,主要應用於分庫分布場景。

2、表創建語句, 在使用SHOW CREATE TABLE或MySQLDump等命令導出建表語句時,建表語句中會包含表當前最大值。

3、服務器重啟後,根據表中自增列最大值確定下一次的自增值。

=====================================================================

MySQL--自增列持久化問題