Centos下mysql自动备份并且发送提醒邮件

来源:互联网 发布:pos机s90如何设置网络 编辑:程序博客网 时间:2024/06/05 07:54

最近公司的服务器上放了一个微信的第三方系统,用来搭建微网站和做微活动的。谁知道影响了我的web服务器,只能回档我的微信数据库。结果回档后采编说我把之前的资料给覆盖了,果然不是自己开发的东西,风险性高!有了这次教训,自己还是安稳的做个mysql自动备份把----下面是izji整理的方法,系统是centos6.4

PS:下面的一、(1)和一、(2)是两种备份mysql的代码,选用一种就好了

顺便把自己现在用的代码附件传上来把    下载地址: http://pan.baidu.com/s/1pJO9sHP 密码: numb

一、(1)自动备份mysql的data文件夹

1、mkdir /Data/backup      ##先建立备份的目录。

2、vi /root/automysqlbackup.sh     ##新建一个sh,并写入

#!/bin/bashbackup_dir=/Data/backup/databak   #备份临时文件存放目录backup_target_dir=/Data/backup/mysql_day_backup     #备份文件存放目录backup_logs_dir=/Data/backup/logs   #备份日志目录db=/Data/data/mysql/data            #mysql的data数据目录name=mysql_                          #备份时候存放的名字DATE=$(date +%Y%m%d)#得到15天前的日期ccDATE=$(date "-d 15 day ago" +%Y%m%d)echo "开始复制数据表"  >> $backup_logs_dir/$name$DATEecho "-----------`date +"%Y-%m-%d %H:%M:%S"`--------------------"  >> $backup_logs_dir/$name$DATEcp -R $db $backup_dir/   #mysql数据库的数据目录为/Data/data/mysql/data/echo "开始压缩数据表"  >> $backup_logs_dir/$name$DATEecho "------------------------"  >> $backup_logs_dir/$name$DATEcd $backup_dirtar -zcvf  $name$DATE.tar.gz $db/ && echo "压缩表结束" >> $backup_logs_dir/$name$DATEmv $name$DATE.tar.gz $backup_target_dir/ && echo "转移成功" >> $backup_logs_dir/$name$DATEif [ $? -eq 0 ]then echo "backup succeed" >> $backup_logs_dir/$name$DATEelse echo "backup fail" >> $backup_logs_dir/$name$DATEfiecho "开始删除原数据表"  >> $backup_logs_dir/$name$DATEecho "-----------------------"  >> $backup_logs_dir/$name$DATErm -rf $backup_dir/* && echo "删除原数据表"  >> $backup_logs_dir/$name$DATEecho  "删除10天前数据" >>$backup_logs_dir/$name$DATEif [ -e $backup_target_dir/db$ccDATE.tar.gz ]then rm -rf $backup_target_dir/db$ccDATE.tar.gz echo "Delete $backup_target_dir/db$ccDATE.tar.gz succeed" >>$backup_logs_dir/$name$DATEelse echo "Not found $backup_target_dir/db$ccDATE.tar.gz file" >>$backup_logs_dir/$name$DATEfiif [ -e $backup_logs_dir/$name$ccDATE ]then rm -rf $backup_logs_dir/$name$ccDATE echo "Delete $backup_logs_dir/$name$ccDATE succeed" >>$backup_logs_dir/$name$DATEelse echo "Not found $backup_logs_dir/$name$ccDATE file" >>$backup_logs_dir/$name$DATEfi

3、[root@localhost ~]# chmod755 /root/automysqlbackup.sh ##给脚本执行权限

4、[root@localhost ~]# /root/automysqlbackup.sh    ###测试脚本是否可以正常运行

如果出现找不到目录或者没有那个目录的错误,那么检查下sh文件的编码,具体操作:vi /root/automysqlbackup.sh    按下Esc   Shift+;    输入set ff回车,如果是doc的,那么修改set ff=unix

5、如果执行完毕没出现任何错误,那么备份data成功了


一、(2)自动备份mysql并压缩成sql  

1、mkdir /Data/backup      ##先建立备份的目录。

2、vi /root/automysqlbackup.sh     ##新建一个sh,并写入

