使用Python备份MySQL数据库

0 投票
2 回答
3053 浏览
提问于 2025-04-16 00:15

我正在尝试写一个Python脚本,每天午夜备份一次数据库。下面是我使用的代码:

from subprocess import call

call (["mysqldump", "-u", "root", "-p*****", "normalisation", ">", "date_here.sql"])

我遇到的第一个问题是,MySQL把">"当成了一个表名,但实际上并不是。这个查询在命令行中运行时没有问题(见下面的例子):

$ mysqldump -u root -p***** normalisation > date_here.sql
$ ls
backup.py date_here.sql
$

其次,我该如何让这个脚本每天午夜自动运行呢?
第三,我需要把.sql文件保存为备份的日期。

2 个回答

1

你的命令失败是因为输出重定向是由命令行的外壳程序来处理的,而不是由mysqldump来处理。试试用Popen代替call,像下面这样:

from subprocess import Popen

f = open( "date_here.sql", "w" )
x = Popen( ["mysqldump", "-u", "root", "-p*****", "normalisation"], stdout = f )
x.wait()
f.close()

这样你就可以在你的程序里处理输出到标准输出的操作了。

1

你可以使用一个脚本来完成这个任务。网上已经有很多这样的脚本了。你可以用date这个命令来生成文件名,只需要用对的格式来写就行。而且,你还可以通过cron这个工具让它在指定的时间自动运行。

撰写回答