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

大型 MySQL 備份還原失敗:超時與封包參數調優指南

     編輯:MySQL 資料庫相關知識

典型報錯現象

  • ERROR 2006 (HY000): MySQL server has gone away
  • ERROR 2013 (HY000): Lost connection to MySQL server during query
  • 導入大 SQL 文件卡住、無響應

核心參數調整(動態生效,無需重啟)

-- 查看當前值
SHOW VARIABLES LIKE '%timeout%';
SHOW VARIABLES LIKE '%packet%';

-- 臨時調大(按需設定,建議值)
SET GLOBAL max_allowed_packet = 100*1024*1024;   -- 100MB
SET GLOBAL wait_timeout = 28800;                 -- 8小時
SET GLOBAL interactive_timeout = 28800;          -- 8小時

-- 永久生效:寫入 /etc/my.cnf [mysqld] 區
[mysqld]
max_allowed_packet = 100M
wait_timeout = 28800
interactive_timeout = 28800

參數含義速查

參數作用建議值
max_allowed_packet單次通訊最大封包,影響大 SQL/大字段傳輸100M~1G
wait_timeout非交互連接空閒斷開秒數28800 (8h)
interactive_timeout交互式客戶端空閒斷開秒數28800 (8h)
net_read_timeout讀取數據超時(從庫同步常調)60~600
net_write_timeout寫入數據超時60~600

客戶端工具配置(Navicat / Workbench / 命令行)

  • Navicat:連接屬性 → Advanced → max_allowed_packet 勾選並設大
  • 命令行:mysql --max_allowed_packet=100M -u root -p < backup.sql
  • JDBC URL:?maxAllowedPacket=104857600

還原加速技巧

  1. 關閉外鍵檢查:SET FOREIGN_KEY_CHECKS=0; 導入後 =1
  2. 關閉唯一性檢查:SET UNIQUE_CHECKS=0;
  3. 關閉自動提交:SET AUTOCOMMIT=0; 導入後 COMMIT;
  4. 禁用二進制日志(臨時):SET SQL_LOG_BIN=0;(需 SUPER 權限)
  5. 調大 InnoDB 相關:innodb_buffer_pool_size、innodb_log_file_size、innodb_flush_log_at_trx_commit=2(臨時)

⚠️ 重要提醒

還原完成後務必恢復參數,長期設過大的 wait_timeout 會佔用連接資源,max_allowed_packet 過大可能掩蓋應用層 BUG。建議寫腳本自動調優→還原→復原。

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