无法导出mysql数据库

2 投票
4 回答
1996 浏览
提问于 2025-04-16 22:48

我好像遇到了一些问题。我有一个页面,可以让员工用户下载这个程序的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 个回答

1

试试这样做:

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

这个变量“output”可以让你看到命令执行时的任何错误信息。

1

在这里使用完整的路径:

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

也就是说,你要把sql文件保存到哪里。

-1

这个网页服务器是以一个不同于根用户(root)的身份在运行,但它其实应该是用同一个身份来运行的。因为这样,我没有权限在那个文件夹里保存东西。后来我把我想保存的文件夹的所有权改成了“apache”,现在一切正常了。

chown -R "apache" c2duo_mms

撰写回答