脚本执行30多分钟后报错:
(1053, 'Server shutdown in progress') - MySQL服务器正在关闭(2013, 'Lost connection to MySQL server during query') - 连接丢失长时间运行的脚本,MySQL连接超时或断开,导致数据库操作失败。原代码没有:
在__init__方法中添加:
self._db_connection = None
self._last_ping_time = 0
self._ping_interval = 60 # 每60秒ping一次数据库
新增_get_db_connection()方法:
新增_execute_with_retry()方法:
get_and_save_students_batch()_execute_with_retry()包装数据库操作sync_student_msg()_execute_with_retry()包装整个同步逻辑_insert_into_target()| 改进项 | 说明 |
|---|---|
| 连接超时配置 | connect_timeout=30, read_timeout=60, write_timeout=60 |
| 连接保活 | 每60秒自动ping数据库 |
| 自动重连 | 连接断开时自动重建连接 |
| 重试机制 | 遇到连接错误最多重试3次 |
| 批量提交优化 | 每批提交前ping连接 |
| 错误日志 | 添加完整的traceback信息 |
| 资源管理 | 使用finally确保连接关闭 |
运行前检查MySQL配置:
wait_timeout 和 interactive_timeout 建议设置为 28800(8小时)max_allowed_packet 建议设置足够大(如16M)监控日志:
调整参数(如需要):
_ping_interval: 默认60秒,可根据MySQL的wait_timeout调整max_retries: 默认3次,可根据网络稳定性调整batch_size: 默认100条,可根据数据大小调整batch_size(如改为50)_ping_interval(如改为30秒)wait_timeout值