Сегодня речь пойдёт про резервное копированием баз данных mysql. Все описанные операции проводились на сервере FreeBSD с установленной на него из портов mysql-server-5.0.92. Напишим скриптики для
- локального копирования со сжатием
- отправки архива на e-mail
- копирования со сжатием на ftp и уведомлением на почту в случае успешного завершения.
1) Резервное копирование базы mysql на локальный сервер.
Создаём файлик:
ee /usr/local/etc/rc.d/mdump.sh
Если делаем копию бд со сжатием, то скриптик будет выглядеть так:
#!/bin/sh
DATE=`date «+%Y-%m-%d%.%H.%M.%S»`
BKPDIR=’/var/db/mysql’
/usr/local/bin/mysqldump -uпользователь_бд -pпароль_пользователя_бд test | /usr/bin/gzip -c > $BKPDIR/$DATE.mdump.gz
Объяснения:
DATE — переменная, которая необходима для формирования названия конечного архива. Название архива будет представлять собой дату и время его создания, а именно «год-месяц-день.часы.минуты.секунды.mdump.gz» , если копии снимаются раз в сутки, то лучше сократить эту переменную до:
DATE=`date «+%Y-%m-%d»`
это получится «год-месяц-день.mdump.gz»
BKPDIR — переменная, указывающая, где будут складываться копии.
Далее самая длинная строка:
/usr/local/bin/mysqldump — собственно сама утилита mysqldump
-uпользователь_бд -именно так без пробелов. -u -опция, указывающая пользователя под которым будем подключаться к mysql для создания резервной копии, а пользователь_бд -это как раз логин того пользователя.
-pпароль_пользователя_бд — здесь по аналогии с опцией -u, только речь идёт о пароле вышеуказанного пользователя.
test — это имя БД
/usr/bin/gzip — путь до архиватора
$BKPDIR/$DATE.mdump.gz — это как раз выходной файлик, который представляет собой /директория до архивов/дата..mdump.gz
Если надо без архивирования, что вообще сомнительное пожелание, то листинг скрипта ниже:
#!/bin/sh
DATE=`date «+%Y-%m-%d%.%H.%M.%S»`
BKPDIR=’/var/db/mysql’
/usr/local/bin/mysqldump -uпользователь -pпароль_пользователя_бд test > $BKPDIR/$DATE.mdump.sql
Примечание:
Для сравнения эффекта от сжатия скажу, что:
дамп базы zabbix без сжатия весил примерно 124 652 КБ
сжатый дамп базы zabbix весил примерно 18 838 КБ
соответственно сжатый весит примерно в 6,5 меньше.
Делаем файлик исполняемым:
chmod +x /usr/local/etc/rc.d/mdump.sh
и в крон его для выполнения по расписанию /etc/crontab
#minute hour mday month wday who command
0 2 * * * root /bin/sh /usr/local/etc/rc.d/mdump.sh
каждый день в 2 ночи будет создаваться копия в /var/db/mysql
2) Если надо отправлять архив БД mysql на почту, то:
cd /usr/ports/converters/mpack
make install clean
rehash
Создаём опять таки скриптик(название произвольное):
ee /usr/local/etc/rc.d/mdump.sh
Вписываем:
#!/bin/sh
DATE=`date «+%Y-%m-%d»`
BKPDIR=’/var/db/mysql’
/usr/local/bin/mysqldump -uпользователь -pпароль_пользователя_бд test | /usr/bin/gzip -c > $BKPDIR/$DATE.mdump.gz
/usr/local/bin/mpack -s «backup mysql» $BKPDIR/$DATE.mdump.gz admin@site.com
/bin/rm $BKPDIR/$DATE.mdump.gz
Сначала мы создаём переменные, потом создаём дамп, дамп отправляем по почте и удаляем его локально.
Объясню только те строки, которые изменились по сравнению с предыдущим вариантом.
mpack — утилита необходимая нам.
«backup mysql» — тема письма «backup mysql»
$BKPDIR/$DATE.mdump.gz — отправляемый файлик
admin@site.com — кому отправляем
/bin/rm $BKPDIR/$DATE.mdump.gz — удаляем локальную резервную копию
Скрипт, как и в прошлом варианте загоняем в крон, на удобное время.
3) И вариант с копированием архива БД mysql на ftp.
Устанавливаем консольный FTP-клиент — lftp, он поддерживает протоколы FTPS, HTTP, HTTPS, HFTP, FISH и SFTP.
cd /usr/ports/ftp/lftp
make install clean
Options for lftp 4.3.1
[X] OPENSSL With OpenSSL support
[ ] GNUTLS With GnutTLS support
[X] NLS With i18n support
Когда установится:
rehash
Далее делаем сам скриптик для отправки на ФТП:
ee /usr/local/etc/rc.d/mdump.sh
содержимое:
#!/bin/sh
BKPDIR=’/var/db/mysql’
DATE=`date «+%Y-%m-%d»`
srvbkp=’server.com’
login=’admin’
pass=’pasftp’
/usr/local/bin/mysqldump -uпользователь_бд -pпароль_пользователя_бд test | /usr/bin/gzip -c > $BKPDIR/$DATE.mdump.gz
if [ «`find /var/db/mysql/ -type f -name ‘*.mdump.gz’ | grep «.mdump.gz»`» ]
then
/usr/local/bin/lftp -u $login,$pass -e «put $BKPDIR/$DATE.mdump.gz;exit» $srvbkp
echo «bkp $DATE from $srvbkp — OK» | mail -s «backup $srvbkp» admin@site.com
fi
/bin/rm $BKPDIR/$DATE.mdump.gz
exit
Как всегда загоняем в крон, на удобное время.
Опять разберём строки, которые отсутствовали в предыдущих версиях:
srvbkp=’server.com’ — переменная в которой указываем ftp сервер, на который будем складывать копии.
login=’admin’ — admin -это пользователь, имеющий доступ на ftp с возможностью записи на него.
pass=’pasftp’ — пароль пользователя admin.
Далее делается дамп, потом идёт условие: Если файл, оканчивающийся на «.mdump.gz» есть в директории, где он должен создатся, то копируем его на ФТП, отключаемся от сервера, отправляем письмо в случае успешного копирования и удаляем дамп локально.
Примечание:
Строка отвечающия за отправку письма:
echo «bkp $DATE from $srvbkp — OK» | mail -s «backup $srvbkp» admin@site.com
чтобы она работала, необходимо установить/настроить ssmtp, делается это легко по статье. Если уведомления на почту не надо, просто удалите эту строку.
И ещё нюанс один. Если надо делать резервные копии всех баз то нужно использовать опцию -А:
/usr/local/bin/mysqldump -uпользователь_бд -pпароль_пользователя_бд -A | /usr/bin/gzip -c > $BKPDIR/$DATE.mdump.gz
И последнее правило: Делайте резервное копирование!