BackUP for MySQL Bases
Чтото сегодня параноя окончательно сьела мой мозг …. и я решился сделать бекап своих мускульных баз. Даже незнаю с чего бы это … вроде все исправно работает, да и спится ночью хорошо 😀 Но вдруг потянуло на подвиг — забекапиться. К слову сказать, бекапов мускула я вообще никогда не делал, и даже не успел об этом пожалеть. Но желание отчегото появилось. Так почему бы не попробовать реализовать?
Утилитка для этого дела искалась недолго — благо все есть в поставке самого MySQL. Называется mysqldump. Пользоваться проще пареной репы. Ей достаточно скормить пользователя с паролем под которым пойдем в mysql и название базы (одной или нескольких) которую собрались бэкапить. Разобраться совсем несложно, вот мой скриптик:
# 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. У меня, например так:
## ##
13 3 * * * /root/scripts/mysql_dump.sh
black:~#
Скрипт у меня лежит в /root/scripts и называется mysql_dump.sh. Конечно же он должен быть исполняемый:
-rwxr-xr-x 1 root root 506 Июл 11 00:50 /root/scripts/mysql_dump.sh
black:~#
Ну и желательно забрать у других возможность что либо делать с ним (там же прописан мой рутовый пароль на mysql!) поэтому я еще сделал вот так:
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 я увидел следующие файлы:
итого 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#
Отлично отработал судя по содержимому директории 🙂
Ну какбы все!
Всем удачи!
нафига такие сложности…
http://sypex.net/ тебе в помощь 🙂
кстати забыл добавить все это хорошо… только лично я сам перестал пользоваться этими интрументами что ты описываеш т.к. честенько возникали проблемы то бекап битый то с кодировками то с версиями самой БД то с размером бекапа, а с тем скриптиком никаких проблем 🙂
Ну незнай-незнай 🙂 Локаль UTF-Generic Какие там проблемы то могут быть? Версия mysql? Тоже врятли про меня … я не собираюсь разворачивать эти базы на другой системе. А в пределах одной системы — версия баз в бэкапах месячной давности и версия mysql-daemon врятли будут сильно отличаться. В стабильных линуховых дистрибутивах все очень медленно обновляется 🙂
@80564
Это у вас сложности 🙂
А вышеописанный способ делает бекапы нужных баз на уровне сервера. Тем же, кто далёк от администрирования серверов, несомненно, лучше пользоваться сторонними утилитами «в два клика».
За несколько лет не было ни одной проблемы, пользуюсь похожими скриптами для бекапа баз и ФС