我正在处理 centos 中 mysql 数据库的增量备份解决方案。我需要编写一个 perl 脚本来进行增量备份。然后我将使用 crontabs 运行这个脚本。我有点困惑。有解决方案,但没有真正的帮助。我做了很多研究。有很多方法可以对文件进行完整备份和增量备份。我可以很容易地理解它们,但我需要对 mysql 数据库进行增量备份。我不知道怎么做。任何人都可以帮助我建议一个源代码或一段代码。
2 回答
MySQL 在此处记录了您一直在查看的增量备份方法:
http://dev.mysql.com/doc/refman/5.0/en/binary-log.html
您本质上想要做的是设置您的 mysql 实例,以便将对数据库的任何更改写入此二进制日志。这意味着任何更新、删除、插入等都进入二进制日志,而不是选择语句(不会更改数据库,因此不要进入二进制日志)。
在打开二进制日志记录的情况下运行 mysql 实例后,您将进行完整备份并记下主位置。然后稍后,要进行增量备份,您希望从主位置运行 mysqlbinlog,其输出将是自进行完整备份以来对数据库所做的所有更改。此时您需要再次记下主位置,因此您知道要从中进行下一次增量备份的位置。
显然,如果您一遍又一遍地进行多个增量备份,您需要保留所有这些增量备份。我建议经常进行完整备份。
确实,如果可以的话,我建议您始终进行完整备份。IMO,进行增量备份只会给您带来痛苦,但是如果您需要这样做,那肯定是一种方法。
mysqldump 是门票。
例子:
mysqldump -u [user_name] -p[password] --database [database_name] >/tmp/databasename.sql
-u = mysql数据库用户名
-p = mysql数据库密码
注意:-p 选项后面没有空格。如果你必须在 perl 中这样做,那么你可以使用系统函数来调用它,如下所示:
system("mysqldump -u [user_name] -p[password] --database [database_name] >/tmp/databasename.sql") or die "system call failed: $?";
请注意这样做涉及的安全风险。如果有人碰巧列出了系统正在运行的当前进程,他们将能够看到用于数据库访问的凭据。