mysqldump:写错了32:'突然'还有足够的空间...... Drupal 6安装

时间:2013-07-08 18:15:12

标签: mysql mysqldump

在开发服务器上,我尝试运行我用了差不多一年的相同脚本,最后得到了: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个月没有问题?

开发服务器的基础知识

  • MySQL 5.5.24
  • Ubuntu0.12.04.1
  • PHP 5.3

1 个答案:

答案 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数据包?

根据page 99 of the Book

BookImage

这里是第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_pa​​cket对于给定的数据负载而言太小时,尤其如此。

我之前写过: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。

试一试!!!