在开发服务器上,我试着运行我已经使用了近一年的相同脚本,最后得到了: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个月没有问题?
开发服务器的基础知识
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数据包?
这里是第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服务器已经走开了阻碍大型转储的导入
尝试将mysqldump的max_allowed_packet提升到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.
试试看 !!!
归档时间: |
|
查看次数: |
19572 次 |
最近记录: |