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

Навеяно статьёй Дмитрия "Ежедневный бэкап для 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.

Добавить в закладки

Связанные записи

19
Апр
2009

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

К статье «Резервное копирование баз данных с отправкой на email» комментариев пока нет. Не хотите ли стать первым?

Подписаться на RSS-ленту комментариев к статье «Резервное копирование баз данных с отправкой на email» Trackback URL: http://blog.sjinks.org.ua/administring/545-backing-up-databases-to-email/trackback/

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

Вы можете использовать данные тэги: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

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

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