MySQL: Делаем бэкапы баз данных

Системные администраторы делятся на два типа:

  1. Кто еще не делает бэкапы
  2. Кто делает бэкапы 

Есть еще третий тип, кто не только делает бэкапы, но и проверяет успешность их восстановления.

В этом материале рассмотрим встроенное средство mysqldump экспорта базы данных MySQL и MariaDB.

Создание архивных копий баз данных MySQL и MariaDB

Простой пример экспорта одной базы:

mysqldump -p zabbix > /data/backup/mysql/zabbix.sql

Пример экспорта нескольких бах данных (ключ -B):

mysqldump -p -B zabbix mybase wordpress > /data/backup/mysql/zabbix_mybase_wordpress.sql

Экспорт всех баз данных (ключ -A):

mysqldump -p -A > /data/backup/mysql/all.sql

Сжатие на лету:

mysqldump -p -A | gzip  > /data/backup/mysql/all.sql.gz

В этих примерах мы считаем, что вы являетесь пользователем root и на базу установлен пароль (ключ -p).
После ключа -p можно указать пароль без пробела (-pMypassworD), при этом получим сообщение о безопасности:

mysqldump: [Warning] Using a password on the command line interface can be insecure.

Есть два способа не использовать пароль для подключения:

Первый способ

Заключается в создании пользовательского конфигурационного файла .my.cnf

vi ~/.my.cnf
[client]
host=localhost
user=root
password=MypassworD
socket=/tmp/mysql.sock
chmod 400 ~/.my.cnf

Минус такого способа — пароль все равно указан явно.
Но можно не указывать аргумент -p

Второй способ

Создание бинарного файла login-path

mysql_config_editor set --login-path=root --host=localhost --user=root --password

Для его использования включаем в команду или скрипты конструкцию —login-path=root
Пример:

mysqldump --login-path=root -A > /data/backup/mysql/all.sql

Минусов у такого решения нет, пароль хранится в нечитаемом виде.

Создадим скрипт для архивирования нужных нам баз данных

Скрипт архивирует с помощью gzip экспортируемые файлы.
Так же в скрипте есть функционал количества сохраняемых архивных копий.

Я использую операционную систему FreeBSD, в дистрибутивах Linix данный скрипт работоспособен, только исправьте пути

vi /home/admins/script/mysql_backup.sh
#!/bin/sh
# Заводим переменные
BACKUPDIR="/home/backup"
DATE="`date +%Y-%m-%d_%H:%M`"
DAY="15"
ZIP="/usr/bin/gzip -cf5"
DUMP="/usr/local/bin/mysqldump --login-path=root -B"

# В цикле for обрабатываем список баз данных
for base in ftpusers radius zabbix
do

# Если нет выходных директорий, создаем их
if [ ! -d $BACKUPDIR/$base ]
    then
        /bin/mkdir -p $BACKUPDIR/$base
        /bin/chmod 700 $BACKUPDIR/$base/             
fi
# Делаем бэкап каждой базы из списка
$DUMP $base | $ZIP > $BACKUPDIR/$base/$base-$DATE.sql.gz

# Меняем парава на архивы -rw-r-----
/bin/chmod -R o-rwx $BACKUPDIR

# Удаляем архивы старше $DAY дней
/usr/bin/find $BACKUPDIR/$base -type f  -mtime +$DAY -delete
done

ftpusers radius zabbix — список архивируемых баз данных MySQL

Делаем скрипт исполняемым:

chmod +x /home/admins/script/mysql_backup.sh

Остается только внести наш скрипт в планировщик для ежедневной архивации:

# crontab -e
10 0 * * * /home/admins/script/mysql_backup.sh

На этом все.

Рейтинг
( 2 оценки, среднее 5 из 5 )
Понравилась статья? Поделиться с друзьями:
Добавить комментарий

:) :D :( :o 8O :? 8) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen:
This site is protected by reCAPTCHA and the Google Privacy Policy and Terms of Service apply.