Регулярное резервное копирование баз mysql

mysqldump-exampleСистема управления базами данных mysql и ее форк mariadb являются очень популярными. Все благодаря открытому коду и бесплатности. Огромное количество проектов в интернете, и не только, используют mysql/mariadb в качестве сервера баз данных.

Регулярное резервное копирование информации является надежным средством защиты от ее порчи или утраты. Существует не малое количество программных средств для организации резервного копирования mysql. Рассмотрим один из самых простых способов.

Замечательная утилита mysqldump позволяет делать бэкапы баз данных mysql/mariadb на лету, без остановки работы сервера. С её помощью, мы будем делать копию всех баз данных. Архивы старше 10 дней будем удалять.

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

#!/bin/bash

DB_BACKUP="/backups/backup-mysql/`date +%Y-%m-%d`"
DB_USER="root"
DB_PASSWD="mysql-root-password"
HN=`hostname | awk -F. '{print $1}'`

# Создаем каталог для сохранения резервной копии
mkdir -p $DB_BACKUP

# Удаляет архивы старше 10 дней
find /backups/backup-mysql/ -maxdepth 1 -type d -mtime +10 -exec rm -rf {} \;

# Делаем копию каждой базы данных сервера mysql/mariadb
for db in $(mysql --user=$DB_USER --password=$DB_PASSWD -e 'show databases' -s --skip-column-names|grep -viE '(staging|performance_schema|information_schema)');
do mysqldump --user=$DB_USER --password=$DB_PASSWD --events --opt --single-transaction $db | bzip2 > "$DB_BACKUP/mysqldump-$HN-$db-$(date +%Y-%m-%d).sql.bz2";
done

Сохраняем скрипт, например в /usr/local/bin/backup-mysql.sh, и устанавливаем на него права доступа 700 с помощью chmod. Теперь никто кроме пользователя root не сможет прочитать его содержимое и узнать пароль от сервера mysql.

Из копии мы исключаем не нужные для последующего восстановления базы данных performance_schema и information_schema.

Для регулярного автоматического запуска каждую ночь, нужно добавить задание в cron:

55 1 * * * /usr/local/bin/backup-mysql.sh

Скрипт может выглядеть на много проще, если использовать параметр –all-databases, вместо прямого перебора всех баз данных. Однако выбранный подход позволяет упростить работу с копиями больших баз данных.

И на последок, чуть не забыл. Не следует хранить бэкапы на том же сервере, для которого они предназначаются.

В данном скрипте подразумевается, что каталог /backups является подключенным надежным удаленным ресурсом.

2 thoughts on “Регулярное резервное копирование баз mysql

  1. Иван СошинИван Сошин

    Тут ошибка:

    mysqldump —user=$DB_USER —password=$DB_PASSWD —events —opt —single-transaction $db | bzip2 > «$DB_BACKUP/mysqldump-$HN-$db-$(date +%Y-%m-%d).sql.bz2»;

    Перенаправление потока «>» экранировалось в «>».

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *