故障分析 | replace into 導致主備不一致
網名“北在南方”,資深 DBA,主要負責資料庫架構設計和運維平臺開發工作,擅長資料庫效能調優、故障診斷。
一 介紹
二 案例分析
在主庫上操作
root@test 12:36:51>show create table t1 \G
*************************** 1. row ***************************
Table: t1
Create Table: CREATE TABLE `t1` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(20) DEFAULT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `name` (`name`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8
1 row in set (0.00 sec)
root@test 12:37:41>insert into t1(name) values('a')
此時檢查主備庫上 t1 的表結構都是一樣的,AUTO_INCREMENT 都是2.
root@test 12:37:51>show create table t1 \G
*************************** 1. row ***************************
Table: t1
Create Table: CREATE TABLE `t1` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(20) DEFAULT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `name` (`name`)
) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8
1 row in set (0.00 sec)
在主庫上進行 replace into 操作
root@test 12:37:58>replace into t1(name) values('a');
root@test 12:38:40>replace into t1(name) values('a');
root@test 12:38:49>select * from t1;
+----+------+
| id | name |
+----+------+
| 3 | a |
+----+------+
1 row in set (0.00 sec)
此時檢查主庫中 t1 表結構,請注意 AUTO_INCREMENT=4
root@test 12:38:51>show create table t1 \\G
*************************** 1. row ***************************
Table: t1
Create Table: CREATE TABLE `t1` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(20) DEFAULT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `name` (`name`)
) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8
1 row in set (0.00 sec)
從庫上 t1 的表結構 ,AUTO_INCREMENT=2
oot@test 12:39:35>show create table t1 \G
*************************** 1. row ***************************
Table: t1
Create Table: CREATE TABLE `t1` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(20) DEFAULT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `name` (`name`)
) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8
1 row in set (0.00 sec)
root@test 12:39:43>select * from t1;
+----+------+
| id | name |
+----+------+
| 3 | a |
+----+------+
1 row in set (0.00 sec)
分析
三 風險點
如果主備庫發生主從切換,備庫變為原來的主庫,按照原來的業務邏輯再往下會發生什麼?
root@test 12:40:46>replace into t1(name) values('a');
Query OK, 2 rows affected (0.00 sec)
root@test 12:40:48>select * from t1;
+----+------+
| id | name |
+----+------+
| 2 | a | ---id由原來的3變成了2.
+----+------+
1 row in set (0.00 sec)
四 總結
由於 replace into 操作在遇到主鍵衝突的時候會修改主鍵的值,所以如果業務邏輯強依賴自增 ID ,絕對不要用 replace ,普通環境也不建議這樣用,因為 replace into 操作可能會導致主鍵的重新組織。
本文關鍵字:#故障分析# #MySQL#
MySQL 8.0 對 limit 的最佳化
從 data_free 異常說起
再說 order by 最佳化技術分享 | 一文了解高併發限流演算法
關於SQLE
愛可生開源社群的 SQLE 是一款面向資料庫使用者和管理者,支援多場景稽核,支援標準化上線流程,原生支援 MySQL 稽核且資料庫型別可擴充套件的 SQL 稽核工具。
型別 | 地址 |
---|---|
版本庫 | |
文件 | |
釋出資訊 | /releases |
資料稽核外掛開發文件 | 3.modules/3.7_auditplugin/auditplugin_development.html |
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/70024924/viewspace-2927000/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 故障分析 | DDL 導致的 Xtrabackup 備份失敗
- 故障分析 | 手動 rm 掉 binlog 導致主從報錯
- MYSQL 主從不一致的原因分析MySql
- MySQL主從不一致的幾種故障總結分析、解決和預防MySql
- 電腦黑屏怎麼辦 顯示卡故障導致黑屏故障分析
- mysql主鍵的缺少導致備庫hangMySql
- MySQL 主從 AUTO_INCREMENT 不一致問題分析MySqlREM
- 故障分析 | MySQL : slave_compressed_protocol 導致 crashMySqlProtocol
- mysql主備庫資料不一致的原因和解決方案MySql
- 【Mysql】mysql主鍵的缺少導致備庫hangMySql
- 主備庫記憶體不一致的Data Guard環境搭建記憶體
- 子游標過多導致大量mutex爭用故障分析Mutex
- replace into 導致MASTER/SLAVE的auto_increment值不同ASTREM
- 核心引數導致的備庫當機分析
- 故障分析 | MySQL 5.7 使用臨時表導致資料庫 CrashMySql資料庫
- 【MySQL】Server-id導致Slave_IO_Running: No主從複製故障MySqlServer
- 時區不一致導致spring應用異常Spring
- Oracle 資料庫不一致導致異常的恢復Oracle資料庫
- ODPS主備叢集雙向資料複製導致主備中心網路打爆問題
- 【DataGuard】由於備庫引數設定不當導致資料檔案無法新增的故障分析
- AIX下nfs故障導致oracle process hangAINFSOracle
- 《MySQL主從不一致情形與解決方法》MySql
- MySQL主從不一致情形與解決方法MySql
- 資料庫主從不一致,怎麼解?資料庫
- MySQL主從資料不一致,怎麼辦?MySql
- MySQL主從不一致的修復過程MySql
- pt table checksum使用檢測主從不一致
- 11g 最大保護模式 standby database網路故障導致主庫當機模式Database
- C 語言宣告與定義不一致導致的問題
- Git因換行符不一致導致反覆有修改記錄Git
- 故障分析 | 大量短時程式導致 cpu 負載過高案例一則負載
- 膝上型電腦常見顯示卡故障導致電腦問題分析
- 【DataGuard】由於備庫引數設定不當導致資料檔案無法新增的故障分析(轉)
- pymysql 非執行緒安全導致的故障.MySql執行緒
- namenode gc導致的故障一例薦GC
- AIX下由於nfs故障導致oracle hangAINFSOracle
- 故障分析 | 血的教訓-由慢查詢引發的備份等待導致資料庫連線打滿資料庫
- 小程式渲染層核心不一致導致Array.flat()不可用