ШПАРГАЛКИ
CI/CD
KUBERNETES
  • DOCKERFILE
  • DOCKER-COMPOSE
  • JENKINSFILE
  • JENKINS-PIPELINE
  • GITLAB CI/CD
  • GROOVIE
  • INSTALL
  • PODS
  • INGRESS

Как бэкапить и восстанавливать базы данных MySQL / PostgreSQL

Сегодня расскажу, как бэкапить все базы в MySQL и PostgreSQL. А так же, как их потом восстанавливать.

MySQL

Бэкап.

Создаем папку и в ней файлик .env:

BACKUP_FOLDER="/path/to/backup"
MYSQL_USER="USERNAME"
MYSQL_PASSWORD="PASSWORD"
NUMBER_OF_DAYS=15
MYSQL=/usr/bin/mysql
MYSQLDUMP=/usr/bin/mysqldump

А вот и сам скрипт, который будет бэкапить все БД в MySQL:

#! /bin/bash

# Чтение переменных из файла .env
export $(xargs <.env)

# Определяем дату для бэкапа
TIMESTAMP=$(date +"%F")

# И место, куда будем бэкапить
BACKUP_DIR="$BACKUP_FOLDER/$TIMESTAMP"

# Создаем директорию для бэкапа 
mkdir -p "$BACKUP_DIR"

# Полчаем список БД для бэкапа 
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 --opt --user=$MYSQL_USER -p$MYSQL_PASSWORD --databases $db | gzip > "$BACKUP_DIR/$db.gz"
done

# Удаляем старые бэкапы
find $BACKUP_FOLDER/* -mtime +$NUMBER_OF_DAYS -print0 | xargs -0 rm -rf

Восстановление.

Для начала нужно разархивировать наш архив с бэкапом. А потом ввести в терминал следующее:

mysql -u USERNAME -p -h localhost NEW_DATABASE < my_backup_database.sql

PostgreSQL

Перед бэкапом нам нужно провести некоторые манипуляции с конфигом PostgreSQL.

В Ubuntu он находится тут: /etc/postgresql/13/main/pg_hba.conf

Находим строку:

# Database administrative login by Unix domain socket
local   all             postgres                                peer

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

local   all             BACKUP_USER                             md5

Сохраняем. И перезагружаем сервис БД.

service postgresql restart

Бэкап.

Создаем папку и в ней файлик .env:

backup_dir="/path/to/backup/postgresql/"
number_of_days=15
USER="USERNAME"
PASSWORD="PASSWORD"

И скрипт, который будет бэкапить все БД:

#!/bin/bash

# Дата создания бэкапа
backup_date=`date +%d-%m-%Y`

# Экспортируем переменные в окружение
export PGUSER=$USER
export PGPASSWORD=$PASSWORD

# Получаем список баз
databases=`psql -l -t  | cut -d'|' -f1 | sed -e 's/ //g' -e '/^$/d'`

# Бэкапим базы
for i in $databases; do  if [ "$i" != "postgres" ] && [ "$i" != "template0" ] && [ "$i" != "template1" ] && [ "$i" != "template_postgis" ]; then    
    echo Бэкапим $i в $backup_dir$i\_$backup_date.sql    
    pg_dump $i > $backup_dir$i\_$backup_date.sql
    bzip2 $backup_dir$i\_$backup_date.sql
  fi
done

# Удаляем бэкапы старше number_of_days дней
find $backup_dir -type f -prune -mtime +$number_of_days -exec rm -f {} \;

Восстановление.

Восстанавливать все базы сразу нам не нужно. Обычно, восстанавливают по базово. Что бы восстановить, сначала разархивируйте нужную базу из созданных ранее архивов. Что бы получился файлик с расширением .sql. А потом введите в терминале следующее:

psql -h localhost -U USERNAME -p 5432 NEW_DATABASE < my_backup_database.sql

 

Оцените статью

Еще никто не оставил комментарий. Будьте первым!