BackUP for MySQL Bases

Чтото сегодня параноя окончательно сьела мой мозг …. и я решился сделать бекап своих мускульных баз. Даже незнаю с чего бы это … вроде все исправно работает, да и спится ночью хорошо 😀 Но вдруг потянуло на подвиг — забекапиться. К слову сказать, бекапов мускула я вообще никогда не делал, и даже не успел об этом пожалеть. Но желание отчегото появилось. Так почему бы не попробовать реализовать?

Утилитка для этого дела искалась недолго — благо все есть в поставке самого MySQL. Называется mysqldump. Пользоваться проще пареной репы. Ей достаточно скормить пользователя с паролем под которым пойдем в mysql и название базы (одной или нескольких) которую собрались бэкапить. Разобраться совсем несложно, вот мой скриптик:

#!/bin/bash
# Script for BackUP my MySQL bases
# Writed at nigth 12.07.2010
# By Black_13

DATE=`date +%F`
BACKUP_DIR="/root/backup/MySQL"
BASES_FOR_BACKUP="wordpress drupal6 eve BB"

# <Clean Old Archives> #
find ${BACKUP_DIR} -ctime +30 -exec rm -f  '{}' \;

cd $BACKUP_DIR

for DATABASE in $BASES_FOR_BACKUP
 do
  #mysqldump --user='root' --password='my_passwd_here' $DATABASE |gzip -c > ${DATABASE}-${DATE}.sql.gz
  mysqldump --user='root' --password='my_passwd_here' $DATABASE > ${DATABASE}-${DATE}.sql
  bzip2 -9 ${DATABASE}-${DATE}.sql && rm ${DATABASE}-${DATE}.sql
done

Вот такой простенький скриптик 🙂 Итак, подробнее о его работе. Переменная BACKUP_DIR указывает на директорию куда ложим наши SQL-дампы, в моем случае это директория /root/backup/MySQL Переменная BASES_FOR_BACKUP говорит какие именно базы данных будем бэкапить (необязательно же бекапить все) в моем случае это базы с названиями wordpress, drupal6, eve и BB.

Дальше все просто! Цикл for берет сначала первую базу (wordpress) и выполняет с ней действия согласно командам заданным между do и done. Если точнее то дампит с помощью mysqldump и затем сжимает bzip2

Закоментированная строчка для сжимания альтернитивным архиватором — gzip. Возможно в некоторых случаях придется использовать ее вместо просто дампа и потом сжатия bzip-ом. Причины использовать gzip вместо bzip2 могут быть разные — например большая база, слабый процессор на машинке и тп. Не секрет же что gzip кушает меньше процессор чем bzip2 но и сжимает, конечно, хуже. Такчто посути выбирать Вам что использовать 🙂 Я остановился на bzip2 так как базы у меня маленькие и процессор довольно шустрый. Возможно когда со временем базы подростут в размере … придется перейти на gzip. Ну это нюансы уже — решайте сами!

Командочка find /root/backup/MySQL -ctime +30 -exec rm -f  ‘{}’ \; служит для очистки старых архивов, в данном случае архивов которые созданы более 30 дней назад.

Достаточно просто закинуть этот скриптик в cron для того чтобы он выполнялся с заданной периодичностью. Для этого используейте командочку crontab -e запущенную из под root. У меня, например так:

black:~# crontab -l |grep -i mysql
##  ##
13 3 * * * /root/scripts/mysql_dump.sh
black:~#

Скрипт у меня лежит в /root/scripts и называется mysql_dump.sh. Конечно же он должен быть исполняемый:

black:~# ls -l /root/scripts/mysql_dump.sh
-rwxr-xr-x 1 root root 506 Июл 11 00:50 /root/scripts/mysql_dump.sh
black:~#

Ну и желательно забрать у других возможность что либо делать с ним (там же прописан мой рутовый пароль на mysql!) поэтому я еще сделал вот так:

black:~# chmod 700 /root/scripts/mysql_dump.sh
black:~# ls -l /root/scripts/mysql_dump.sh
-rwx------ 1 root root 506 Июл 11 00:50 /root/scripts/mysql_dump.sh
black:~#

чтобы обезопасить себя (хотя опять таки — параноя, так как в папку root при любых розкладах кроме root никто попасть не может).

Скрипт я настроил на работу в 3:13 ночи. После сегодняшней первой отработки в директории /root/backup/MySQL я увидел следующие файлы:

black:~/backup/MySQL# ls -l
итого 1124
-rw-r--r-- 1 root root 147848 Июл 11 03:13 wordpress-2010-07-11.sql.bz2
-rw-r--r-- 1 root root 483049 Июл 11 03:13 drupal6-2010-07-11.sql.bz2
-rw-r--r-- 1 root root  92236 Июл 11 03:13 eve-2010-07-11.sql.bz2
-rw-r--r-- 1 root root  31512 Июл 11 03:13 BB-2010-07-11.sql.bz2
black:~/backup/MySQL#

Отлично отработал судя по содержимому директории 🙂

Ну какбы все!

Всем удачи!

    • 80564
    • Июль 13th, 2010 10:44пп

    нафига такие сложности…
    http://sypex.net/ тебе в помощь 🙂

    • 80564
    • Июль 13th, 2010 10:48пп

    кстати забыл добавить все это хорошо… только лично я сам перестал пользоваться этими интрументами что ты описываеш т.к. честенько возникали проблемы то бекап битый то с кодировками то с версиями самой БД то с размером бекапа, а с тем скриптиком никаких проблем 🙂

    • admin
    • Июль 13th, 2010 11:38пп

    Ну незнай-незнай 🙂 Локаль UTF-Generic Какие там проблемы то могут быть? Версия mysql? Тоже врятли про меня … я не собираюсь разворачивать эти базы на другой системе. А в пределах одной системы — версия баз в бэкапах месячной давности и версия mysql-daemon врятли будут сильно отличаться. В стабильных линуховых дистрибутивах все очень медленно обновляется 🙂

    • vitich
    • Август 10th, 2010 8:56дп

    @80564

    Это у вас сложности 🙂
    А вышеописанный способ делает бекапы нужных баз на уровне сервера. Тем же, кто далёк от администрирования серверов, несомненно, лучше пользоваться сторонними утилитами «в два клика».

    • vitich
    • Август 10th, 2010 8:58дп

    За несколько лет не было ни одной проблемы, пользуюсь похожими скриптами для бекапа баз и ФС

  1. Октябрь 24th, 2013
  2. Октябрь 28th, 2013

Why ask?