无法导出mysql数据库
我好像遇到了一些问题。我有一个页面,可以让员工用户下载这个程序的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