备份数据库Django MysqlDump

时间:2017-10-18 21:25:14

标签: mysql django python-3.x

下午好,我在Django 1.10中有一个应用程序,我需要创建bd的备份,当用户点击将放置在模板中的按钮并将其下载到该模板中时,应该创建此副本。用户团队。

在我的views.py中,我有以下内容。

def backup(request):
    subprocess.Popen("mysqldump -u root -p12345 victimas > /home/proyecto/backup.sql")
    subprocess.Popen("gzip -c /home/proyecto/backup.sql > /home/proyecto/backup.gz")
    dataf = open('/home/proyecto/backups/backup.gz', 'r')
    return HttpResponse(dataf.read(), mimetype='application/x-gzip')

但是我收到了错误

[Errno 2] No such file or directory: django mysqldump

直接从控制台执行此操作会为我创建文件,并检查文件夹的权限。 我感谢您的合作

2 个答案:

答案 0 :(得分:0)

根据Popen文档,Popen获取参数列表。如果传递一个字符串,它将被视为命令名称 - 整个字符串将被视为命令,而不是带参数的命令。

使用以下方法拆分字符串参数:

import shlex
command_line = "mysqldump -u root -p12345 victimas > /home/proyecto/backup.sql"
args = shlex.split(command_line)
subprocess.Popen(args)

答案 1 :(得分:0)

我解决了这个问题:

在Django设置文件中添加:

RUTA = '/path/to_tmp/file/'

在views.py

import subprocess, gzip
from subprocess import Popen
from victimas.settings import DATABASES, RUTA

def backup(request):
    name = DATABASES['default']['NAME']
    passwd = DATABASES['default']['PASSWORD']
    user = DATABASES['default']['USER']
    ruta = RUTA

    proc = subprocess.Popen("mysqldump -u "+user+" -p"+passwd+" "+name+" > "+ruta+"backup.sql", shell=True)
    proc.wait()
    procs = subprocess.Popen("tar -czvf "+ruta+"backup.tar.tgz "+ruta+"backup.sql", shell=True, )
    procs.wait()

    fs = FileSystemStorage(ruta)
    with fs.open('backup.tar.tgz') as tar:
        response = HttpResponse(tar, content_type='application/x-gzip')
        response['Content-Disposition'] = 'filename="backup.tar.tgz"'
        return response