點擊上方“IT那活兒”,關(guān)注后了解更多精彩內(nèi)容?。。?/span>
場景介紹
我們在維護數(shù)據(jù)庫的時候,可能會存在某些刪庫跑路的或某些手抖誤操作,在執(zhí)行的時候發(fā)出了drop database, truncate ,drop table等危險操作,或 rm 刪除某個數(shù)據(jù)目錄的的情況,為保證在這種極端情況下,我們至少要有一份數(shù)據(jù)備份,特對這些場景做了幾個恢復測試,備份我們通常使用mysqldump 邏輯備份, 遠程binlog使用mysqlbinlog備份, 而物理備份則是通過xtraback或meb進行物理備份。
數(shù)據(jù)庫開啟binlog,并實時進行遠程備份BINLOG。
創(chuàng)建數(shù)據(jù)庫YWDB,同時建表student并進行數(shù)據(jù)插10行,使用存儲過程方式。
模擬事務(wù)操作,對表進行刪除即可。
使用mysqldump進行數(shù)據(jù)庫全備,可每日定義任務(wù)計劃進行操作。
#!/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
模擬某人誤刪除表,并同時操作多個事務(wù)進行,盡量模擬生產(chǎn)。
delete from student;
此時業(yè)務(wù)無法找到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中恢復了所需的數(shù)據(jù)
source /tmp/truncatebefore.sql
再插入到企業(yè)DB YWDB
Insert into ywdb.student select * from ywdbnew.student;
Select count(*) from ywdb.student;
6. 注意事項
備份時,由于不同的企業(yè)使用不同的方案,在恢復時要注意恢復到另一個庫時,要看原先是否已備份DB,有可能原先的腳本會有USE選項。
Mysqlbinlog恢復時需要重寫到新的DB,使用參數(shù)--rewrite-db=ywdb->ywdbnew,否則會寫入到錯誤的庫中。
本篇先介紹到此,下篇將結(jié)合xtraback進行和大家分享。
更多精彩干貨分享
點擊下方名片關(guān)注
IT那活兒
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/129724.html
摘要:為此,一款高性能的分布式數(shù)據(jù)庫,日漸成為剛需?;谌缟系脑?,我們選擇了,作為豐巢的核心系統(tǒng)的分布式數(shù)據(jù)庫,來取代和。 作者:豐巢技術(shù)團隊 隨著豐巢業(yè)務(wù)系統(tǒng)快速增長,其核心系統(tǒng)的數(shù)據(jù)量,早就跨越了億級別,而且每年增量仍然在飛速發(fā)展。整個核心系統(tǒng)隨著數(shù)據(jù)量的壓力增長,不但系統(tǒng)架構(gòu)復雜度急劇增長,數(shù)據(jù)架構(gòu)更加復雜,傳統(tǒng)的單節(jié)點數(shù)據(jù)庫,已經(jīng)日漸不能滿足豐巢的需求,當單表數(shù)量上億的時候,Ora...
摘要:對于數(shù)據(jù)結(jié)構(gòu)哈希表我們在上一篇也已經(jīng)詳細說了。鍵空間示意圖的數(shù)據(jù)庫就是使用字典哈希表來作為底層實現(xiàn)的,對數(shù)據(jù)庫的增刪改查都是構(gòu)建在字典哈希表的操作之上的。 前言 只有光頭才能變強 今天繼續(xù)來學習Redis,上一篇從零單排學Redis【青銅】已經(jīng)將Redis常用的數(shù)據(jù)結(jié)構(gòu)過了一遍了。如果還沒看的同學可以先去看一遍再回來~ 這篇主要講的內(nèi)容有: Redis服務(wù)器的數(shù)據(jù)庫 Redis對過期...
閱讀 1356·2023-01-11 13:20
閱讀 1707·2023-01-11 13:20
閱讀 1215·2023-01-11 13:20
閱讀 1906·2023-01-11 13:20
閱讀 4165·2023-01-11 13:20
閱讀 2757·2023-01-11 13:20
閱讀 1402·2023-01-11 13:20
閱讀 3671·2023-01-11 13:20