萬盛學電腦網

您现在的位置: 萬盛學電腦網 >> 程式設計 >  >> 資料庫 >> MySQL 教學

MySQL mysqldump 与 source 导入提速实战:参数调优与配置技巧

现状痛点

默认 mysqldump 导出的 SQL 单行 INSERT,导入 45 万行耗时 3 小时。通过调整导出参数与导入配置,可将耗时压缩至秒级。

mysqldump 导出加速

核心参数

参数作用推荐值
-e / --extended-insert多行 VALUES 批量 INSERT必须开启
--max_allowed_packet客户端/服务端通信缓冲区上限≤ 目标库同名变量
--net_buffer_lengthTCP/Socket 通信缓冲区初始大小≤ 目标库同名变量

操作步骤

-- 1. 确认目标库参数
mysql> SHOW VARIABLES LIKE 'max_allowed_packet';
mysql> SHOW VARIABLES LIKE 'net_buffer_length';

-- 2. 导出命令示例
mysqldump -uroot -p db_name table_name \
  -e \
  --max_allowed_packet=1048576 \
  --net_buffer_length=16384 \
  > dump.sql

实测:原 2 小时导入 → 优化后几十秒完成。

source 导入加速

方案一:调整 InnoDB 刷盘策略(临时)

-- 会话级临时修改,重启失效
SET GLOBAL innodb_flush_log_at_trx_commit = 0;
SET GLOBAL sync_binlog = 0;

导入完成后恢复为 1 保证数据安全。可提速 100 倍以上。

方案二:my.cnf 调大网络与超时参数

[mysqld]
interactive_timeout = 120
wait_timeout = 120
max_allowed_packet = 32M

防止大 SQL 传输中途断连。

方案三:分库分表并行导入

# 将大 SQL 拆分为多个小文件
split -l 10000 dump.sql part_

# 多终端并行 source
mysql -uroot -p db_name < part_aa &
mysql -uroot -p db_name < part_ab &

完整导入流程清单

  1. 目标库预建表结构(仅结构,无数据)。
  2. 关闭非唯一索引、外键检查:SET FOREIGN_KEY_CHECKS=0; SET UNIQUE_CHECKS=0;
  3. 调大 innodb_buffer_pool_size(如 70% 内存)。
  4. 设置 innodb_flush_log_at_trx_commit=0、sync_binlog=0。
  5. 使用优化参数导出的 SQL 文件导入。
  6. 导入完成恢复参数、重建索引、开启检查。

注意事项

  • max_allowed_packet 与 net_buffer_length 不能超过目标库设置,否则报错“Packet too large”。
  • 生产环境修改刷盘策略需评估风险,建议维护窗口操作并做好备份。
  • 导入前执行 CHECK TABLE 确保目标表健康。
copyright © 萬盛學電腦網 all rights reserved