Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/amazon-web-services/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Can';我似乎没有转储mysql数据库_Python_Mysql_Database_Django_Mysqldump - Fatal编程技术网

Python Can';我似乎没有转储mysql数据库

Python Can';我似乎没有转储mysql数据库,python,mysql,database,django,mysqldump,Python,Mysql,Database,Django,Mysqldump,我好像有点问题。我有一个视图,允许员工用户下载该程序的MySQL数据库,但它根本不起作用。我收到一个错误,上面写着没有这样的文件或目录:'/usr/local/src/djcode/c2duo\u mms/backup.gz' 我不知道为什么会出错,但可能的答案是因为我无法正确转储数据库。它找不到backup.gz,因为它找不到文件,因为它应该转储文件的步骤不起作用 视图.py @login_required def dbbackup(request): if not (request.

我好像有点问题。我有一个视图,允许员工用户下载该程序的MySQL数据库,但它根本不起作用。我收到一个错误,上面写着没有这样的文件或目录:'/usr/local/src/djcode/c2duo\u mms/backup.gz'

我不知道为什么会出错,但可能的答案是因为我无法正确转储数据库。它找不到backup.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文件可以工作了(将一个名为backup.gz的文件保存在c2duo_mms目录中)。那么,为什么我不能从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")
在此处使用完整路径:

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

i、 e.保存sql的位置。

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

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


也许您可以考虑子过程模块-并且可以指定使用它的shell,然后可以解释重定向。

试试这样的事情:

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

Web服务器是以与root不同的用户身份运行的(它必须是相同的),因此我没有在该文件夹中保存的权限。我更改了要保存到的文件夹的所有权,该文件夹现已生效


chown-R“apache”c2duo_mms

我只是猜测一下,为什么它是一个注释,请确保用户django正在运行,因为它具有写入该目录所需的权限。同时检查mysqldump和gzip的输出是否有错误。您是否尝试手动运行该命令以确保其正常工作?@Mike Ramirez:权限绝对没有问题。mysqldump和gzip的输出看起来也不错。虽然由于它不转储数据库,但可能是这一行导致了问题
os.popen3(“mysqldump--adddrop table-u”+settings.DATABASE\u USER+“-p”+settings.DATABASE\u PASSWORD+”“+settings.DATABASE\u NAME+”>backup.sql”)os.popen3(“gzip-c backup.sql>backup.gz”)
@Shehzad009然后查看发布的第一个答案。它应该解决这个问题。是的,我知道os.chdir()应该对相对路径进行类似的操作,但是绝对路径通常是最优的,并且您知道它将要/应该在哪里。也许还可以尝试使用mysqldump命令的完整路径。您是否能够调试以确定脚本的哪个部分失败。也值得检查。您看到文件夹中的sql文件了吗?我注意到没有rm命令,所以您希望看到这两个文件都保留下来。如果它不在那里,这将表明转储失败了,如果不是事先发生的话。