Django: экспорт БД через view

Есть некий Django-сайт, который нужно перенести на другой домен, но доступ у нас есть лишь  к его файлам. Выяснилось также, что сервер перезагружается, при обновлении даты изменения WSGI модуля сайта.

Скрипты и статику-то мы перенесем. Но что делать с БД?

Все просто: достаточно сделать такой «специальный» view:

@staff_member_required
def export_database(request):
    import os
    from datetime import date
    from django.conf import settings
    from django.http import HttpResponse
    db = settings.DATABASES['default']
    cmd = '/usr/bin/mysqldump --opt --compact --skip-add-locks --add-drop-table -u %s -p%s %s | bzip2 -c' % (db['USER'], db['PASSWORD'], db['NAME'])
    stdin, stdout = os.popen2(cmd)
    stdin.close()
    response = HttpResponse(stdout, mimetype="application/octet-stream")
    response['Content-Disposition'] = 'attachment; filename=%s_db.sql.bz2' % date.today()
    return response

Конечно-же, нужно его привязать в urls:

...
(r'^exportdb', 'your_app_name.views.export_database'),
...

Потом просто открываем в браузере соответстующий url и…
Вуа-ля! Сохраняем наш дамп базы данных.

Осталось оставить persistent redirect на новый адрес в urls.

PS: Для windows нужно указать правильный адрес к mysqldump и отказаться от сжатия.
Если нет доступа к админке, можно тоже сделать специальный view, который сбросит пароль, после чего этот view надо не забыть убрать. (хотя это и так очевидно)

Запись опубликована в рубрике Решение проблем с метками , , , . Добавьте в закладки постоянную ссылку.

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *