linux mysql 邮件_Linux下每天自动备份Mysql数据库发送到指定Email

网站最重要的是什么?如果网站数据突然丢失 估计你会崩溃 这篇文章主要介绍 在Linux下每天自动备份Mysql数据库,并且自动发送到你指定的邮箱里,这样你再也不会为丢失数据烦恼啦。

一、安装 postfix 并配置

二、安装mutt并配置mutt

mutt,它是一款基于文字界面的邮件客户端,非常小巧,但功能强大,可以用它来读写,回复保存和删除你的邮件,能在linux命令行模式下收发邮件附件

1、安装mutt

首先确定你的系统是否已经安装了mutt

[root@localhost ~]# rpm -qa |grep mutt

mutt-1.5.20-2.20091214hg736b6a.el6_1.1.i686

我已经安装过了 如果你还没有安装 那就用yum一下吧

[root@localhost ~]# yum install -y mutt

2、配置

这里这一绕过的哦 不需要进行任何配置就可以正常使用的哦

如果你想配置一些额外信息的话 可以了解一下

默认 /root 下没有 .muttrc 文件 执行下面命令得到.muttrc文件

[root@localhost ~]# find / -name Muttrc/etc/Muttrc

[root@localhost~]# cp /etc/Muttrc /root/.muttrc

如果你想自定义发件人信息,需要进行如下设置

set use_from=yesset from=root@medesky.meset realname="medesky"

安装完mutt后,在/usr/share/doc/mutt* 下有一份很好的手册,可以看一下

3、发送语法

mutt [-hnpRvxz][-a][-b][-c][-f][-F][-H][-i][-m] [-s][邮件地址]

参 数:-a 在邮件中加上附加文件。-b 指定密件副本的收信人地址。-c 指定副本的收信人地址。-f 指定要载入的邮件文件。-F 指定mutt程序的设置文件,而不读取预设的.muttrc文件。-h 显示帮助。-H 将指定的邮件草稿送出。-i 将指定文件插入邮件内文中。-m 指定预设的邮件信箱类型。-n 不要去读取程序培植文件(/etc/Muttrc)。-p 在mutt中编辑完邮件后,而不想将邮件立即送出,可将该邮件暂缓寄出。-R 以只读的方式开启邮件文件。-s 指定邮件的主题。-v 显示mutt的版本信息以及当初编译此文件时所给予的参数。-x 模拟mailx的编辑方式。-z 与-f参数一并使用时,若邮件文件中没有邮件即不启动mutt。

如:

mutt me@medesky.me -s "数据备份" -a /home/backup/test.sql < /root/readme.txt

或者

echo"test" | mutt me@medesky.me -s "数据备份" -a /home/backup/test.sql

如果要发送多个附件,需要在每个附件前加 -a 参数

三、automysqlbackup.sh

1、创建automysqlbackup.sh

#!/bin/bash

#Script:automysqlbackup.sh

#Version:Beta1.0#author:www.weibo.com/100306117#date:2013-06-15#以下配置信息请自己修改

mysql_user="root"#MySQL备份用户

mysql_password=""#MySQL备份用户的密码

mysql_host="localhost"#要备份的主机,一般为localhost

mysql_port="3306"#MySQL端口号,一般为3306

backup_db_arr=("db1" "db2") #要备份的数据库名称,多个用空格分开隔开 如("db1" "db2" "db3")

backup_location=/databackup/mysql #备份数据存放位置,末尾请不要带"/",此项可以保持默认,程序会自动创建文件夹

expire_backup_delete="ON"#是否开启过期备份删除 ON为开启 OFF为关闭

expire_days=3#过期时间天数 默认为三天,此项只有在expire_backup_delete开启时有效

adminmail="me@medesky.me"#接收备份数据的邮箱 也就是管理员的邮箱

subject_msg="MYSQL data backup"#备份邮件主题

subject_msg_error="ERROR:MYSQL data backup"#备份ERROR邮件主题

#以下配置请保持默认不要修改

backup_time=`date +%Y%m%d%H%M` #定义备份详细时间

backup_cache_dir=$backup_location/cache #备份缓存文件夹全路径

backup_data_dir=$backup_location/data #备份文件夹全路径

backup_data_filename=$backup_data_dir/$backup_time.sql.tar.gz #备份文件的名称 包括路径

backup_log_dir=$backup_location/log #备份日志文件夹全路径

backup_log_mailcontent=$backup_log_dir/mailcontent.log #邮件内容缓存文件全路径

welcome_msg="Welcome to use auto MySQL backup tools!"#欢迎语

#写入欢迎信息

`mkdir-p $backup_log_dir`

`echo $welcome_msg>$backup_log_mailcontent`

#判断MYSQL是否启动,mysql没有启动则备份退出

mysql_ps=`ps -ef | grep mysql | wc -l`

mysql_listen=`netstat -an | grep LISTEN | grep $mysql_port | wc -l`if [ [$mysql_ps == 0] -o [$mysql_listen == 0] ]; then

