似乎无法转储mysql数据库

时间:2011-08-03 13:34:09

标签: python mysql database django mysqldump

我似乎遇到了问题。我有一个视图,我可以允许员工用户下载该程序的MySQL数据库,但它根本不工作。我收到一条错误,上面写着Errno 2] No such file or directory: '/usr/local/src/djcode/c2duo_mms/backup.gz'

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

views.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文件工作(在c2duo_mms目录中保存名为backup.gz的文件)。那么为什么我不能在我的views.py文件中做同样的事情!?

#!/usr/bin/env python
import os

    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")

4 个答案:

答案 0 :(得分:1)

在此处使用完整路径:

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

即。你在哪里保存sql。

答案 1 :(得分:0)

Popen打开一个进程,但它不会在它周围创建一个shell。由于我不期望有一个中间shell,所以我不希望那里的重定向会被解释。 Popen确实将文件句柄返回到进程内/进程中的各种流 - 如果没有重定向,它将是stdout。

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

也许您可以考虑子流程模块 - http://docs.python.org/library/subprocess.html - 并且您可以指定要使用的shell,然后可以解释重定向。

答案 2 :(得分:0)

尝试这样的事情:

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”将允许您访问命令中的任何错误消息。

答案 3 :(得分:0)

网络服务器作为与root不同的用户运行(它需要相同),因此我没有权限保存在该文件夹中。我将我想要保存的文件夹的所有权更改为现在已经有效。

chown -R "apache" c2duo_mms