autobackupmysql.sh автоматизируем бэкап Mysql | FreeBSD, MYSQL

Процесс резервного копирования разделяют на два типа – условно скажем – на физический и логический. Физический применим в таблицам типа myisam – когда мы можем просто заблокировать таблицы и скопировать файлы (MYD, MYI, frm). Этот тип выполняется к примеру скриптом mysqlhotcopy.

/usr/home/mysqlhotcopy.sh -u user -p pass --allowold --keepold --quiet database /path_to_back

Для «логического» бэкапа (бэкапа который генерирует логическую труктуру таблиц и запросы к базе, способные воссоздать таблицы) используется mysqldump.

mysqldump -uUSER -pPASS --databases base_name > /path_to_back/database.sql

Собственно для второго типа бэкапа есть скрипт autobackupmysql.sh – клон скрипта automysqlbackup.sh. Есть в портах, требует bash.

Поскольку в сети информации описывающей этот скрипт не нашел – пишем для себя.


Ставим из портов:

#cd /usr/ports/databases/autobackupmysql
#make install clean

В итоге получаем скрипт autobackupmysql.sh в /usr/local/sbin. В самом скрипте – инструкции по использованию. Если у нас есть конфиг /usr/local/etc/autobackupmysql.conf
значения переменных скрипт возьмет из конфига. Создаем:

#touch /usr/local/etc/autobackupmysql.conf

Пишем в файл:

USERNAME='user'
PASSWORD='pass'
DBHOST='localhost'
DBNAMES="base_name"
BACKUPDIR="/backup"
MAILCONTENT="log"
MAXATTSIZE="4000"
MAILADDR="your@mail.com"

Или файл конфига не создаем а правим значения переменных прямо в скрипте.

Запускаем.

#autobackupmysql.sh

И получаем ошибку:

###### WARNING ######
Errors reported during AutoBackupMySQL execution.. Backup failed
Error log below..
/usr/local/sbin/autobackupmysql.sh: line 556: [: 5: unary operator expected

Правим скрипт – добавляем символы [ ] в строку 556.
Было:

# Weekly Backup
if [ $DNOW = $DOWEEKLY ]; then

Стало:

# Weekly Backup
if [[ $DNOW = $DOWEEKLY ]]; then

Запускаем ещё раз. Скрипт создаст папки daily, weekly, monthly, и дампы указанных нами баз с точными временными метками. Кроме этого – пришлет отчет о проделанной работе на почту.