暂停业务避免数据的二次伤害
找一个临时的库,恢复前一天的全备
截取${完整备份时间点}到${异常发生时间点}之间的binlog,恢复到临时库
测试可用性和完整性
开启业务前的两种方式
1)直接使用临时库顶替原生产库,前端应用割接到新
2)将误删除的表单独导出,然后导入到原生产环境测试可用性和完整性
对外开放业务
- 数据库备份策略:mysqldump+复制bin logs
先使用mysqldump对数据库进行完全备份, 然后定期备份BINARY LOG达到增量备份的效果
一、查看当前使用的binlogmysql>show master status;
二、全备[root@db01 ~]# mkdir /backup ## 文件太大时可以压缩 gzip ,但是gzip不属于mysql独有的命令,可以利用管道 [root@db01 ~]# mysqldump -uroot -p --master-data=2 --single-transaction --lock-tables -F -R --databases xcapp_fund_open |gzip > /mysqlbak/fund_open_$(date +%F).sql.gz ## 没有从库的时候,加参数--set-gtid-purged=on报这个错Error: Server has GTIDs disabled. [root@db01 ~]# mysqldump -uroot -p --master-data=2 --single-transaction --lock-tables -F -R --databases xcapp_fund_open |gzip > /mysqlbak/fund_open_$(date +%F).sql.gz
语法:mysqldump -h 服务器 -u用户名 -p密码 选项与参数 > 备份文件.sql 此命令涉及到的选项与参数:
-
--master-data=2 备份文件中 change master语句是被注释的,如果是想扩展一个从库,值为1,且change master语句是不被注释的,默认为1
- --single-transaction 指定 --single-transaction 参数,那么导出过程中只能保证每个表的数据一致性(利用多版本特性实现,目前只能针对InnoDB事务表)。
比如有一个大表,mysqldump对该表的导出需要1分钟,那么在这1分钟的过程中,该表时可以被正常访问的。 -
--lock-tables 如果是备份所有库,那么备份到某个库时只锁某个库,其他库可写
- -F 备份的同时刷新binlog
- -R 备份存储过程等
- --databases 加了后导入时不需要创建数据库,不加得手动create database 数据库
[root@VM-12-10-centos sh]touch mysql_bak.sh [root@VM-12-10-centos sh]vi /mysql_bak.sh
#!/bin/bash
back_dir=/mysqlbak
back_file=study_$(date +%F).sql.gz
user=root
if [ ! -d /backup ];then
mkdir -p /backup
fi
# 备份并截断日志
mysqldump -u${user} -p --master-data=2 --single-transaction --lock-tables -F -R --databases study |gzip > ${back_dir}/${back_file}
# 只保留最近一月的备份
cd $back_dir
find . -mtime + 30 -exec rm -rf {} ;
参考:Centos7中find命令的用法,以及find+exec,find+xargs_Kong_Cc的博客-CSDN博客_centos7find命令
## -mtime -n +n #按文件更改时间来查找文件,-n指n天以内,+n指n天以前
## -exec 参数后面跟的是command命令,它的终止是以;为结束标志的,所以这句命令后面的分号是不可缺少的,考虑到各个系统中分号会有不同的意义,所以前面加反斜杠。
[root@VM-12-10-centos sh]# chmod a+x /mysql_bak.sh [root@VM-12-10-centos sh]# chattr +i /mysql_bak.sh [root@VM-12-10-centos sh]# bash /mysql_bak.sh
chmod a+x /mysql_bak.sh意思是给所有的用户添加执行mysql_bak.sh这个文件的权限
a是指所有的用户组,包括root用户组,文件拥有者的用户组,还有其他用户组。
+x是指添加执行权限。
+x是执行权限,+r是阅读权限,+w是写入权限
chattr +i /mysql_bak.sh意思是让一个文件“不能被删除、改名,设置连接也无法写入或添加据。”
四、脚本执行时间设置配置cron: [root@egon ~]# crontab -e 0 2 * * * /mysql_bak.sh
Linux crontab 命令 | 菜鸟教程



