Бэкап сайта одной командой. Быстро и просто.

Go to main page

Каждому из нас (имею ввиду владельцев или админов сайтов) иногда бывает нужно создать бэкап актуального состояния файлов и базы данных сайта. Многие используют для этого какие то плагины, кто-то пользуется phpMyAdmin+FTP и т.п. Всё это работает, но я предпочитаю использовать чудодейственную консоль. Быстро, просто, недежно...

Вот придумал я для себя команду, которая делает бекап в одно движение. Причем сначала она делает дамп базы данных, затем копирует все файлы сайта кроме логов и кеша, а после этого пакует всё это дело в компактненький tgz файл. Впрочем её можно кастомизировать сколько угодно и как угодно под ваши нужды. Главное желание.

Команда представляет из себя на самом деле последовательность разных комманд, но благодаря тому, что они запускаются по очереди, единственное, что от вас потребуется, это вставить её в консоль, нажать enter и ввести пароль для чтения вашей базы данных.

1mysqldump -u {mysql-username} -p {mysql-database} > {mysql-filename}.sql && tar czpvf {backup-filename}-`date +%d.%m.%Y-%H.%M`.tar.gz {site-dir} --exclude=cache/* --exclude=tmp/* --exclude=logs/* {mysql-filename}.sql && rm {mysql-filename}.sql

А теперь разберем её подробнее, чтобы вы понимали как она работает и, соответственно, могли её кастомизировать.

Для начала нужно подставить собственные значения вместо фраз, что в фигурных скобочках. Их названия говорят сами за себя, но тем неменее я их опишу:

  • mysql-username - имя пользователя для доступа к MySQL базе данных
  • mysql-database - имя базы данных, дамп которой нужно сделать
  • mysql-filename - имя файла, в который будет сохранен дамп БД
  • backup-filename - имя файла архива в который будет всё запаковано
  • site-dir - путь к корневой директории файлов сайта

Первая часть

1mysqldump -u {mysql-username} -p {mysql-database} > {mysql-filename}.sql

читает указанную БД и возвращаемый результат сохраняет в файл.

Вторая часть:

1tar czpvf {backup-filename}-`date +%d.%m.%Y-%H.%M`.tar.gz {site-dir} --exclude=cache/* --exclude=tmp/* --exclude=logs/* {mysql-filename}.sql

упаковывает, а затем сжимает все файлы из директории {site-dir} (кроме содержимого всех подпапок с именами cache, tmp и logs) и туда же упаковывает ранее созданный файл дампа БД. Результат сохраняется в файл с именем {backup-filename}-``date +%d.%m.%Y-%H.%M``.tar.gz, где date +%d.%m.%Y-%H.%M будет преобразовано в текущую дату и время в формате день.месяц.год-час.минута.

Третья часть:

1rm {mysql-filename}.sql

просто удаляет файл дампа БД, т.к. он уже упакован в архив.

При запуске, терминал сначала попросит вас ввести пароль пользователя БД и, в случае успешного подключения, вы увидите "ковер" строк. Поздравляю, ваш бэкап выполняется.

Пожалуй стоит заметить, что результирующий файл будет сохранен в той директории, в которой вы находились на момент запуска команды. Конечно вы можете использовать вместо простых имен файлов относительные или абсолютные пути к ним. Всё зависит только от вашей фантазии.