Linux自动导出sql数据并发送邮件备份
数据无价,自己的网站虽然不算个啥,但保护好自己的数据却依然重要。
为了方便,弄了一个脚本,自动导出sql数据,自动打包,自动发邮件,弄个定时任务,一切变得轻松起来。
将下面的内容保存为yourname.sh,放到任意位置,添加定时任务即可,怎么弄定时任务?请移步《Linux使用Crontab定时执行指定任务》。
#!/bin/sh
#要备份网站的数据库信息
mysql_user1="sql_user_1"
mysql_user2="sql_user_2"
mysql_name1="sql_name_1"
mysql_name2="sql_name_2"
mysql_pwd1="sql_pw_1"
mysql_pwd2="sql_pw_2"
#构建数据库文件名称
d=`date "+%Y-%m-%d"`
BackName1=sql_name_1_$d
BackName2=sql_name_2_$d
#备份数据库存放路径
BackPath=/root/SQL/
#执行导出数据库
mysqldump -u${mysql_user1} -p${mysql_pwd1} $mysql_name1 > $BackPath$BackName1.sql
mysqldump -u${mysql_user2} -p${mysql_pwd2} $mysql_name2 > $BackPath$BackName2.sql
#压缩数据库包
#打包/root目录下的SQL文件夹,SQL目录需要手动建立
tar -czvPf mysql_$d.tar.gz -C /root SQL
#压缩后删除备份目录中的sql文件
rm $BackPath*.sql
#发送邮件的标题和内容
title="MySQL-Backup-$d"
content="Hello,Master!MySQL backup has been completed!Backup Time:$d"
#用自带的mail发邮件,需要配置/etc/mail.rc,在最后添加smtp信息,需要使用25端口
echo "$content" | mail -s "$title" -a /root/mysql_$d.tar.gz your@mail.com
#退出当前脚本
exit
更新:
最近发现在使用上面的脚本时,存在Warning和Error,具体提示如下:
mysqldump: [Warning] Using a password on the command line interface can be insecure.
mysqldump: Error: 'Access denied; you need (at least one of) the PROCESS privilege(s) for this operation' when trying to dump tablespaces
最简单的解决方法:
1、在SQL配置文件/etc/my.cnf中的[client]添加root用户配置:
host=localhost
user=root
password='RootPassword'
之后使用导出数据库命令:
mysqldump --defaults-extra-file=/etc/my.cnf database > database.sql
或使用导入数据库命令:
mysql --defaults-extra-file=/etc/my.cnf database < database.sql
2、自动备份脚本也更新如下:
#!/bin/bash
# 数据库名
mysql_name1="SQL_NAME1"
mysql_name2="SQL_NAME1"
# 构建导出数据库文件名称
d=`date "+%Y-%m-%d"`
BackName1=SQL_NAME1_$d
BackName2=SQL_NAME2_$d
# 备份数据库存放路径,目录手动创建
BackPath=/root/SQL/
mysqldump --defaults-extra-file=/etc/my.cnf $mysql_name1 > $BackPath$BackName1.sql
mysqldump --defaults-extra-file=/etc/my.cnf $mysql_name2 > $BackPath$BackName2.sql
#打包/root目录下的SQL文件夹,SQL目录需要手动建立
tar -czvPf cloudcone_mysql_$d.tar.gz -C /root SQL
#压缩后删除备份目录中的sql文件
rm $BackPath*.sql
#发送邮件的标题和内容
title="MySQL-Backup-$d"
content="Hello,Master!MySQL backup has been completed!Backup Time:$d"
#用自带的mail发邮件,需要配置/etc/mail.rc,在最后添加smtp信息,需要使用25端口
echo "$content" | mail -s "$title" -A /root/mysql_$d.tar.gz -a "From: MyName <send@mail.com>" your@mail.com
#退出当前脚本
exit