Linux下通过电子邮件自动备份数据库

Linux下通过电子邮件自动备份数据库

By lincanbin at 2017-04-24
0人收藏 • 3650人看过

自动数据库备份,当然不能备份到同一个服务器上,如果只有一个服务器那怎么办呢?

思前想后想到了备份到邮箱里。

那么可以这么做:

1、编辑mysql.cnf,在行尾加入:

[mysqldump]
user = your_backup_user_name
password = your_backup_password

填入一个设置好只有要备份的数据库的只读权限、用来备份数据库的MySQL账号和对应密码。


2、设置mail的账号密码,这里可以参考:

https://www.94cb.com/t/3952


3、编写定时脚本,这里新建一个carbon_backup.sh

mysqldump carbon --ignore-table=carbon.carbon_dict > /www/carbon.sql #忽略字典表
zip /www/carbon_database.zip /www/carbon.sql
rm -f carbon.sql
mail -s "$(date) Database Backup for Carbon Forum"  i@lincanbin.com < /www/carbon_database.zip
#uuencode /www/carbon_database.zip /www/carbon_database.zip | mail -s "$(date) Database Backup for Carbon Forum"  i@lincanbin.com
rm -f /www/carbon_database.zip
echo "$(date) Database Backup Success"

为了安全,第2行你也可以这么写:

zip -P 你自己设置的压缩文件密码 /www/carbon_database.zip /www/carbon.sql

需要注意的是使用第5行被注释掉的方法发送附件邮件需要uuencode命令,没有的注意自己装,CentOS可以:

yum install sharutils

4、添加定时任务:

crontab -e

添加:

30 23 * * * /www/carbon_backup.sh >> /www/backup_sql.log 2>&1

这样就会每天23:30自动备份数据库并发送到你的邮箱。



————————————————


20180510补充:

实测.tar.bz2压缩率远胜于zip格式,如果可以接受压缩时间更久,可以考虑用.tar.bz2。

这是最新修改过的shell:

/www/wdlinux/mysql/bin/mysqldump --single-transaction --single-transaction--skip-extended-insert --quick carbon --ignore-table=carbon.carbon_dict > /www/carbon.sql #忽略字典表
# --quick 该选项用于转储大的表。它强制mysqldump从服务器一次一行地检索表中的行而不是检索所有行并在输出前将它缓存到内存中。
# --skip-extended-insert忽略刚插入的记录
tar -jcvf /www/carbon_database.tar.bz2 -P /www/carbon.sql
rm -f /www/carbon.sql
#mail -s "$(date) Database Backup for Carbon Forum - carbon_database.tar.bz2"  i@lincanbin.com < /www/carbon_database.tar.bz2
# 以附件形式发送备份
echo "$(date "+%Y-%m-%d %H:%M:%S") Database Backup for Carbon Forum正文" | mail -s "$(date "+%Y-%m-%d %H:%M:%S") Database Backup for Carbon Forum" -a /www/carbon_database.tar.bz2 "i@lincanbin.com"
#uuencode /www/carbon_database.zip /www/carbon_database.zip | mail -s "$(date) Database Backup for Carbon Forum"  i@lincanbin.com
rm -f /www/carbon_database.tar.bz2
echo "$(date "+%Y-%m-%d %H:%M:%S") Database Backup Success"


12 个回复 | 最后更新于 2017-05-01
后宫学长
2017-04-24
#1

非常好!刚想着备份呢。

我的想法是本地PC下载数据包作为备份,刚好你的教程可以参考下。


其实还需要把网站目录也备份下。


额,有个小问题,我自己修改了mariadb10的端口,命令里也正确显示了新的端口,那么为毛网站依旧工作正常?网站配置文件不需要修改端口?还是哪里出了什么问题?

感觉就跟没修改端口一样。

mr_zhang
2017-04-24
#2

这个很实用,学习了。bt.com 主机面板可以设置自动备份到例如七牛,阿里的云存储


----------

主机公园| www.hostpark.cn 免备案主机


lincanbin
2017-04-24
#3

回复#1 @后宫学长 :

重启MariaDB了吗?

lincanbin
2017-04-24
#4

回复#1 @后宫学长 :

文件备份也可以这么做,每天凌晨把前一天产生的上传文件跟图片还有头像打包,发送到邮箱。

因为图片跟文件都是按日期归类的,所以这么做也很简单。

后宫学长
2017-04-25
#5

回复#3 @lincanbin :

重启了几遍,还重启了整个VPS。

确认新端口已成功修改,不过CF和Typecho依旧正常工作。(还没改它们的端口呢!)

CF配置文件,改新端口或者旧端口都不影响其工作。

lincanbin
2017-04-25
#6

回复#5 @后宫学长 :

大概是因为神秘的PDO是通过编译驱动运行的吧。

lincanbin
2017-04-25
#7

blob.png

收到的邮件可能长这样,实际上还是个zip文件,下载后用WinRAR打开即可。

lincanbin
2017-04-27
#8

对了,今天有人反馈了无法定时备份。

如果没办法备份的朋友记得检查自己那个sh文件的权限,记得给执行权限,怕麻烦就777吧。

后宫学长
2017-04-30
#9

回复#8 @lincanbin :

通常给执行权限即可。

chmod +x carbon_backup.sh

就酱。

lincanbin
2017-04-30
#10

回复#9 @后宫学长 :

执行权限都给了,干脆全给了。

后宫学长
2017-05-01
#11

回复#4 @lincanbin :

上面说的MariaDB端口问题,

原来localhost走的是socket通道(CF默认是localhost),127.0.0.1才走的TCP/IP通道,这才受端口影响,我说我怎么改端口都没用呢。

我都差点怀疑人生了。


原来是这样子的。

lincanbin
2017-05-01
#12

回复#11 @后宫学长 :


登 录


现在注册

QQ  登 录    Weibo  登 录    GitHub  登 录