使用Python备份MySQL数据库
我正在尝试写一个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这个工具让它在指定的时间自动运行。