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

kel*_*son 11 mysql mysqldump

在开发服务器上,我试着运行我已经使用了近一年的相同脚本,最后得到了:mysqldump:写了错误的32

上周,IT系统管理员刚刚将虚拟服务器恢复到备份前几天,一切正常.

Drupal安装很好,实时服务器很好(开发服务器的副本)...我们在同一个盒子上有大约30个左右的虚拟服务器,IT SysAdmin已经分配了不少资源.

这是我在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:~$ 
Run Code Online (Sandbox Code Playgroud)

和在命令行中运行我的脚本后的基本输出:

错误1005(HY000)在第5416行:无法创建表'content_type_ses_job_postings'(错误号码:28)mysqldump:写入ERROR 2003时获得错误32(HY000):无法连接到'198.xx.xx上的MySQL服务器. xx'(111)LDAP服务器IP已更新.

请注意,我得到的最后一个ERROR 2003关于没有连接到MySQL服务器,即使这一切都工作,所以虽然这不应该发生,我认为更多的是用户问题,因为数据库备份,保存,然后导入到'持有'数据库然后,我在更新内容时切换到这可能是某些东西,但它从来不是一个特定的问题.

如果error 32与太空有关,空间问题可能在哪里?如果它与权限相关,哪个文件夹会出现权限问题?但是,我不知道如何或者什么可以在任何地方动态地更改权限...我之前说过,我已经运行这些脚本大约8个月没有问题?

开发服务器的基础知识

  • MySQL 5.5.24
  • Ubuntu0.12.04.1
  • PHP 5.3

Rol*_*DBA 18

似乎很奇怪

[root@*****]# perror 28
OS error code  28:  No space left on device
[root@*****]# perror 32
OS error code  32:  Broken pipe
Run Code Online (Sandbox Code Playgroud)

由于mysqldump在随机位置保持断开,它与空间有关,并且没有磁盘满状态,我怀疑在更深层的问题:MySQL数据包.什么是MySQL数据包?

根据第99页

BookImage

这里是第1-3段解释它:

MySQL网络通信代码是在假设查询总是相当短的情况下编写的,因此可以在一个块中发送到服务器并由服务器处理,这在MySQL术语中称为数据包.服务器为临时缓冲区分配内存以存储数据包,并且它请求足以完全适合它.这种架构需要采取预防措施,以避免服务器内存不足 - 这个选项可以实现的数据包大小上限.

与此选项相关的感兴趣的代码可在sql/net_serv.cc中找到 .看看my_net_read(),然后调用my_real_read()并特别注意 net_realloc().

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

鉴于此解释,批量INSERT将很快加载/卸载MySQL数据包.当max_allowed_pa​​cket对于来自它的给定数据负载来说太小时尤其如此.

我之前写过这篇文章:MySQL服务器已经走开了阻碍大型转储的导入

尝试将mysqldump的max_allowed_pa​​cket提升到1G如下:

mysqldump --max-allowed-packet=1073741824 ...
Run Code Online (Sandbox Code Playgroud)

并尝试mysqldump.

如果没有这样做,那么这样做:

添加到my.cnf

[mysqld]
max_allowed_packet = 1G
Run Code Online (Sandbox Code Playgroud)

然后,登录MySQL root@localhost并运行它

mysql> SET GLOBAL max_allowed_packet = 1024 * 1024 * 1024;
Run Code Online (Sandbox Code Playgroud)

并尝试mysqldump.

试试看 !!!