mysqldump 快速导出需禁用默认低效行为:用–single-transaction保障一致性、–skip-extended-insert启用多行INSERT、–skip-autocommit与–net_buffer_length=1048576提升批量发送效率、–hex-blob优化二进制字段导出。
用 mysqldump 加上关键参数跳过开销
默认的 mysqldump 会为每条 INSERT 加事务、带表锁、生成冗余语句,严重拖慢导入速度。真正快的方式是关掉这些“安全但慢”的默认行为:
-
--single-transaction保留一致性,但避免全局锁(仅对 InnoDB 有效) -
--skip-extended-insert反而要禁用——它把多行合并在一条INSERT里,大幅减少 SQL 解析开销 -
--skip-autocommit+--net_buffer_length=1048576让客户端批量发包,减少网络往返 -
--hex-blob避免二进制字段被转义成低效字符串
导出命令示例:mysqldump --single-transaction --skip-extended-insert --skip-autocommit --net_buffer_length=1048576 --hex-blob -u root db_name > dump.sql
导入时关闭非必要日志和约束
目标库在接收大量数据时,binlog、unique_checks、foreign_key_checks 都会逐行校验或写盘,是性能瓶颈。
- 导入前执行:
SET FOREIGN_KEY_CHECKS=0; SET UNIQUE_CHECKS=0; SET sql_log_bin=0; - 确保目标表引擎是
InnoDB,且innodb_flush_log_at_trx_commit=2(临时调低持久性换速度) - 如果用
source导入,记得在mysql客户端里加--force防止单条失败中断
注意:sql_log_bin=0 意味着主从同步不会复制这批数据,需手动补位或确认从库也同步执行