22.11.2020 0 min to read

Простой скрипт резервного копирования всех баз данных MySQL

Category : Статьи

Задача: два 8.0.22 MySQL Community Server в среде Oracle Linux Server release 7.9, настроена Master-Slave репликация.  ВАЖНО ЗНАТЬ, что репликация это не резервное копирование, необходимо настроить на слейве резервирование всех баз.  В среде с небольшими базами данных и наличием технологического окна для резервирования можно воспользоваться mysqldump.

Скрипт:

  • автоматически вычисляет список баз данных, резервирует их, кроме указанных в исключении
  • удаляет бэкапы старше 28 дней
  • ведет лог и сохраняет в лог список установленных пакетов

#!/bin/bash

TIMESTAMP=$(date +"%F")
BACKUP_DIR="/srv/sqlbackup/$TIMESTAMP"
MYSQL_USER="backupuser"
MYSQL=/usr/bin/mysql
MYSQL_PASSWORD="PASSW0RD"
MYSQLDUMP=/usr/bin/mysqldump
HOST=127.0.0.1

/bin/find '/srv/sqlbackup/' -type d -ctime +28 -exec rm -rf {} \;
/bin/mkdir -p "$BACKUP_DIR"

/usr/bin/rpm -qa >> "$BACKUP_DIR"/rpm-list.txt 

databases=`$MYSQL --user=$MYSQL_USER -p$MYSQL_PASSWORD -e "SHOW DATABASES;" | grep -Ev \
"(Database|information_schema|performance_schema)"`
  for db in $databases; 
    do
  $MYSQLDUMP --force --routines --triggers --opt -h $HOST --user=$MYSQL_USER -p$MYSQL_PASSWORD --databases $db | gzip > "$BACKUP_DIR/$db.gz"