`echo"ERROR:MySQL is not running! backup stop!" >>$backup_log_mailcontent`

`mutt $adminmail-s "$subject_msg_error"

exit

fi

#连接到mysql数据库,无法连接则备份退出

mysql-h$mysql_host -P$mysql_port -u$mysql_user -p$mysql_password <

use mysql;select host,user from user where user='root' and host='localhost';

exit

end

flag=`echo $?`if [ $flag != "0"]; then

`echo"ERROR:Can't connect mysql server! backup stop!" >>$backup_log_mailcontent`

`mutt $adminmail-s "$subject_msg_error"

exitelse#判断有没有定义备份的数据库,如果定义则开始备份,否则退出备份if [ "$backup_db_arr" != ""];then

#dbnames=$(cut -d ',' -f1-5$backup_database)

#echo"arr is (${backup_db_arr[@]})"

for dbname in${backup_db_arr[@]}do`mkdir-p $backup_cache_dir`

`mysqldump-h$mysql_host -P$mysql_port -u$mysql_user -p$mysql_password $dbname > $backup_cache_dir/$dbname$backup_time.sql`

flag=`echo $?`if [ $flag != "0"];then

`echo"database $dbname backup fail!" >>$backup_log_mailcontent`

fi

doneelse`echo"ERROR:No database to backup! backup stop" >>$backup_log_mailcontent`

`mutt $adminmail-s "$subject_msg_error"

exit

fi

#如果开启了删除过期备份,则进行删除操作

backup_data_num=`ls $backup_data_dir | wc -l`if [ "$expire_backup_delete" == "ON" -a $backup_data_num!=0];then

`find $backup_data_dir-type f -ctime +$expire_days -exec rm -rf {} \;`

fi

#缓存备份目录打包放到数据备份目录 删除缓存备份目录

backup_cache_num=`ls $backup_cache_dir | wc -l`if [ $backup_cache_num!=0];then

`mkdir-p $backup_data_dir`

`tar zcPf $backup_data_filename $backup_cache_dir/`

`rm-rf $backup_cache_dir`else`echo"All database backup fail!" >>$backup_log_mailcontent`

`mutt $adminmail-s "$subject_msg_error"

exit

fi

`echo"All database backup success! Thank you!" >>$backup_log_mailcontent`

`mutt $adminmail-s "$subject_msg" -a $backup_data_filename

exit

fi

直接创建一个automysqlbackup.sh文件将上面内容复制到里面就可以了 如果你连这步都不想做的话 你可以选择下载这个脚本哈

关于这个脚本如果有什么bug之类的或需要改进的地方 欢迎提意见

脚本顶端一部分需要根据你自己的情况进行设定 可别忘记这步哈

2、给automysqlbackup.sh设定可执行的权限

[root@localhost ~]# chmod 755 /root/automysqlbackup.sh

如果不设定可执行权限的话 脚本是不能运行的 这你懂的哈

3、执行脚本

测试脚本是否可以正常运行

[root@localhost ~]# ./automysqlbackup.sh

如果出现

/bin/bash^M: bad interpreter: 没有那个文件或目录

四、利用crontab 实现自动备份

crontab 是一个实现周期性计划任务的工具

1、查看crond当前状态

[root@localhost ~]# service crond

用法:/etc/init.d/crond {start|stop|status|restart|condrestart|try-restart|reload|force-reload}

[root@localhost~]# service crond status

crond (pid2900) 正在运行...

如果没有运行 执行下面的命令进行开启crond

[root@localhost ~]# service crond start

2、添加计划任务

现在我们就可以将automysqlbackup.sh的脚本加入周期性计划任务里

使用如下命令 执行crontab -e edit 可以查看这个命令支持的一些参数 其实是一个错误的命令

[root@localhost ~]# crontab -e edit

crontab: usage error: no arguments permitted afterthisoption

usage: crontab [-u user] file

crontab [-u user] [ -e | -l | -r ]

(default operation is replace, per 1003.2)-e (edit user's crontab)

-l (list user's crontab)

-r (delete user's crontab)

-i (prompt before deleting user's crontab)

-s (selinux context)

[root@localhost~]# crontab -e

现在增加如下内容 一行为一个周期性计划任务

27 02 * * * /root/automysqlbackup.sh

这样就实现了每天02:27自动备份mysql数据库并发送到你指定的Email里

关于计划任务格式说明 这里简单提一下吧

计划任务规则格式

原则:

a)知道的时间填上,不知道写*

b)连续值用 - ,不连续值用 , ,周日用0或7表示,24小时制,间隔固定时间*/n

如:

分钟 小时 天 月 星期 命令0 2 * * *

0 2 * * 1-6

0 2 * * 0

0 9 * * 1-5service sshd start0 18 * * 1-5service sshd stop*/2 12-14 * 3-6,9-12 1-5

好了 结束了哈

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值