点击上方“IT那活儿”,关注后了解更多精彩内容!!!
场景介绍
我们在维护数据库的时候,可能会存在某些删库跑路的或某些手抖误操作,在执行的时候发出了drop database, truncate ,drop table等危险操作,或 rm 删除某个数据目录的的情况,为保证在这种极端情况下,我们至少要有一份数据备份,特对这些场景做了几个恢复测试,备份我们通常使用mysqldump 逻辑备份, 远程binlog使用mysqlbinlog备份, 而物理备份则是通过xtraback或meb进行物理备份。
数据库开启binlog,并实时进行远程备份BINLOG。
创建数据库YWDB,同时建表student并进行数据插10行,使用存储过程方式。
模拟事务操作,对表进行删除即可。
使用mysqldump进行数据库全备,可每日定义任务计划进行操作。
#!/bin/bash
MYSQLDBUSERNAME=root
MYSQLDBPASSWORD=Ora#01555
#MYSQBASEDIR=/usr/local/mysql
#MYSQL=$MYSQBASEDIR/bin/mysql
MYSQL=/usr/bin/mysql
#MYSQLDUMP=$MYSQBASEDIR/bin/mysqldump
MYSQLDUMP=/usr/bin/mysqldump
BACKDIR=/app/backup/logic
DATEFORMATTYPE1=$(date +%Y-%m-%d)
DATEFORMATTYPE2=$(date +%Y%m%d%H%M%S)
#DBHOME=/msdata/db_mysql
#SOCK=${DBHOME}/mysql.sock
SOCK=/var/lib/mysql/mysql.sock
DATABASES=(
"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 5
done
find /app/backup/logic -type d -name `date +"%Y-%m-%d" -d "-7 day"`| xargs rm -rf
模拟某人误删除表,并同时操作多个事务进行,尽量模拟生产。
delete from student;
此时业务无法找到student记录,急急忙忙寻找救援。
create database ywdbnew DEFAULT CHARACTER SET utf8mb4 ;
use ywdbnew
create 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
);
全备的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那活儿
文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。
转载请注明本文地址:https://www.ucloud.cn/yun/129724.html
摘要:为此,一款高性能的分布式数据库,日渐成为刚需。基于如上的原因,我们选择了,作为丰巢的核心系统的分布式数据库,来取代和。 作者:丰巢技术团队 随着丰巢业务系统快速增长,其核心系统的数据量,早就跨越了亿级别,而且每年增量仍然在飞速发展。整个核心系统随着数据量的压力增长,不但系统架构复杂度急剧增长,数据架构更加复杂,传统的单节点数据库,已经日渐不能满足丰巢的需求,当单表数量上亿的时候,Ora...
摘要:对于数据结构哈希表我们在上一篇也已经详细说了。键空间示意图的数据库就是使用字典哈希表来作为底层实现的,对数据库的增删改查都是构建在字典哈希表的操作之上的。 前言 只有光头才能变强 今天继续来学习Redis,上一篇从零单排学Redis【青铜】已经将Redis常用的数据结构过了一遍了。如果还没看的同学可以先去看一遍再回来~ 这篇主要讲的内容有: Redis服务器的数据库 Redis对过期...
阅读 1251·2023-01-11 13:20
阅读 1560·2023-01-11 13:20
阅读 1015·2023-01-11 13:20
阅读 1685·2023-01-11 13:20
阅读 3973·2023-01-11 13:20
阅读 2521·2023-01-11 13:20
阅读 1356·2023-01-11 13:20
阅读 3487·2023-01-11 13:20