在开发服务器上,我尝试运行我用了差不多一年的相同脚本,最后得到了:mysqldump:写错了32#
上周,IT系统管理员刚刚将虚拟服务器恢复到备份前几天,一切正常。
Drupal安装很好,实时服务器很好(开发服务器的副本)...我们在同一个盒子上有大约30个左右的虚拟服务器,IT SysAdmin已经分配了不少资源。 / p>
以下是我在dev上使用df -h的内容:
Filesystem Size Used Avail Use% Mounted on
/dev/sda1 18G 6.1G 12G 36% /
udev 1000M 4.0K 1000M 1% /dev
tmpfs 403M 228K 403M 1% /run
none 5.0M 0 5.0M 0% /run/lock
none 1007M 0 1007M 0% /run/shm
/dev/sdb1 100G 8.1G 87G 9% /data
xxxx@dev1:~$
以及在命令行中运行我的脚本后的基本输出:
第5416行的错误1005(HY000):无法创建表格 'content_type_ses_job_postings'(错误号:28)mysqldump:得到了错误的32 写ERROR 2003(HY000):无法连接到MySQL服务器 '198.xx.xx.xx'(111)LDAP服务器IP已更新。
请注意,我得到的最后一个ERROR 2003
关于没有连接到MySQL服务器,即使它全部工作,所以虽然不应该发生,我认为更多的是用户问题,因为数据库备份,保存和然后导入到'holding'数据库,然后在更新内容时切换到这个数据库,这可能就是这样,但它从来不是一个特定的问题。
如果error 32
与空间有关,空间问题可能在哪里?如果它与权限相关,哪个文件夹会出现权限问题?但是,我不知道如何或者什么可以在任何地方动态地更改权限...我之前说过,我已经运行这些脚本大约8个月没有问题?
开发服务器的基础知识
答案 0 :(得分:18)
似乎很奇怪
[root@*****]# perror 28
OS error code 28: No space left on device
[root@*****]# perror 32
OS error code 32: Broken pipe
由于mysqldump在随机位置不断断开,它与空间相关,并且没有磁盘满状态,我怀疑在更深层的问题:MySQL数据包。什么是MySQL数据包?
这里是第1-3段解释它:
MySQL网络通信代码是 写在假设下 查询总是相当短, 因此可以发送到和 由服务器在一个块中处理, 在MySQL中称为数据包 术语。服务器分配 用于存储的临时缓冲区的内存 数据包,它请求足够 完全适合它。这种架构 需要预防措施以避免拥有 服务器耗尽内存---一个上限 关于数据包的大小,这个 选项完成。
与之相关的代码 此选项位于 的 SQL / net_serv.cc 即可。看看 my_net_read(),然后按照 my_real_read()的电话付费 特别注意 的 net_realloc()强>
此变量也限制了长度 许多字符串功能的结果。 参见 sql / field.cc 和 sql / intem_strfunc.cc 了解详情。
鉴于此解释,批量INSERT将很快加载/卸载MySQL数据包。当max_allowed_packet对于给定的数据负载而言太小时,尤其如此。
我之前写过:MySQL server has gone away obstructing import of large dumps
尝试将max_allowed_packet for the mysqldump提升为1G
,如下所示:
mysqldump --max-allowed-packet=1073741824 ...
并尝试使用mysqldump。
如果不这样做,请执行以下操作:
将此添加到my.cnf
[mysqld]
max_allowed_packet = 1G
然后,以root@localhost
身份登录MySQL并运行此
mysql> SET GLOBAL max_allowed_packet = 1024 * 1024 * 1024;
并尝试使用mysqldump。
试一试!!!