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

Создайте папку для хранения скрипт, в данном примере я буду использовать /scripts:

sudo mkdir /scripts

Создайте файл в данной папке и назовите его mysql-backup.sh :

sudo nano /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 настраиваемых опций. Главные из которых поля USER и PASSWORD. Они должны быть изменены на логин и пароль пользователя имеющего достаточный доступ для создания бэкапа MySQL.

Как только вы закончите редактирование скрипта, выполните следующую команду, чтобы сделать скрипт исполняемым::

sudo chmod +x mysql-backup.sh

Теперь вы можете протестировать скрипт для бэкапа, запустив его:

sudo ./mysql-backup.sh

Шаг 2: Создаим автоматическое выполнения через Crontab

Сейчас мы запланируем создание бэкапа ежедневно, для этого добавим наш скрипт в crontab от имени root.

# sudo crontab -e

Добавить данную строку в конце файла:

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

Сохраните файл и дождитесь выполнения скрипта. Вы можете просмотреть ошибки при выполнении в файле /var/log/mysql-backup.log. Если вы проверили и скрипт отработал хорошо, вы можете удалить данный текст с crontab  >> /var/log/mysql-backup.log 2>&1

Вывод успешно сделанного бэкапа с включенным GZIP сжатием:

Выводы

Это всё. Теперь у вас ежедневный бэкап ваших баз. По умолчанию опции скрипта создают неограниченное количество бэкапов, вы можете изменить допустимое количество для хранения изменив опцию DAYS_TO_KEEP если вы хотите сохранить место на диске.