[BASH] Скрипт резервного копирования на backblaze.com

Цукер

Сам себе призедент
Регистрация
5 Мар 2008
Сообщения
410
Реакции
379
Скрипт бэкапа.
В комплекте скрипт под дамп MySQL и PostgreSQL
Тестировалось на Ubuntu и Debian
В скриптах нужно исправить только путь к папке которую паковать и данные для подключения к БД
Все вопосы можно задать в репозитарии \ в топике или в личку

Линк на репозитарий:
Для просмотра ссылки Войди или Зарегистрируйся
 
Готовый скрипт под перкону 2.4 + qpress и mariadb / Centos 7:
юзер БД bk_percona - с правами как в инструкции перконы по установке

Бэкап (горячий)
/percona_backup.sh

Код:
#!/bin/bash
path="/_backups/percona/comp/";
timestamp=$(date "+%y-%m-%d_%H-%M");
bk="${path}${timestamp}";

if [ ! -d "$path" ]; then
  # Control will enter here if $DIRECTORY doesn't exist.
  echo "Папка $path не существует"
  echo ""
  exit
fi

echo "Бэкап mariadb в $bk"
echo ""

mkdir $bk;
innobackupex --user=bk_percona --password=mypassword --compress --compress-threads=4 --no-timestamp $bk/bk/ 2>&1|tee $bk/backup.log|egrep "ERROR|completed OK!";

echo "Готово"

Рестор
/percona_restore.sh

Код:
#!/bin/bash
timestamp=$1
path="/_backups/percona/comp/"
bk=$path$timestamp

if [ ! -d "$bk" ]; then
  # Control will enter here if $DIRECTORY doesn't exist.
  echo "Папка $bk не существует"
  echo ""
  exit
fi

echo "Восстановить в $bk"
echo ""

echo "Распаковать";
innobackupex --decompress $bk/bk/ 2>&1|tee $bk/decompress.log|egrep "ERROR|completed OK!";

echo "Подготовить";
innobackupex --apply-log $bk/bk/ 2>&1|tee $bk/prepare.log|egrep "ERROR|completed OK!";

systemctl stop mariadb;

echo "Сорханяем старую версию базы";
rm -rf /tmp/mysql;
mkdir /tmp/mysql;
mv /var/lib/mysql/* /tmp/mysql/;

echo "Копируем бекап";
innobackupex --move-back $bk/bk/ 2>&1|tee $bk/move.log|egrep "ERROR|completed OK!";

echo "Восстанавливаем права и запускаем mariadb"
chown -R mysql:mysql /var/lib/mysql;
systemctl start mariadb;

echo "Готово";

Скрит для крона: бэкап по расписанию + ротация бэкапов
/percona_rotate.sh

Код:
#!/bin/bash
path="/_backups/percona/comp/";
bk="${path}";

# Срок хранения бэкапов
ROTATE_PERIOD=14

if [ ! -d "$bk" ]; then
  # Control will enter here if $DIRECTORY doesn't exist.
  echo "Папка $bk не существует"
  echo ""
  exit
fi

# делаем бэкап
. /<путь к скрипту>/percona_backup.sh

# Ротация старых бэкапов
FILE_COUNT=`find $bk -maxdepth 1 -type d | wc -l`;

echo "Кол-во старых файлов: $FILE_COUNT";
if [ $FILE_COUNT -gt $ROTATE_PERIOD ]; then
  echo "удаление";
  find $bk -maxdepth 1 -type d -mtime +$ROTATE_PERIOD -exec rm -rf {} \;
fi

echo "";
echo "Ротация завершена";
echo "";


Добавляем в crontab (пример)

Код:
0 6 * * * user /<путь к скрипту>/percona_rotate.sh >> /var/log/percona/backup.cron.log
 
Последнее редактирование:
Скрипт бэкапа.
В комплекте скрипт под дамп MySQL и PostgreSQL
Тестировалось на Ubuntu и Debian
В скриптах нужно исправить только путь к папке которую паковать и данные для подключения к БД
Все вопосы можно задать в репозитарии \ в топике или в личку

Линк на репозитарий:
Для просмотра ссылки Войди или Зарегистрируйся

Можешь перезалить?
 
Назад
Сверху