Сценарий резервного копирования MySQL с уведомлением - PullRequest
0 голосов
/ 20 мая 2018

Весь этот уик-энд я искал в интернете в надежде найти множество скриптов, которые я могу отредактировать для достижения своей цели.

Я пытаюсь создать скрипт, который будет автоматически резервировать и сжимать все базы данных mysql дляОтдельный файл на локальном хосте, затем выведите список dbs, зарезервированных с размером каждого db в электронном письме

, используя Centos7 и последний mysql (mariaDB) (установленный май 2018) и mailx для почтового агента

это сценарий, который у меня есть ...

#!/bin/bash
# Custom script to backup all MySQL dbs on localhost
# and output db list and sizes to email

# Some Variables
myuser="root"
mypass="******"

# Get current date
# date +"%d-%m-%y %T"

# Get list of DBs to backup
mysql -u $myuser -p$mypass -e 'show databases' > dblist

# Cleanup dblist
sed -i '/information_schema/d' dblist
sed -i '/mysql/d' dblist
sed -i '/performance_schema/d' dblist
sed -i '/Database/d' dblist

for db in $(mysql -u root -p****** -e 'show databases');
do
if [[ "$db" != *Database* && "$db" != *schema* && "$db" != "mysql" && "$db" != *performance* && "$db" != "mysql" ]];
then
mysqldump -u root -p****** $db | gzip -c > /backups/WEB02DBs/$db.sql.gz
fi
done

echo $dblist | mail -s "WEB02 DBs Backed UP" myemail@email.com

если в конце я использую только $ db в эхо, он включает в себя только производительность db в теле письма, в основном все остальное, что япопробуйте получить список dbs в электронной почте. emtpy

часть размера db, которую я просто не могу понять, либо есть какая-то синтаксическая ошибка, либо она ничего не помещает в электронную почту, даже если я вывожу результаты вфайл, в котором тело письма пусто

первые несколько переменных - это я пытаюсь использовать $ myuser и $ mypass в скрипте вместо того, чтобы вводить root / пароль для each function

тогда я также могу получить список dbs и "вручную" удалить системные базы данных

Может кто-нибудь помочь мне заставить это работать?

1 Ответ

0 голосов
/ 21 мая 2018

Полагаю, вам нужно что-то вроде этого

for db in $(mysql -u root -p****** -e 'show databases');
do
if [[ "$db" != *Database* && "$db" != *schema* && "$db" != "mysql" && "$db" != *performance* && "$db" != "mysql" ]];
then
    mysqldump -u root -p****** $db | gzip -c > /backups/WEB02DBs/$db.sql.gz && \
    printf '%s backed up\n' "$db"
fi
done | mail -s "WEB02 DBs Backed UP" myemail@email.com

, поэтому все вывод отправляется на электронную почту.

Вы не должны включать пароли в скрипты.

...