max_allowed_pa​​cket 如何影响数据库的备份和恢复?

wch*_*son 5 mysql mysqldump backup

我有一个基于 mysql 5.0.75-0Ubuntu10.2 的数据库,在 Ubuntu 9.04 下运行。我在该数据库中有一个带有中等 blob 列的表。我一直在使用 automysqlbackup 对数据库进行夜间备份/转储,然后定期将它们恢复到我们拥有的临时服务器或我的 MacBookPro。

我们最近在恢复与数据包大小相关的错误时遇到了一些麻烦。上周晚些时候,我将 automysqlbackup 中的 max_packet_size 设置更改为 1MB(未指定)。更改后,数据库备份将在带有 blob 列的表处停止。实际上,它在该表中的第一条记录处停止。我是否必须将 max_packet_size 设置设置为至少与该列中存储的最大 blob 一样大?

Rol*_*DBA 4

我看到一个关于你可能拥有的最大斑点的问题的有趣答案。这是我在 ServerFault 中看到的声明:如果您有很多大的 blob 对象,则 innodb_log_file_size 和 innodb_log_buffer_size 的总和必须大于最大 blob 对象的十倍

\n\n

根据Nils-Anders N\xc3\xb8ttseter的 ServerFault 帖子,您应该查询该表并找出最大的 BLOB,将该数字乘以 11 或更多,然后使用该答案作为以后的max_allowed_pa​​cket 。

\n\n

有趣的是,我解决了另一个问题,我建议调整 max_allowed 数据包的大小以希望解决该问题

\n\n

警告

\n\n

根据《Understanding MySQL Internals》(ISBN 0-596-00957-7)第99页,以下是解释MySQL数据包的第1-3段:

\n\n
\n

MySQL 网络通信代码是在这样的假设下编写的:\n 查询总是相当短,\n 因此可以以一个块的形式发送到服务器并\n 由服务器处理,\n 这在 MySQL 中称为数据包\ n术语。服务器为临时缓冲区分配内存来存储数据包,并请求足够的内存来完全容纳数据包。此体系结构需要采取预防措施,以避免服务器内存不足 — 数据包大小的上限,此选项可实现这一点。

\n\n

与此选项相关的相关代码可在 sql/net_serv.cc中找到。查看my_net_read() ,然后执行对my_real_read()的调用,并特别注意\n net_realloc()

\n\n

此变量还限制许多字符串函数结果的长度。\n有关详细信息,请参阅sql/field.cc和\n sql/intem_strfunc.cc 。

\n
\n\n

了解 MySQL 数据包的这一点后,DBA 可以调整它们的大小,以容纳一个数据包内的多个 BLOB,即使它们大得令人讨厌。

\n\n

过去,我在 MySQL 复制方面遇到过类似的问题,其中主服务器的 max_allowed 数据包值比从服务器的值更小。它要求我将 max_allowed_pa​​cket 增加到 256M 并在 Master 上重新启动 mysql。我遇到的 99% 的问题,这都能解决。有几次我不得不设置为512M。

\n