- LINUX
- GIT
- DOCKER
- DOCKERFILE
- DOCKER-COMPOSE
- DOCKERSWARM
- KUBERNETES
- ANSIBLE
- BASH
- 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