Автоматическое резервное копирование нескольких баз данных MySQL или MariaDB |

Автоматическое резервное копирование нескольких баз данных MySQL или MariaDB

Мануал

Описание

В этой статье мы рассмотрим, как создавать резервные копии нескольких баз данных MySQL или MariaDB, которые размещаются на одном компьютере с использованием пользовательского скрипта bash и создания задания cron.

Резервное копирование базы данных

У нас есть три базы данных MySQL на нашем Linux-сервере с именем db-hackthesec-site, db-hackthesec-blog, db-hackthesec-app.

Войдите в свою базу данных MySQL или MariaDB и выполните запрос, чтобы создать пользователя базы данных db_user_backups для обработки резервных копий.3

GRANT LOCK TABLES, SELECT ON *.*, SHOW VIEW ON *.*, REPLICATION CLIENT ON *.* TO 'db_user_backups'@'%' IDENTIFIED BY '{COMPLEX-PASSWORD}';

Также выполните команду ниже, чтобы убедиться, что MySQL настроен на правильное восстановление хранимых процедур

SET GLOBAL log_bin_trust_function_creators = 1;

Настройка необходимой структуры каталогов и необходимых файлов:

# create backup directory with environment and log file
sudo mkdir /backups && cd /backups
sudo touch .env db-backup.sh db-backup.log
sudo chmod -R 775 /backups
sudo chmod -R g+s /backups
sudo chmod +x db-backup.sh

# add mysql backup user credentials into environment file
echo "export MYSQL_USER=db_user_backups" > /backups/.env
echo "export MYSQL_PASS={COMPLEX-PASSWORD}" >> /backups/.env

Откройте db-backup.sh с помощтю nano /backups/db-backup.sh и вставьте код в него, затем сохраните файл (Ctrl + X -> Y -> нажмите Enter).

DB_NAMES=( 'db-hackthesec-site' 'db-hackthesec-blog' 'db-hackthesec-app' ) #replace with your own database name(s)
BKUP_NAMES=()
BKUP_DIR="/backups"

# get total number of directories
total_dbs=${#DB_NAMES[@]}

# create backup file names
for (( i=0; i<${total_dbs}; i++ )); do
    BKUP_NAMES[$i]="`date +%Y%m%d%H%M`-backup-$${DB_NAMES[$i]}.sql.gz"
done

# get backup users credentials
source $BKUP_DIR/.env

# create backups
for (( i=0; i<${total_dbs}; i++ )); do
    # NOTE: --routines flag makes sure stored procedures are also backed up
    mysqldump --routines -u ${MYSQL_USER} -p${MYSQL_PASS} | gzip > ${BKUP_DIR}/${BKUP_NAMES[$i]}
done

Настройка Cronjob

Откройте crontab

crontab -e

Добавьте запись в crontab

0 0 * * * /usr/bin/env bash /backups/db-backup.sh &>> /backups/db-backup.log

Примечание. Во время тестирования вы можете установить cronjob для запуска каждую 1 минуту, а не как показано ниже

* * * * * /usr/bin/env bash /backups/db-backup.sh &>> /backups/db-backup.log

-или- каждые 5 минут (замените 5 на количество минут, которое вы хотите)

*/5 * * * * /usr/bin/env bash /backups/db-backup.sh &>> /backups/db-backup.log

 

Пожалуйста, не спамьте и никого не оскорбляйте. Это поле для комментариев, а не спамбокс. Рекламные ссылки не индексируются!
Добавить комментарий