mysqldump&gzip命令使用crontab正确地创build一个MySQL数据库的压缩文件

我有问题得到一个crontab的工作。 我想自动化MySQL数据库备份。

设置:

  • Debian GNU / Linux 7.3(wheezy)
  • MySQL服务器版本:5.5.33-0 + wheezy1(Debian)
  • 目录用户,备份和备份2有755许可
  • MySQL db和Debian帐户的用户名是相同的

从shell这个命令的作品

 mysqldump -u user -p[user_password] [database_name] | gzip > dumpfilename.sql.gz 

当我使用crontab -e将其放在crontab中时

 * * /usr/bin/mysqldump -u user -pupasswd mydatabase | gzip> /home/user/backup/mydatabase-backup-`date +\%m\%d_\%Y`.sql.gz >/dev/null 2>&1 

/ home / user / backup目录中每分钟创build一个文件,但有0个字节。

但是,当我将这个输出redirect到第二个目录backup2时,我注意到已经正确压缩的mysqldumpfile被创build了。 我无法弄清楚我在第一个目录中的0字节文件和第二个目录中的预期输出结果是什么错误。

 * * /usr/bin/mysqldump -u user -pupasswd my-database | gzip> /home/user/backup/mydatabase-backup-`date +\%m\%d_\%Y`.sql.gz >/home/user/backup2/mydatabase-backup-`date +\%m\%d_\%Y`.sql.gz 2>&1 

我将不胜感激一个解释。

谢谢

首先执行mysqldump命令,并使用pipe道redirect生成的输出。 pipe道将标准输出发送到gzip命令作为标准input。 在filename.gz之后,是输出redirect操作符(>),它将继续redirect数据直到最后一个文件名,这是数据将被保存的位置。

例如,该命令将转储数据库并通过gzip运行,数据最终将以三.z格式存储

 mysqldump -u user -pupasswd my-database | gzip > one.gz > two.gz > three.gz $> ls -l -rw-r--r-- 1 uname grp 0 Mar 9 00:37 one.gz -rw-r--r-- 1 uname grp 1246 Mar 9 00:37 three.gz -rw-r--r-- 1 uname grp 0 Mar 9 00:37 two.gz 

我原来的答案是redirect到许多压缩文件的数据库转储(没有双重压缩)的一个例子。 (由于我扫描了这个问题,并认真地错过了 – 对此感到抱歉)

这是重新压缩文件的一个例子:

 mysqldump -u user -pupasswd my-database | gzip -c > one.gz; gzip -c one.gz > two.gz; gzip -c two.gz > three.gz $> ls -l -rw-r--r-- 1 uname grp 1246 Mar 9 00:44 one.gz -rw-r--r-- 1 uname grp 1306 Mar 9 00:44 three.gz -rw-r--r-- 1 uname grp 1276 Mar 9 00:44 two.gz 

这是解释I / Oredirect的好资源: http : //www.codecoffee.com/tipsforlinux/articles2/042.html

您可以使用tee命令redirect输出:

 /usr/bin/mysqldump -u user -pupasswd my-database | \ tee >(gzip -9 -c > /home/user/backup/mydatabase-backup-`date +\%m\%d_\%Y`.sql.gz) | \ gzip> /home/user/backup2/mydatabase-backup-`date +\%m\%d_\%Y`.sql.gz 2>&1 

见这里的文档

如果您需要将date时间添加到备份文件名称(Centos7),请使用以下命令:

 /usr/bin/mysqldump -u USER -pPASSWD DBNAME | gzip > ~/backups/db.$(date +%F.%H%M%S).sql.gz 

这将创build文件:db.2017-11-17.231537.sql.gz