mysqldump定时备份数据库,形成压缩文件,并记录dump日志
dump:在/home/下创建 back.sh 文件#!/bin/bash#数据库用户名dbuser='root'#数据库用密码dbpasswd='123456'#hostsdbhost='192.168.1.1 192.168.1.2 '#日志备份路径logpath='/home/mysqlback/'#数据备份路径datapath='/home/mysqlbac...
dump:
在/home/下创建 back.sh 文件
#!/bin/bash
#数据库用户名
dbuser='root'
#数据库用密码
dbpasswd='123456'
#hosts
dbhost='192.168.1.1 192.168.1.2 '
#日志备份路径
logpath='/home/mysqlback/'
#数据备份路径
datapath='/home/mysqlback/'
#日志记录头部
for host in $dbhost;do
#备份时间
backtime=`date +%Y%m%d%H%M%S`
echo "-------${backtime},${host}备份数据库开始-------------" >> ${logpath}/log.log
/usr/bin/mysqldump -u${dbuser} -p${dbpasswd} -h ${host} -R -F -q --single-transaction --set-gtid-purged=OFF --add-drop-table --all-databases |gzip > ${datapath}/${host}_${backtime}.sql.gz;
endtime=`date +%Y%m%d%H%M%S`
if [ "$?" == 0 ];then
echo "${endtime},${host}数据库备份完成" >> ${logpath}/log.log
else
#备份失败则进行以下操作
echo "${endtime},${host}数据库备份失败!!" >> ${logpath}/log.log
fi
echo "${endtime},${host}备份数据库结束" >> ${logpath}/log.log
filesize=`ls -l ${datapath}/${host}_${backtime}.sql.gz | awk '{ print $5/1024 }'`
echo "备份文件名:${datapath}/${host}_${backtime}.sql.gz,备份文件大小:${filesize}KB" >> ${logpath}/log.log
done
#删除7天前备份,也就是只保存1天内的备份
#find /home/mysqlback/ -type f -name "*.sql.gz" -mtime +7 -exec rm -f {} \; > /dev/null 2>&1
#cleartime=`date +%Y%m%d%H%M%S`
#echo "${cleartime},备份数据库历史数据清理结束" >> ${logpath}/log.log
# mysql -h127.0.0.1 -P3306 -uLibSvr -pP@$$W0rd backinfo -e "INSERT INTO backinfo(mark,host) VALUES ('${cleartime}备份数据库历史数据清理结束','10.1.122.10')"
#
mvtime=`date +%Y%m%d%H%M%S`
#创建文件路径
mkdir /home/rmmysqldata/${mvtime}
#从备份文件中移动过期文件到"回收站"
find /home/mysqlback/ -type f -name "*.sql.gz" -mtime +1 -exec mv {} /home/rmmysqldata/${mvtime}/ \; > /dev/null 2>&1
#到回收站的目录下删除过期文件
rm -rf /home/rmmysqldata/${mvtime}
if [ "$?" == 0 ];then
cleartime=`date +%Y%m%d%H%M%S`
echo "${cleartime},历史数据清理结束" >> ${logpath}/log.log
else
#备份失败则进行以下操作
echo "${cleartime},历史数据清理结束" >> ${logpath}/log.log
fi
#判断备份文件夹大小
datafilesize=`du -s -h ${datapath}`
echo "${datapath}文件大小:${datafilesize}" >> ${logpath}/log.log
#循环判断分区使用率是否超过80%
percent=`df -k | grep -v Filesystem| awk '{print int($5)}'`
for each_one in $percent
do
#判断使用率是否超过90%
if [ $each_one -ge 80 ];then
#如果超过90 则把使用情况
echo "磁盘使用:${$each_one}" >> ${logpath}/log.log
fi
done
赋予脚本权限:
chmod +x /home/mysql.sh
如果没有执行看下是不是cron没有启动
/sbin/service crond status
如果没有启动就启动
/sbin/service crond start
定时执行:
设置定时任务:
[root@localhost ~]# crontab -e 或者:vi /etc/crontab
编写定时任务信息:
* 0 * * * /bin/sh /home/back.sh
时间格式参考 点击打开链接 点击打开链接
/home/back.sh是dump脚本位置
上面这句代码,就是每天晚上12点使用sh命令自动执行我放在/home文件夹下面的back.sh文件。
以上就实现了每天晚上12点自动备份数据库的操作了,我们想要测试一下看看行不行的话,我们可以先设置每分钟一次,然后去mysql_back_path定义的目录查看我们的备份文件
每分钟的定时任务得这么写
*/1 * * * * /bin/sh /home/back.sh
编写完之后可以通过
[root@localhost ~]# crontab -l
来查看我们刚刚查看的创建的定时任务,如果有列出来那就说明我们的任务创建成功了。
查看指定备份目录下是否进行备份,
还原:
在sql文件所在的文件夹执行
[root@localhost mysqldata]# mysql -uroot -p < db22_20170803144801.sql
Enter password:
即可还原,是不是很简单。当然万一有错误那就复杂了
一、
比如:数据库开启了gtid
在还原时就会提示:mysql dump ERROR 1840 (HY000) at line 24: @@GLOBAL.GTID_PURGED can only be set when @@GLOBAL.GTID_EXECUTED is empty.
解决方案1:http://blog.csdn.net/u010098331/article/details/50930520 reset master
2.dump时增加参数
--set-gtid-purged=OFF
不设置gtid
二、生成的sql文件没有创建数据库语句 加 -B
参考学习:点击打开链接 点击打开链接
魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。
更多推荐
所有评论(0)