每周如何安排一个cron job来备份MySql数据库?

3
我可以用什么命令行来每周备份一个 MySql 数据库并将其备份到一个带日期的文件名中(以便不与先前的备份冲突)?
此外,这是一个合理的备份策略吗?我的数据库相对较小(完整导出现在只有 3.2 MB)。数据变化率相对较低。如果出现问题,我需要能够完全恢复数据库。如果有一种方式可以查看跨时间范围发生的更改,那就更好了。
3个回答

2
你可以尝试这样做:

你可以尝试像这样做:

0 4 1 * * DATE=`date +%y-%m-%d`; mysqldump -u <dbuser> -p<dbpasswd> <dbname> | gzip > dbname-$DATE.sql.gz

每月1日凌晨4点将会导出您的数据库(并进行gzip压缩)。

1

使用cron和mysqldump进行每周备份:

感谢@timdev答案(+1)提供的命令行。

cron语法如下:

* * * * * = [minute] [hour] [day of month] [month] [day of week]

然而,由于您需要每周备份,因此可以在上面的第三个开始时间(月中的日期)中指定运行备份的日期,以模拟每周间隔。

0 4 1,8,15,21,28 * * DATE=`date +%y-%m-%d`; mysqldump -u <dbuser> -p<dbpasswd> <dbname> | gzip > dbname-$DATE.sql.gz

这将在每个月的1日、8日、15日、21日和28日的凌晨4点运行。


+1 修正我的答案。不知道为什么我认为他在问每月的时候,问题主题中明确写着“每周”... - timdev
3
看起来“0 0 * * 0”是更好的语法,以使这个命令真正每周执行一次。 - KevinM
是的,星期几为0意味着将使用该cron行在每个星期日午夜备份。 - yincrash

0

你可以尝试使用MySQL复制

复制使得一个MySQL数据库服务器(主服务器)的数据能够被复制到一个或多个MySQL数据库服务器(从服务器)。复制是异步的 - 从服务器不需要永久连接以接收来自主服务器的更新。这意味着更新可以通过长距离连接甚至通过临时或间歇性连接(如拨号服务)进行。

这样,如果您的主数据库(主服务器)出现问题,从服务器可以作为一个即插即用的替代品。


我现在并不担心数据库本身的故障。我担心的是数据丢失或用户意外编辑。 - KevinM
完全同意。这是我对“如果出现问题,我需要能够完整地恢复数据库”的独特思考方式。我认为复制可以快速实现这一点。 - bakkal

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接