我在使用crontab
时遇到问题。我想自动备份MySQL数据库。
设置:
- Debian GNU/Linux 7.3(中文版)
- MySQL服务器版本:5.5.33 - 0+喘息1(Debian)
- 目录user,backup和backup2具有755权限
- MySQL数据库和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时,我注意到在其中创建了适当压缩的正确mysqldumpfile,但我不知道我犯了什么错误,导致第一个目录中的文件为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
我非常希望你能解释一下。
谢谢
5条答案
按热度按时间of1yzvn41#
首先执行mysqldump命令,并使用管道重定向生成的输出。管道将标准输出作为标准输入发送到gzip命令。filename.gz之后是输出重定向操作符(〉),它将继续重定向数据,直到最后一个文件名,即数据将保存的位置。
例如,此命令将转储数据库并通过gzip运行它,数据最终将到达three.gz
我最初的答案是一个将数据库转储重定向到许多压缩文件(没有双重压缩)的示例。(因为我扫描了这个问题,并且严重错过了-对此感到抱歉)
这是一个重新压缩文件的示例:
这是解释I/O重定向的一个很好的资源:http://www.codecoffee.com/tipsforlinux/articles2/042.html
lbsnaicq2#
如果需要向备份文件名(Centos7)添加日期-时间,请使用以下命令:
这将创建文件:db.2017-11-17.231537.sql.gz
zzoitvuj3#
除了m79lkm的解决方案,我对这个主题的2分钱:
不要直接 * 管 *|将结果导入gzip,但首先将其转储为.sql文件,然后再进行gzip。
因此,如果您有可用的磁盘空间,请选择
&& gzip
而不是| gzip
。根据您的系统,转储本身可以轻松地加倍快,但您将需要大量更多的可用磁盘空间。您的表将锁定更短的时间,因此应用程序的停机时间/响应速度将更短。最终结果将完全相同。
**因此,非常重要的是首先使用检查可用磁盘空间
df -h
**然后估计数据库的转储大小,看看它是否适合可用空间:
(学分dba.stackexchange.com/a/37168)
然后像这样执行转储:
另一个技巧是使用选项**
--single-transaction
。它可以防止表被锁定,但仍然会导致可靠的备份!请参阅此处的文档。由于这不会为大多数查询锁定表,**因此实际上可以通过管道传输转储|直接在gzip中...(如果你没有空闲的磁盘空间)toe950274#
可以使用
tee
命令重定向输出:参见文档here
k10s72fa5#
就我个人而言,我已经创建了一个www.example.com(右755)在根目录,文件谁做这项工作,在crontab的顺序。file.sh (right 755) in the root directory, file who do this job, on order of the crontab.
Crontab代码:
10 2***根目录/根目录/backupautomatique.sh
File.sh code:
rm-f/home/mordb-148 - 251 - 89 - 66. sql.gz #(用于删除旧版本)
迈斯克敦莫尔|gzip〉/home/mordb-148 - 251 - 89 - 66. sql.gz(您所做的工作)
服务器-P2222/home/修改数据库-148 -251 -89 -66.sql.gz root@otherip:/home/修改数据库外部/修改数据库-148 -251 - 89 -66.sql.gz
(to如果发送服务器崩溃,发送副本到其他地方,因为太老了,像我一样;-))