点击上方“IT那活儿”,关注后了解更多精彩内容!!!
备份概述
逻辑备份工具:mysqldump \ mydumper,load data方式。 物理备份工具: rsync或scp冷备, meb\xtracback全量及增量备份。
场景介绍
我们在维护数据库的时候,可能会存在某些删库跑路的或某些手抖误操作,在执行的时候发出了drop database, truncate ,drop table等危险操作,或 rm 删除某个数据目录的的情况,为保证在这种极端情况下,我们至少要有一份数据备份,特对这些场景做了几个恢复测试,备份我们通常使用mysqldump 逻辑备份, 远程binlog使用mysqlbinlog备份, 而物理备份则是通过xtraback或meb进行物理备份。
MYSQLDUMP每天全备+binlog备份方案
下面是对二种备份恢复测试的一个介绍。
1. 前提条件
数据库开启binlog,并实时进行远程备份BINLOG。
2. 数据准备
创建数据库YWDB,同时建表student并进行数据插10行,使用存储过程方式。
模拟事务操作,对表进行删除即可。
使用mysqldump进行数据库全备,可每日定义任务计划进行操作。
#!/bin/bashMYSQLDBUSERNAME=rootMYSQLDBPASSWORD=Ora#01555#MYSQBASEDIR=/usr/local/mysql#MYSQL=$MYSQBASEDIR/bin/mysqlMYSQL=/usr/bin/mysql#MYSQLDUMP=$MYSQBASEDIR/bin/mysqldumpMYSQLDUMP=/usr/bin/mysqldumpBACKDIR=/app/backup/logicDATEFORMATTYPE1=$(date +%Y-%m-%d)DATEFORMATTYPE2=$(date +%Y%m%d%H%M%S)#DBHOME=/msdata/db_mysql#SOCK=${DBHOME}/mysql.sockSOCK=/var/lib/mysql/mysql.sockDATABASES=("ywdb")[ -x $MYSQL ] || MYSQL=mysql[ -x $MYSQLDUMP ] || MYSQLDUMP=mysqldump[ -d ${BACKDIR} ] || mkdir -p ${BACKDIR}[ -d ${BACKDIR}/${DATEFORMATTYPE1} ] || mkdir ${BACKDIR}/${DATEFORMATTYPE1}for DBNAME in ${DATABASES[@]};do ${MYSQLDUMP} --user=${MYSQLDBUSERNAME} --password=${MYSQLDBPASSWORD} -S${SOCK} --routines --events --triggers --master-data=2 --single-transaction --flush-logs --databases ${DBNAME} | gzip > ${BACKDIR}/${DATEFORMATTYPE1}/${DBNAME}-backup-${DATEFORMATTYPE2}.sql.gz[ $? -eq 0 ] && echo "${DBNAME} has been backuped successful" || echo "${DBNAME} has been backuped failed"/bin/sleep 5donefind /app/backup/logic -type d -name `date +"%Y-%m-%d" -d "-7 day"`| xargs rm -rf
复制
模拟某人误删除表,并同时操作多个事务进行,尽量模拟生产。
delete from student;
此时业务无法找到student记录,急急忙忙寻找救援。
3. 创建YWDBNEW库进行数据恢复
create database ywdbnew DEFAULT CHARACTER SET utf8mb4 ;use ywdbnewcreate table student(id int(4) primary key not null auto_increment,name varchar(32) not null,sex varchar(2) not null,phone varchar(32) not null unique,brithplace varchar(32) not null,grade int(1) not null);
复制
4. 全备恢复到YWDBNEW库
5. Mysqlbinlog进行恢复
全备的binlog及pos地址
[root@node1 2021-11-08]# cat ywdb-backup-20211108165900.sql |grep -i mast-- CHANGE MASTER TO MASTER_LOG_FILE='on.000009', MASTER_LOG_POS=154;
复制
Truncate的POS地址
YWDBNEW中恢复了所需的数据
source /tmp/truncatebefore.sql
再插入到企业DB YWDB
Insert into ywdb.student select * from ywdbnew.student;Select count(*) from ywdb.student;
复制
6. 注意事项
备份时,由于不同的企业使用不同的方案,在恢复时要注意恢复到另一个库时,要看原先是否已备份DB,有可能原先的脚本会有USE选项。
Mysqlbinlog恢复时需要重写到新的DB,使用参数--rewrite-db='ywdb->ywdbnew',否则会写入到错误的库中。
本篇先介绍到此,下篇将结合xtraback进行和大家分享。

更多精彩干货分享
点击下方名片关注
IT那活儿

文章转载自IT那活儿,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。
评论
相关阅读
【MySQL 30周年庆】MySQL 8.0 OCP考试限时免费!教你免费领考券
墨天轮小教习
3078次阅读
2025-04-25 18:53:11
MySQL 30 周年庆!MySQL 8.4 认证免费考!这次是认真的。。。
严少安
864次阅读
2025-04-25 15:30:58
【活动】分享你的压箱底干货文档,三篇解锁进阶奖励!
墨天轮编辑部
510次阅读
2025-04-17 17:02:24
MySQL 9.3 正式 GA,我却大失所望,新特性亮点与隐忧并存?
JiekeXu
445次阅读
2025-04-15 23:49:58
3月“墨力原创作者计划”获奖名单公布
墨天轮编辑部
381次阅读
2025-04-15 14:48:05
MySQL 8.0 OCP 1Z0-908 考试解析指南(二)
JiekeXu
319次阅读
2025-04-30 17:37:37
SQL优化 - explain查看SQL执行计划(下)
金同学
288次阅读
2025-05-06 14:40:00
记录MySQL数据库的一些奇怪的迁移需求!
陈举超
286次阅读
2025-04-15 15:27:53
MySQL 8.0 OCP 1Z0-908 考试题解析指南
青年数据库学习互助会
274次阅读
2025-04-30 12:17:54
MySQL 30 周年庆!MySQL 8.4 认证免费考!这次是认真的。。。
数据库运维之道
272次阅读
2025-04-28 11:01:25