我用这个脚本多年对我的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
20:47:59 0 ~] $ perror 32
OS error code 32: Broken pipe
因此,错误号32为“断管”。你的管道mysqldump的输出到gzip
,所以这种手段来完成的mysqldump的gzip之前终止。例如能是因为你的磁盘已满或gzip超过任何最大CPU时间/使用主机有到位。
我看到这个错误,管道mysqldump的输出到s3cmd时。它是通过使用s3cmd的版本错误引起的。在Ubuntu忠实的和Debian喘息s3cmd命令的包装版本不支持标准输入(因为他们有1.1.0版本)。
确保文件夹/ home /备份/ DB /(其中您正在使用,以存储备份)的写访问权限(以快速检查:用chmod -R 777该文件夹上尝试运行脚本,以确保)。
我有同样的问题,由于几个错别字。
"db_user_1"
当他真的"db_user1"
。>
的gzip > myfile.tar.gz
。不过我建议你升级到MySQL 5.6+尽快,所以你可以停止将数据库密码的其他用户。
退房this answer在计算器上。
面对同样的问题。我不知道到底为什么,但如果添加了实用PV的结论是,所有的作品。也许这取决于你的shell的bash / sh的。
sudo apt-get install pv
PipeViewer这是一个非常有用的工具,它可以让你直观写入磁盘,例如进程。
脚本例如
mysqldump ${MYSQLDUMP_OPTIONS} ${DB} | gzip | pv > ${BACKUP_DEST}/${DB}.sql.gz
我用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
。
检查文件夹中的位置存在,/家庭/备份/ DB /
如果没有,创建子文件夹每次。
命令上:mkdir /家庭/备份/ DB /
然后再次运行命令。
我很惊讶,我不能做我的数据库的转储,我能之前做到这一点的日子。现在,我得到这个错误。
正如所述号,该错误消息表示破碎的管,这意味着输出不能被写入到磁盘。就我而言,我的SSH用户没有权限,我在我的mysqldump命令目标文件夹中写。
您可以输出转储在你的/ home / your_user目录下看到它,你仍然得到同样的错误。这样做解决了我的问题。
错误号32为“断管”,以便与管道目的地(在这种情况下的gzip)发生的任何错误都将导致错误号32。如果目录结构已发生变化,你的${BACKUP_DEST}
不再是指存在会出现此问题的目录。
我会通过管道别的东西你gzip命令或创建不涉及gzip的未压缩的备份调试此。
其所以老话题,但我面对这个问题,并发现:
我的文件名:db_26/03.tar.gz
其提高像上面的错误;但是当我使用:db.tar.gz
没有错误。
所以,你应该检查你的文件名