Linux自动导出sql数据并发送邮件备份

数据无价,自己的网站虽然不算个啥,但保护好自己的数据却依然重要。

为了方便,弄了一个脚本,自动导出sql数据,自动打包,自动发邮件,弄个定时任务,一切变得轻松起来。

将下面的内容保存为yourname.sh,放到任意位置,添加定时任务即可,怎么弄定时任务?请移步《Linux使用Crontab定时执行指定任务》。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
#!/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,具体提示如下:

1
2
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用户配置:

1
2
3
host=localhost
user=root
password='RootPassword'

之后使用导出数据库命令:

1
mysqldump --defaults-extra-file=/etc/my.cnf database > database.sql

或使用导入数据库命令:

1
mysql --defaults-extra-file=/etc/my.cnf database < database.sql

2、自动备份脚本也更新如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
#!/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