带有通知的MySQL备份脚本

时间:2018-05-20 20:14:24

标签: mysql bash shell centos7 mailx

我整个周末一直在搜索互联网,希望找到各种各样的脚本,我可以编辑这些脚本来实现我的目标。

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

使用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,它只包含电子邮件正文中的性能数据库,基本上我尝试获取电子邮件中的dbs列表的任何其他内容都会显示emtpy

数据库大小部分我可能无法正确,或者有一些语法错误,或者它没有在电子邮件中放入任何内容,即使我将结果输出到电子邮件正文为空的文件

前几个变量是我试图在脚本中使用$ myuser和$ mypass而不是为每个函数添加root /密码

然后我也可以获得一个dbs列表,并“手动”删除系统DB

任何人都可以帮我解决这个问题吗?

1 个答案:

答案 0 :(得分:1)

我想你想要这样的东西

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

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

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