Skip to content

Instantly share code, notes, and snippets.

@zkelo
Last active March 21, 2022 20:55
Show Gist options
  • Save zkelo/f82bd7450928f8b243832a1b4519939b to your computer and use it in GitHub Desktop.
Save zkelo/f82bd7450928f8b243832a1b4519939b to your computer and use it in GitHub Desktop.
#!/usr/bin/env bash
# Переменные
## Основные
### Имя пользователя MySQL
user=backup
### Пароль пользователя MySQL
password=backup
### Путь к папке (относительно скрипта), в которой сохранится бекап
storage=$(pwd -P)/db_backup
## Переменные для RClone
### Название удалённого хранилища
remote=Yandex_Disk
### Название папки в удалённом хранилище
remote_folder="Резервные копии/БД"
# Скрипт
initial_dir=$(pwd -P)
databases=$(mysql -u $user -p$password -e "SHOW DATABASES" -N)
temp_dirname=tmp
mkdir -p $storage/$temp_dirname
rm -rf $storage/$temp_dirname/*
for dbname in ${databases[@]}
do
# Создание подпапки с названием базы
db_folder=$storage/$temp_dirname/$dbname
mkdir $db_folder
# Структура
mysqldump -u $user -p$password --routines --triggers --single-transaction --no-data $dbname > $db_folder/"$dbname"_DDL.sql
# Данные
mysqldump -u $user -p$password --routines --triggers --single-transaction -t $dbname | sed 's$),($),\n($g' > $db_folder/"$dbname"_DATA.sql
done
current_date=$(date "+%F %T")
cd $storage/$temp_dirname && zip -9 -r ../backup"$current_date".zip . && cd $initial_dir
rm -rf $storage/$temp_dirname
find . -name "*.zip" -type f -mtime +7 -exec rm -f {} \;
rclone sync $storage $remote:"$remote_folder"
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment