You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在mysqldump执行期间临时设置max_execution_time参数

问题场景

CI环境执行数据库schema变更前、本地开发场景执行数据库备份时,因部分表数据量过高,运行mysqldump抛出如下报错:

mysqldump: Error 3024: Query execution was interrupted, maximum statement execution time exceeded when dumping table social_post at row: 24988140

排查确认:将max_execution_time参数值从600000(10分钟)调整为0(无限制)后备份可正常跑完,全量备份总耗时约1小时10分钟;此前测试15分钟、20分钟的超时阈值均无法覆盖备份耗时。出于安全考虑,不希望永久将该参数设为无限制,仅需在mysqldump执行周期内临时调整参数值,当前使用的mysqldump执行命令如下:

mysqldump --defaults-extra-file=login.cnf --set-gtid-purged=OFF --single-transaction --events --routines --no-create-info --no-create-db --skip-triggers --complete-insert --verbose --quick database_name > data.sql
实现方案

直接利用mysqldump自带的会话级参数设置能力即可,无需提前修改全局配置,也无需备份后手动回滚参数,配置仅在mysqldump的连接生命周期内生效,连接断开后自动恢复原有全局配置,完全满足临时调整、不永久修改参数的要求。

  • 核心是给mysqldump加--init-command参数,连接数据库后第一时间在当前会话设置超时参数,不会影响其他业务连接
  • 若使用MySQL 8.0.28及以上版本,可额外搭配--mysqld-long-query-time参数覆盖工具内部所有查询的超时限制,避免遗漏内置查询触发超时

调整后可直接使用的命令如下:

mysqldump --defaults-extra-file=login.cnf --set-gtid-purged=OFF --single-transaction --events --routines --no-create-info --no-create-db --skip-triggers --complete-insert --verbose --quick --init-command="SET SESSION max_execution_time=0" database_name > data.sql
注意事项
  • 上述设置为会话级配置,仅对当前mysqldump发起的连接生效,不会修改数据库全局max_execution_time值,其余业务连接、后续新建连接都会沿用原有超时阈值,不存在长期安全风险
  • 原有命令携带的--single-transaction参数配合该配置使用,备份全程不会锁表,不会对线上业务造成额外影响
  • 若后续备份耗时稳定,也可将参数值从0替换为比实际备份耗时稍高的毫秒值(例如设为5400000即90分钟),进一步降低极端场景下异常查询长期占用资源的风险

内容的提问来源于stack exchange,提问作者Kay

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.28 09:22:02