最近公司的服务器上放了一个微信的第三方系统,用来搭建微网站和做微活动的。谁知道影响了我的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 |
2 | wget http://sourceforge.net/projects/msmtp/files/msmtp/1.4.31/msmtp-1.4.31. tar .bz2/download |
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