Резервное копирование баз данных с отправкой на email

Быстрый и надёжный способ создания резервных копий баз данных

Навеяно статьёй Дмитрия «Ежедневный бэкап для WordPress с помощью Gmail», которую я очень рекомендую к прочтению.

Основное отличие моего метода кроется в моих «религиозных предпочтениях»: я считаю, что вряд ли какая программа сможет сделать копию базы быстрее, чем mysqldump, и бинарный файл всегда работает быстрее, нежели самый оптимизированный PHP-код. Поэтому никаких лишних плагинов для WordPress, только подручные средства :-) Хотя данное решение не подойдёт людям, использующих shared-хостинг.

Случай 1. Резервное копирование всех баз данных.

[-]
View Code Bash
#! /bin/sh

set -e

MYSQL_USER=user
MYSQL_PASS=pass
MAIL_TO=my@email.com

cd /tmp

(mysqldump -u$MYSQL_USER -p$MYSQL_PASS --all-databases | gzip -9 - > dump.sql.gz) && \
(echo | mutt -a dump.sql.gz -s "[DB BACKUP]" $MAIL_TO)
rm -f dump.sql.gz

Вместо gzip можно использовать bzip2 или просто zip — каждому своё ;-)

Случай 2. Резервное копирование некоторых баз данных в один файл.

[-]
View Code Bash
#! /bin/sh

set -e

MYSQL_USER=user
MYSQL_PASS=pass
DATABASES="db1 db2 db3"
MAIL_TO=my@email.com

cd /tmp

(mysqldump -u$MYSQL_USER -p$MYSQL_PASS --databases $DATABASES | gzip -9 - > dump.sql.gz) && \
(echo | mutt -a dump.sql.gz -s "[DB BACKUP]" $MAIL_TO)
rm -f dump.sql.gz

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

Случай 3. Резервное копирование всех баз данных (для каждой базы отдельный файл).

[-]
View Code Bash
#! /bin/sh

set -e

MYSQL_USER=user
MYSQL_PASS=pass
MAIL_TO=my@email.com

cd /tmp

for db in `mysql -u$MYSQL_USER -p$MYSQL_PASS -B -N -e 'SHOW DATABASES' | xargs`; do
    (mysqldump -u$MYSQL_USER -p$MYSQL_PASS ${db} | gzip -9 - > ${db}.sql.gz) && \
        (echo | mutt -a {$db}.sql.gz -s "[DB BACKUP] {$db}" $MAIL_TO)
    rm -f ${db}.sql.gz
done

Случай 4. Резервное копирование некоторых баз данных (для каждой базы отдельный файл).

[-]
View Code Bash
#! /bin/sh

set -e

MYSQL_USER=user
MYSQL_PASS=pass
DATABASES="db1 db2 db3"
MAIL_TO=my@email.com

cd /tmp

for db in $DATABASES; do
    (mysqldump -u$MYSQL_USER -p$MYSQL_PASS ${db} | gzip -9 - > ${db}.sql.gz) && \
        (echo | mutt -a {$db}.sql.gz -s "[DB BACKUP] {$db}" $MAIL_TO)
    rm -f ${db}.sql.gz
done

Для простоты я не задавал лишних опций (например, -K -e -q) mysqldump.

Если сервер выделенный и есть желание запускать mysqldump от имени root, то вместо задания паролей в Debian можно использовать mysqldump --defaults-file=/etc/mysql/debian.cnf.

Автор: ; опубликовано в: Linux, Администрирование; метки: MySQL, база данных, резервная копия
19
Апр
2009

RSS Комментарии к статье «Резервное копирование баз данных с отправкой на email» (2)  »

  1. ref

    Пытаюсь повешать скрипт бэкапа на крон (3 скрипт), при запуске мне выдаёт ошибку – Exited with return code = 126

    Что может быть?

Пожалуйста, не используйте эту форму для комментирования! Данная форма предназначена исключительно для ботов.

Оставить комментарий к записи «Резервное копирование баз данных с отправкой на email»

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

*

Можно использовать следующие HTML-теги и атрибуты: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

Оставляя комментарий, вы выражаете своё согласие с Правилами комментирования.

Подписаться, не комментируя

गते गते पारगते पारसंगते बोधि स्वाहा