如何恢复大型 MySQL 数据库
恢复大型 MySQL 数据库
恢复大型数据库时,通常会遇到如下所示的两个错误:
“MySQL 服务器已断开连接”和“查询过程中与 MySQL 服务器的连接丢失”
这些错误意味着 MySQL 服务器 (mysqld) 超时,如果在指定的时间段内没有任何反应,则会关闭连接。
以下是一些错误示例:
- 一般错误:2006 MySQL 服务器已断开连接
- 错误代码:2013。查询过程中与 MySQL 服务器的连接丢失。
- 警告:发送 QUERY 数据包时出错
- PDOException:SQLSTATE[HY000]:一般错误:2006 MySQL 服务器已断开连接
要解决此问题,请按照以下步骤操作:
恢复大型数据库需要调整多个参数。
- 连接超时
- 最大允许数据包
- 网络缓冲区长度
- 等待超时
- 交互式超时
- 网络写入超时
- 网络读取超时
这里,我们考虑恢复一个16GB 的数据库:
恢复大型数据库时,我们需要按如下方式设置值:
- 连接超时时间 = 3600
- max_allowed_packet = 1024 MB
- net_buffer_length = 1000000
- wait_timeout = 86400(即 24 小时)
- interactive_timeout = 86400(即 24 小时)
- net_write_timeout = 3600
- net_read_timeout = 3600
使用上述数值和以下命令,您可以顺利恢复数据库。
此外,恢复时间还取决于服务器的处理器和内存。
使用下面显示的命令从命令行恢复数据库。
恢复大型数据库需要更长时间,因此如果 SSH 连接断开,请使用 screen 运行命令:
- 创建屏幕会话:
# screen -S 屏幕名称
- 现在,运行以下命令:
mysql -u root -p --max_allowed_packet=1024M --connect_timeout=3600 --net_buffer_length=1000000 --wait_timeout=86400 --interactive_timeout=86400 --net_write_timeout=3600 --net_read_timeout=3600 database-name < database.sql
或者,您可以使用 MySQL Workbench 来恢复大型数据库。