MySQL 带通知的备份脚本

MySQL backup script with notification

整个周末我都在网上搜索,希望找到各种我可以编辑的脚本来实现我的目标。

我正在尝试创建一个脚本,它将自动备份和压缩所有 mysql 数据库到本地主机上的单个文件,然后在电子邮件中输出备份的数据库列表以及每个数据库的大小

使用 Centos7 和最新的 mysql(mariaDB)(2018 年 5 月安装)和 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,它只会在电子邮件正文中包含性能数据库,基本上我尝试在电子邮件中获取数据库列表的任何其他内容都会变成 emtpy

db 大小部分我无法正确理解,要么存在一些语法错误,要么它没有将任何内容放入电子邮件中,即使我将结果输出到一个文件中,电子邮件的正文是空的

前几个变量是我尝试在脚本中使用 $myuser 和 $mypass 而不是为每个函数放置 root/password

然后我也可以获得数据库列表,并且"manually"删除系统数据库

谁能帮我解决这个问题?

我猜你想要这样的东西

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

所以所有输出到电子邮件。

您不应在脚本中包含密码。