Pat*_*ick 8 mysql mysql-5 mysqldump backup
我使用 mysqldump 创建一个用于备份的平面文件。我已使用此文件在备用服务器上重新创建数据库。我在命令行上通过 ssh 运行导入过程,但收到多个Packet too Large错误。
我用更大的 max_allowed_packet(即 1000M)重新启动了 mysql,但仍然收到错误消息。我什至尝试在导入文件中设置 max_allowed_packet,仍然收到错误。
有没有办法确保设置 max_allowed_packet 和/或使用 mysqldump 来创建不会导致此问题的文件?
以供参考:
未压缩的 mysqldump 文件约为 2GB
数据库类型是 INNODB
我首先想到的是max_allowed_packet实际控制的内容。这是我发现的:
根据“了解 MySQL 内部结构”(ISBN 0-596-00957-7)的第 99 页,这里是第 1-3 段的解释:
MySQL 网络通信代码是在查询总是相当短的假设下编写的,因此可以在一个块中发送到服务器并由服务器处理,这在 MySQL 术语中称为数据包。服务器为临时缓冲区分配内存来存储数据包,并请求足够的内存来完全容纳它。这种架构需要采取预防措施以避免服务器内存不足——数据包大小的上限,此选项可实现这一点。
与此选项相关的代码可在sql/net_serv.cc 中找到 。查看my_net_read(),然后按照对my_real_read()的调用并特别注意 net_realloc()。
此变量还限制了许多字符串函数的结果的长度。有关详细信息,请参阅sql/field.cc和 sql/intem_strfunc.cc。
鉴于 max_allowed_packet 的定义,然后我从 ServerFault 中发现了其他东西:如果有很多大的 blob 对象,innodb_log_file_size 和 innodb_log_buffer_size 的组合必须大于最大 blob 对象的十倍
记住这两件事,我会将 /etc/my.cnf 中的 innodb_log_file_size 增加到它允许的最大大小,2047M。这当然需要以下内容
service mysql stop
rm -f /var/lib/mysql/ib_logfile*
service mysql start
Run Code Online (Sandbox Code Playgroud)
这将容纳您数据中可能存在的任何大块。
| 归档时间: |
|
| 查看次数: |
7983 次 |
| 最近记录: |