如何快速导入50GB以上的大容量MySQL数据库.sql备份文件
MySQL 50GB+ 大体积SQL备份快速导入方案
导入前临时调整MySQL配置(核心提速项)
导入前先修改my.cnf(Windows系统为my.ini)配置,导入完成后回滚到原配置即可,可至少提升3-5倍导入速度:
- 关闭事务自动提交:导入前执行
set autocommit=0;,所有数据导入完成后统一执行commit;,避免单条语句频繁刷盘 - 关闭非必要校验:
- 执行
set unique_checks=0;,跳过导入过程中的唯一性索引校验 - 执行
set foreign_key_checks=0;,跳过外键约束检查
- 执行
- 调整缓存与IO参数:
innodb_buffer_pool_size调整为服务器可用内存的50%-70%,最大化数据缓存命中innodb_log_file_size调整到2GB-4GB,减少重做日志的刷盘频率innodb_flush_log_at_trx_commit = 2,降低事务刷盘优先级,大幅提升写入效率innodb_write_io_threads调整为16-32(根据服务器CPU核心数适配,最高不超过64),提升IO写入并行度
优化导入执行命令
不要用默认的基础重定向导入,改用带性能参数的命令执行:
mysql -u root -p --default-character-set=utf8mb4 --max_allowed_packet=1G 目标数据库名 < 备份文件.sql
如果备份文件是单条INSERT语句格式,可以提前对SQL文件做预处理,将多条单INSERT合并为批量INSERT语句,可再提升2倍以上导入速度。
如果需要查看导入进度,可以安装pv工具后执行:
pv 备份文件.sql | mysql -u root -p 目标数据库名
更高性能的替代方案
如果还能访问原数据库,更推荐直接用物理备份方案替代逻辑SQL备份导入,速度可提升10倍以上,50GB数据通常1小时内即可完成恢复:
- 用
xtrabackup工具做物理热备份,直接复制InnoDB数据文件到目标服务器,不需要执行任何SQL语句 - 若两台服务器的MySQL大版本完全一致,也可以停掉原库后直接复制原库的data目录到目标服务器对应路径,启动目标库即可自动识别数据,适合有停机维护窗口的场景
注意事项
- 所有临时调整的配置项在导入完成后必须回滚到原配置,避免线上运行时出现数据丢失风险
- 导入前确认目标库的字符集、排序规则和原库完全一致,避免导入过程中出现字符转换耗时或乱码问题
内容的提问来源于stack exchange,提问作者Armature
相关产品推荐
相关产品推荐

