mysqldump的:得到错误号32上写

问题描述 投票:32回答:11

我用这个脚本多年对我的VPS。而且它仍在工作。

DBLIST=`mysql -uroot -pROOT_PASSWORD -ANe"SELECT GROUP_CONCAT(schema_name) FROM information_schema.schemata WHERE schema_name NOT IN ('information_schema','performance_schema')" | sed 's/,/ /g'`
MYSQLDUMP_OPTIONS="-uroot -pROOT_PASSWORD --single-transaction --routines --triggers"
BACKUP_DEST="/home/backup/db/"
for DB in `echo "${DBLIST}"`
do
    mysqldump ${MYSQLDUMP_OPTIONS} ${DB} | gzip > ${BACKUP_DEST}/${DB}.sql.gz &
done
wait
tar -czvf /home/backup/db2/`date +\%G-\%m-\%d`_db.tar.gz ${BACKUP_DEST}

现在我移动到另一个主机。我试图使用相同的脚本(当然我改变了root用户口令使用新的凭证),但我不知道为什么我得到这样的:

mysqldump: Got errno 32 on write
mysqldump: Got errno 32 on write
mysqldump: Got errno 32 on write
mysqldump: Got errno 32 on write
mysqldump: Got errno 32 on write
mysqldump: Got errno 32 on write
mysqldump: Got errno 32 on write
mysqldump: Got errno 32 on write
mysqldump: Got errno 32 on write
mysqldump: Got errno 32 on write
mysqldump: Got errno 32 on write
mysqldump: Got errno 32 on write
mysqldump: Got errno 32 on write
mysql ubuntu mysqldump
11个回答
37
投票
20:47:59 0 ~] $ perror 32
OS error code  32:  Broken pipe

因此,错误号32为“断管”。你的管道mysqldump的输出到gzip,所以这种手段来完成的mysqldump的gzip之前终止。例如能是因为你的磁盘已满或gzip超过任何最大CPU时间/使用主机有到位。


0
投票

我看到这个错误,管道mysqldump的输出到s3cmd时。它是通过使用s3cmd的版本错误引起的。在Ubuntu忠实的和Debian喘息s3cmd命令的包装版本不支持标准输入(因为他们有1.1.0版本)。


0
投票

是什么帮助我解决这个问题是

export LANG=C

前运行的每https://github.com/netz98/n98-magerun/issues/771 mysqldump的


9
投票

确保文件夹/ home /备份/ DB /(其中您正在使用,以存储备份)的写访问权限(以快速检查:用chmod -R 777该文件夹上尝试运行脚本,以确保)。


8
投票

我有同样的问题,由于几个错别字。

  1. 我输入数据库用户的名称不正确。我有"db_user_1"当他真的"db_user1"
  2. 管道后,我忘了>gzip > myfile.tar.gz

不过我建议你升级到MySQL 5.6+尽快,所以你可以停止将数据库密码的其他用户。

退房this answer在计算器上。


2
投票

面对同样的问题。我不知道到底为什么,但如果添加了实用PV的结论是,所有的作品。也许这取决于你的shell的bash / sh的。

sudo apt-get install pv

PipeViewer这是一个非常有用的工具,它可以让你直观写入磁盘,例如进程。

脚本例如

mysqldump ${MYSQLDUMP_OPTIONS} ${DB} | gzip | pv > ${BACKUP_DEST}/${DB}.sql.gz

2
投票

我用mysqldump从CLI,并试图管gzip和/或文件,并得到一个“许可被拒绝”的错误。

即使sudo,我得到了一个错误,因为虽然我是作为mysqldump运行sudo,管道仍在试图用我登录的用户帐户的shell作为写输出。在这种情况下,我的shell用户帐户没有权限写入到目标目录。

为了解决这个问题,你可以与tee一起使用sudo命令:

mysqldump --single-transaction --routines --events --triggers --add-drop-table --extended-insert -u backup -h 127.0.0.1 -p --all-databases | gzip -9 | sudo tee /var/backups/sql/all_$(date +"%Y_week_%U").sql.gz > /dev/null

| sudo tee /var/backups/...是什么让我们管的目录中只有root写。该> /dev/null直接倾倒其输出到屏幕上抑制tee


1
投票

检查文件夹中的位置存在,/家庭/备份/ DB /

如果没有,创建子文件夹每次。

命令上:mkdir /家庭/备份/ DB /

然后再次运行命令。


1
投票

我很惊讶,我不能做我的数据库的转储,我能之前做到这一点的日子。现在,我得到这个错误。

正如所述号,该错误消息表示破碎的管,这意味着输出不能被写入到磁盘。就我而言,我的SSH用户没有权限,我在我的mysqldump命令目标文件夹中写。

您可以输出转储在你的/ home / your_user目录下看到它,你仍然得到同样的错误。这样做解决了我的问题。


1
投票

错误号32为“断管”,以便与管道目的地(在这种情况下的gzip)发生的任何错误都将导致错误号32。如果目录结构已发生变化,你的${BACKUP_DEST}不再是指存在会出现此问题的目录。

我会通过管道别的东西你gzip命令或创建不涉及gzip的未压缩的备份调试此。


1
投票

其所以老话题,但我面对这个问题,并发现:

我的文件名:db_26/03.tar.gz其提高像上面的错误;但是当我使用:db.tar.gz没有错误。

所以,你应该检查你的文件名

© www.soinside.com 2019 - 2024. All rights reserved.