Найти тему
Fekrado

Как запланировать резервное копирование всех баз данных MySQL/MariaDB в Ubuntu 18

Оглавление

В этом руководстве вы узнаете, как создать скрипт который будет выполнять резервное копирование всех ваших баз данных MySQL. Вы также узнаете, как настроить запланированное задание для ежедневного запуска сценария резервного копирования.

Шаг 1: Создайте скрипт резервного копирования

Создайте папку для хранения вашего резервного скрипта. Я предлагаю / scripts для этого примера:

sudo mkdir /scripts

Создайте файл с именем mysql-backup.sh в папке scripts: sudo vim /scripts/mysql-backup.sh Добавьте следующий код в файл и сохраните его:


#!/bin/bash

#----------------------------------------

# OPTIONS

#----------------------------------------

USER='root' # MySQL User

PASSWORD='webdev' # MySQL Password

DAYS_TO_KEEP=0 # 0 to keep forever

GZIP=1 # 1 = Compress

BACKUP_PATH='/backups/mysql'

#----------------------------------------



# Create the backup folder

if [ ! -d $BACKUP_PATH ]; then

mkdir -p $BACKUP_PATH

fi



# Get list of database names

databases=`mysql -u $USER -p$PASSWORD -e "SHOW DATABASES;" | tr -d "|" | grep -v Database`



for db in $databases; do



if [ $db == 'information_schema' ] || [ $db == 'performance_schema' ] || [ $db == 'mysql' ] || [ $db == 'sys' ]; then

echo "Skipping database: $db"

continue

fi



date=$(date -I)

if [ "$GZIP" -eq 0 ] ; then

echo "Backing up database: $db without compression"

mysqldump -u $USER -p$PASSWORD --databases $db > $BACKUP_PATH/$date-$db.sql

else

echo "Backing up database: $db with compression"

mysqldump -u $USER -p$PASSWORD --databases $db | gzip -c > $BACKUP_PATH/$date-$db.gz

fi

done



# Delete old backups

if [ "$DAYS_TO_KEEP" -gt 0 ] ; then

echo "Deleting backups older than $DAYS_TO_KEEP days"

find $BACKUP_PATH/* -mtime +$DAYS_TO_KEEP -exec rm {} \;

fi


В начале этого скрипта вы заметите 5 настраиваемых параметров. Основные из них, которые вам нужно будет отредактировать - это ПОЛЬЗОВАТЕЛЬ и ПАРОЛЬ. Это должно быть изменено на пользователя и пароль MySQL, который имеет разрешения на создание списка и резервное копирование баз данных. После того, как вы изменили параметры, сделайте сценарий исполняемым с помощью следующей команды:

sudo chmod +x mysql-backup.sh Теперь вы можете протестировать скрипт резервного копирования, выполнив: sudo ./mysql-backup.sh

Шаг 2. Создание запланированной задачи в crontab

Теперь мы запланируем ежедневный запуск скрипта резервного копирования. Мы сделаем это, добавив вызов скрипта mysql-backup.sh в cron. Выполните следующую команду, чтобы добавить скрипт в crontab:

sudo crontab -e

Теперь добавьте к последней строке файла следующее:

@daily sh /scripts/mysql-backup.sh >> /var/log/mysql-backup.log 2>&1

Теперь у вас должна быть ежедневная резервная копия всех ваших баз данных MySQL.