似乎不能转储mysql数据库

2024-06-28 19:02:25 发布

您现在位置:Python中文网/ 问答频道 /正文

我好像有问题。我有一个视图,我可以允许员工用户下载该程序的MySQL数据库,但是它根本不起作用。我得到一个错误,它说Errno 2] No such file or directory: '/usr/local/src/djcode/c2duo_mms/backup.gz'。在

我不知道为什么会出错,但可能的答案是因为我无法正确地转储数据库。找不到备份.gz,因为它找不到文件,因为它应该转储文件的步骤不起作用。在

视图.py

@login_required
def dbbackup(request):
    if not (request.user.is_authenticated() and request.user.is_staff):
        raise http.Http404
    os.popen3("mysqldump -u *username* -p*password* *database* > /usr/local/src/djcode/c2duo_mms/backup.sql")
    os.popen3("gzip -c /usr/local/src/djcode/c2duo_mms/backup.sql > /usr/local/src/djcode/c2duo_mms/backup.gz"
    dataf = open('/usr/local/src/djcode/c2duo_mms/backup.gz', 'r')
    return HttpResponse(dataf.read(), mimetype='application/x-gzip')

编辑:我试过运行一个小python脚本。下面的python文件可以工作(保存名为备份.gz在c2duo_mms目录中)。为什么我不能从我的视图.py文件!?在

^{pr2}$

Tags: 文件pysrc视图数据库requestusrlocal
3条回答

试试这样的方法:

import subprocess    
command = "mysqldump -u *username* -p*password* *database* > /usr/local/src/djcode/c2duo_mms/backup.sql"
p = subprocess.Popen(command, shell=True, bufsize=0, stdout=subprocess.PIPE, universal_newlines=True)
p.wait()
output = p.stdout.read()
p.stdout.close()

var“output”将允许您访问命令中的任何错误消息。在

在此处使用完整路径:

 os.popen3("mysqldump --add-drop-table -u " + settings.DATABASE_USER + " -p" + settings.DATABASE_PASSWORD + " " + settings.DATABASE_NAME + " >  backup.sql")

也就是说,你在哪里保存sql。在

Popen打开一个进程,但它不会在它周围创建一个shell。因为我不期望中间shell,所以我不希望那里的重定向会被解释。 Popen确实会向进程内外的各种流返回文件句柄—如果没有重定向,您将得到标准输出。在

如果您读取并存储来自这些管道句柄的内容,则可以在python代码中执行重定向。在

也许您可以考虑子流程模块http://docs.python.org/library/subprocess.html-并且可以指定与它一起使用的shell,这样就可以解释重定向。在

相关问题 更多 >