首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫

MySQL 进阶实战技巧五则:乱序导入、双主纠偏、ROW 复制、集群切换、去重优化

     編輯:MySQL 資料庫相關知識

资深 DBA 私藏的 5 个 MySQL 实战技巧

源自生产环境磨砺的进阶技巧,涵盖大数据导入、复制架构运维、数据去重等高频痛点场景。

技巧 1:InnoDB 大批量乱序数据极速导入

痛点:InnoDB 聚簇索引特性导致乱序主键插入性能随数据量呈指数级下降。
方案:借道 MyISAM「曲线救国」

  1. 关闭 innodb_buffer_pool_size 释放内存
  2. 建无索引 MyISAM 表,concurrent_insert=2 尾部并发插入
  3. 数据入库后 ALTER TABLE ... ENGINE=InnoDB 一键转换并建索引

速度较直接导入提升 10 倍以上。

技巧 2:ROW 格式双主架构下的大批量数据纠偏

场景:A<->B 双主,仅 A 对外服务。需批量修正数据。
方案:在备库 B 直接执行纠偏 SQL,产生 ROW 格式 Binlog 回流至 A。
ROW 复制走 Handler API 无 SQL 解析开销,纯 IO 操作,速度远超存储过程分批提交。

技巧 3:ROW 复制实现无库前缀的 replicate-do-db

难点:ROW 模式下 replicate-do-db 仅识别 db.table 格式,USE db 无效。
变通:

  1. 主库导出目标库全量,非目标库仅导结构
  2. 从库导入上述数据+结构
  3. 配置 slave-skip-errors=all

非目标库的 DML 因表不存在报错被跳过,间接实现库级过滤。

技巧 4:A<->B->C->D 链式集群拆分为双双主避免 Slave Lag 暴涨

根因:切换过快导致 A/B 产生的 SQL 在 C/D 间来回复制,server_id 判断机制使事件不被销毁。
规避:

  1. 切写入至 C 后,先 STOP SLAVE 断开 B->C
  2. 等 D 上 Seconds_Behind_Master=0
  3. 再 CHANGE MASTER TO 建立 C<->D

技巧 5:海量重复数据高效去重(加唯一索引前置)

误区:DELETE ... WHERE id NOT IN (SELECT MIN(id) ...) 效率极低。
正解:

  1. CREATE TABLE tmp AS SELECT DISTINCT ... FROM src 去重入临时表
  2. TRUNCATE src
  3. INSERT INTO src SELECT * FROM tmp

利用批量 DML 替代逐行删除,性能提升数量级。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved