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

 于昕会_445 发布于 2023-01-19 11:09

我在crontab上班途中遇到了问题.我想自动化MySQL数据库备份.

设置:

Debian GNU/Linux 7.3(wheezy)

MySQL服务器版本:5.5.33-0 + wheezy1(Debian)

目录user,backup和backup2有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目录中每分钟创建一个文件,但是有0个字节.

但是,当我将此输出重定向到第二个目录backup2时,我注意到在其中创建了正确压缩的正确mysqldump文件.我无法确定我在第一个目录中的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

我非常感谢你的解释.

谢谢

3 个回答
  • 首先执行mysqldump命令,并使用管道重定向生成的输出.管道将标准输出作为标准输入发送到gzip命令.在filename.gz之后,是输出重定向操作符(>),它将继续将数据重定向到最后一个文件名,这是保存数据的位置.

    例如,此命令将转储数据库并通过gzip运行它,数据最终将以三个格式登陆

    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
    

    我的原始答案是将数据库转储重定向到许多压缩文件(没有双重压缩)的示例.(因为我扫描了这个问题并且严重错过了 - 抱歉)

    这是重新压缩文件的示例:

    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/O重定向的好资源:http://www.codecoffee.com/tipsforlinux/articles2/042.html

    2023-01-19 11:09 回答
  • 如果需要在备份文件名(Centos7)中添加日期时间,请使用以下命令:

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

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

    2023-01-19 11:10 回答
  • 您可以使用该tee命令重定向输出:

    /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
    

    请参阅此处的文档

    2023-01-19 11:10 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有