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

本文介绍了在Centos系统中如何设置MySQL数据库自动备份,并通过msmtp和mutt配置发送邮件提醒的详细步骤,包括创建备份脚本、安装配置邮件系统以及设置定时任务。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

最近公司的服务器上放了一个微信的第三方系统,用来搭建微网站和做微活动的。谁知道影响了我的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/bash
backup_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$DATE
echo "-----------`date +"%Y-%m-%d %H:%M:%S"`--------------------"  >> $backup_logs_dir/$name$DATE
cp -R $db $backup_dir/   #mysql数据库的数据目录为/Data/data/mysql/data/
echo "开始压缩数据表"  >> $backup_logs_dir/$name$DATE
echo "------------------------"  >> $backup_logs_dir/$name$DATE
cd $backup_dir
tar -zcvf  $name$DATE.tar.gz $db/ && echo "压缩表结束" >> $backup_logs_dir/$name$DATE
mv $name$DATE.tar.gz $backup_target_dir/ && echo "转移成功" >> $backup_logs_dir/$name$DATE
if [ $? -eq 0 ]
then
 echo "backup succeed" >> $backup_logs_dir/$name$DATE
else
 echo "backup fail" >> $backup_logs_dir/$name$DATE
fi
echo "开始删除原数据表"  >> $backup_logs_dir/$name$DATE
echo "-----------------------"  >> $backup_logs_dir/$name$DATE
rm -rf $backup_dir/* && echo "删除原数据表"  >> $backup_logs_dir/$name$DATE
echo  "删除10天前数据" >>$backup_logs_dir/$name$DATE
if [ -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$DATE
else
 echo "Not found $backup_target_dir/db$ccDATE.tar.gz file" >>$backup_logs_dir/$name$DATE
fi
if [ -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$DATE
else
 echo "Not found $backup_logs_dir/$name$ccDATE file" >>$backup_logs_dir/$name$DATE
fi

3、 [root@localhost ~]# chmod 755 /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" #要备份的主机,一般为localhost
mysql_port="3306" #MySQL端口号,一般为3306
backup_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>exit
fi


#连接到mysql数据库,无法连接则备份退出
$mysql_path/mysql -h$mysql_host -P$mysql_port -u$mysql_user -p$mysql_password <<end
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" < $backup_log_mailcontent`
    exit
else
    #判断有没有定义备份的数据库,如果定义则开始备份,否则退出备份
    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`
    exit
fi

3、 [root@localhost ~]# chmod 755 /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系统已经安装好了

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

1 whereis mutt

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

1 yum install mutt

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

1 cd /usr/local
3 bzip2 -d msmtp-1.4.31.tar.bz2
4 tar -xvf msmtp-1.4.31.tar
5 cd msmtp-1.4.31
6 ./configure --prefix=/usr/local/msmtp   //指定安装路径
7 make
8 make install

接下来进行msmtp的相关配置

1 cd /usr/local/msmtp
2 mkdir etc
3 vim 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

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

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

配置mutt

1 vim /etc/Muttrc

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

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

1 cp /etc/Muttrc /root/.muttrc
2 echo '测试邮件'|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   
 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值