#!/bin/bash#Script:automysqlbackup.sh#Version:Beta 1.0#author:记忆#date:2014-07-04#以下配置信息请自己修改mysql_user="root" #MySQL备份用户mysql_password="jiyimysql" #MySQL备份用户的密码mysql_host="localhost" #要备份的主机,一般为localhostmysql_port="3306" #MySQL端口号,一般为3306backup_db_arr=("company" "shuizhongwang" "weixin" "weixinxin"  "yangchenghucun" "ychxh" "zhongfuda") #要备份的数据库名称,多个用空格分开隔开 如("db1" "db2" "db3")backup_location=/Data/backup  #备份数据存放位置,末尾请不要带"/",此项可以保持默认,程序会自动创建文件夹expire_backup_delete="ON" #是否开启过期备份删除 ON为开启 OFF为关闭expire_days=7 #过期时间天数 默认为三天,此项只有在expire_backup_delete开启时有效adminmail="425995717@qq.com"  #接收备份数据的邮箱 也就是管理员的邮箱subject_msg="jiyi's MySQL day backup"  #备份邮件主题subject_msg_error="ERROR:MYSQL data backup"  #备份ERROR邮件主题#以下配置请保持默认不要修改mysql_path=/Data/apps/mysql5.16/bin #定义mysql的路径 backup_time=`date +%Y-%m-%d-%H-%M`  #定义备份详细时间backup_cache_dir=$backup_location/datacache  #备份缓存文件夹全路径backup_cache_name=datacache  #备份缓存文件夹全路径backup_data_dir=$backup_location/mysql_day_backup  #备份文件夹全路径backup_data_filename=$backup_data_dir/$backup_time.sql.tar.gz  #备份文件的名称 包括路径backup_log_dir=$backup_location/logs  #备份日志文件夹全路径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" < $backup_log_mailcontent`<span style="white-space:pre"></span>exitfi#连接到mysql数据库,无法连接则备份退出$mysql_path/mysql -h$mysql_host -P$mysql_port -u$mysql_user -p$mysql_password <<enduse mysql;select host,user from user where user='root' and host='localhost';exitendflag=`echo $?`if [ $flag != "0" ]; then    `echo "ERROR:Can't connect mysql server! backup stop!" >> $backup_log_mailcontent`    `mutt $adminmail -s "$subject_msg_error" < $backup_log_mailcontent`    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`            `$mysql_path/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        done    else        `echo "ERROR:No database to backup! backup stop" >> $backup_log_mailcontent`        `mutt $adminmail -s "$subject_msg_error" < $backup_log_mailcontent`        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`<span style="white-space:pre"></span>`cd /Data/backup`        `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" < $backup_log_mailcontent`        exit    fi    `echo "All database backup success! Thank you!" >> $backup_log_mailcontent`    `mutt $adminmail -s "$subject_msg" -a $backup_data_filename < $backup_log_mailcontent`    exitfi

3、[root@localhost ~]# chmod755 /root/automysqlbackup.sh ##给脚本执行权限

4、[root@localhost ~]# /root/automysqlbackup.sh    ###测试脚本是否可以正常运行

如果出现找不到目录或者没有那个目录的错误,那么检查下sh文件的编码,具体操作:vi /root/automysqlbackup.sh    按下Esc   Shift+;    输入set ff回车,如果是doc的,那么修改set ff=unix

5、如果执行完毕没出现任何错误,那么备份data成功了


二、安装配置邮件msmtp和mutt发送邮件

貌似默认情况下mutt系统已经安装好了

可以使用一下命令查看安装情况:

1whereis mutt

如果没有安装mutt可以使用yum安装下

1yum install mutt

通过http://sourceforge.net/projects/msmtp/files/msmtp/1.4.31/ 下载msmtp
安装步骤:

1cd /usr/local
2wget http://sourceforge.net/projects/msmtp/files/msmtp/1.4.31/msmtp-1.4.31.tar.bz2/download
3bzip2 -d msmtp-1.4.31.tar.bz2
4tar -xvf msmtp-1.4.31.tar
5cd msmtp-1.4.31
6./configure --prefix=/usr/local/msmtp   //指定安装路径
7make
8make install

接下来进行msmtp的相关配置

1cd /usr/local/msmtp
2mkdir etc
3vim etc/msmtprc

在etc/msmtprc中输入:

defaults
#log
logfile /usr/local/msmtp/msmtp.log

#account
account test

# SMTP邮件服务器地址
host smtp.qq.com

# 发送的邮件Email(这个可以根据情况写个)
from abc@qq.com
auth login

# 邮件服务器登录账号(写个有效的帐号)
user 329***@qq.com

# 邮件服务器登陆密码(user帐号的实际登录密码)
password 123456
# Set a default account
account default : test

退出保存后,为保证安全可以设置下权限,只有当前用户可以可以读写,并复制到当前用户根目录下(隐藏)

1chmod 600 etc/msmtprc
2cp etc/msmtprc /root/.msmtprc

配置mutt

1vim /etc/Muttrc

添加以下内容:
set from=”noreply@1208.me”
set sendmail=”/usr/local/msmtp/bin/msmtp”
set use_from=yes
set realname=”1208.me”

然后拷贝到根目录,发送邮件测试:

1cp /etc/Muttrc /root/.muttrc
2echo '测试邮件'|mutt -s '来自1208.me的一封邮件' pcq2006@gmail.com

这时候可以验证下结果。

如果配置过程中有错误,可以通过以下一些命令排查:

1#查看服务信息
2/usr/local/msmtp/bin/msmtp -S
3#查看当前配置文件
4/usr/local/msmtp/bin/msmtp -P


三、让sh每天定时自动执行

1、yum install -y vixie-cron   ##先安装下crond

2、crontab -e   ##写入下面代码,代表每天凌晨2点27分执行备份

27 02 * * * /root/automysqlbackup.sh   

 

0 0