MySQL的備份恢復(fù)

介紹

備份策略的設(shè)計

備份周期

根據(jù)數(shù)據(jù)量做評估,一般60G數(shù)據(jù)(三四十分鐘),每天全備

備份工具

  • mysqldump
  • percona xtrabackup
  • mysqlbinlog

備份方式

邏輯備份

  • 全備: mysqldump
  • 增量: binlog

物理備份

  • 全備: XBK (percona xtrabackup)
  • 增量: XBK (percona xtrabackup)

檢查備份的可用性

看備份日志,和備份文件(大小宗侦,內(nèi)容)
剛?cè)ス?/p>

crontab -l   查看備份腳本和備份路徑

定期恢復(fù)演練

數(shù)據(jù)恢復(fù)

只要備份和日志是完整的颊糜,恢復(fù)到故障之前的時間點(快速)

數(shù)據(jù)遷移

MySQL -> MySQL
其他數(shù)據(jù)庫 -> MySQL
MySQL -> 其他數(shù)據(jù)庫

備份介紹

備份類型

  • 熱備: 數(shù)據(jù)庫正在運行時的備份,對業(yè)務(wù)影響最性彻妗(innodb)
  • 溫備: 鎖表備份,長時間鎖表(MyISAM)
  • 冷備: 業(yè)務(wù)關(guān)閉情況下宙橱,進行備份

mysqldump 備份命令介紹

連接數(shù)據(jù)庫的參數(shù)

-u
-p
-S
-h
-P

基礎(chǔ)備份參數(shù)

-A 全備
-B 備份單庫或多庫(有建庫和use 庫的語句) 針對庫級別
庫名 表名  (單張表或多張表備份)針對表級別

特殊的備份參數(shù)

-R 備份存儲過程和函數(shù) (存儲過程和函數(shù)姨俩,相當(dāng)于shell中的腳步,集合了多個命令)
-E event 事件 (相當(dāng)于linux的crontab  計劃任務(wù))
--triggers  觸發(fā)器
--master-data=2
記錄了備份時刻的binlog和pos節(jié)點號
--master-data=1  使用change 語句的方式記錄binlog和pos節(jié)點
--master-data=2 使用注釋的方式記錄 binlog和pos節(jié)點
如果不加 --single-transaction ,會進行全局鎖表师郑,進行溫備
如果加--single-transaction环葵,對與Innodb進行不鎖表備份,(快照備份)宝冕,非Innodb的表進行鎖表
--single-transaction  在備份的時候张遭,會創(chuàng)建一個單獨的事務(wù)。生成一致性快照地梨。備份的時候就備份快照的數(shù)據(jù)菊卷,這個參數(shù)是基于MVCC的缔恳。快照即undo提供的洁闰,因為在事務(wù)中進行的歉甚。所以用到了undo。需要innodb的支持

擴展參數(shù)

--set-gtid-purged=auto(默認(rèn))/on    在構(gòu)建主從時添加
--set-gtid-purged=off  僅僅做普通的本機備份恢復(fù)時可以添加扑眉,在備份文件里沒有g(shù)tid信息纸泄。如果在主從時,從庫恢復(fù)文件時腰素,binlog發(fā)現(xiàn)沒有g(shù)tid信息聘裁。會重新從主庫的binlog獲得相同數(shù)據(jù)的gtid信息。

恢復(fù)案例(簡歷最多寫一個)

物理備份XBK

下載安裝

# CentOS7
wget https://www.percona.com/downloads/XtraBackup/Percona-XtraBackup-2.4.12/binary/redhat/7/x86_64/percona-xtrabackup-24-2.4.12-1.el7.x86_64.rpm
# CentOS6
wget https://www.percona.com/downloads/XtraBackup/Percona-XtraBackup-2.4.4/binary/redhat/6/x86_64/percona-xtrabackup-24-2.4.4-1.el6.x86_64.rpm
# 安裝
 yum -y install ./percona-xtrabackup-24-2.4.12-1.el7.x86_64.rpm 

innobackupex使用

備份的核心理念

  • 針對非innodb表進行鎖表備份
  • 針對innodb表弓千,立即觸發(fā)ckpt咧虎,copy所有innodb表相關(guān)的文件(ibdata1,ibd,.frm)底層是拷貝數(shù)據(jù)頁的。并且將備份過程中產(chǎn)生新的數(shù)據(jù)變化過程中的部分redo计呈,一起備份
  • 在恢復(fù)時砰诵,XBK會調(diào)用Innodb引擎的CSR,將數(shù)據(jù)文件的LSN和redo文件中的LSN追平

恢復(fù)的過程

模擬了CSR的全過程捌显,將數(shù)據(jù)的LSN號和redo的LSN號追平茁彭,恢復(fù)的方法直接cp回去即可

XBK的全備和恢復(fù)

XBK的全備

innobackupex --user=root --password=123 --no-timestamp /backup/full

XBK的恢復(fù)

innobackupex --apply-log /backup/full
--apply-log: 實現(xiàn)了CSR的全過程,即redo的前滾扶歪,和undo的回滾

備份產(chǎn)生的文件介紹

  • xtrabackup_binlog_info
cat xtrabackup_binlog_info 
mysql-bin.000001    154
# 存儲備份時刻的二進制信息理肺,做為binlog截取的起點
  • xtrabackup_checkpoints
cat xtrabackup_checkpoints 
backup_type = full-backuped     備份的類型,full表全備善镰,prepared表已經(jīng)做完redo前滾和undo回滾
from_lsn = 0             代表LSN號從哪開始進行備份妹萨,0表示LSN從0號開始代表全備
to_lsn = 3528971     表示 ckpt時,的數(shù)據(jù)部分的LSN號
last_lsn = 3528980   表示炫欺,備份完成后乎完,在redo日志中記錄的LSN號
compact = 0
recover_binlog_info = 0
# to_lsn 和 last_lsn ,在這相差9個品洛,這是MySQL5.7的新特性树姨,表示無差。因為此為測試環(huán)境桥状,在備份過程中帽揪,并沒有事務(wù)產(chǎn)生。所以redo日志的LSN號辅斟,并沒有增加转晰。
增量備份時,要檢查增量備份的from_lsn于上一次備份文件的last_lsn是否相差9,如果是9查邢,表示增量備份沒有問題蔗崎,
  • xtrabackup_logfile
    表示增量備份的redo日志

XBK的增量備份和恢復(fù)

清空備份路徑

rm -rf /backup/*

環(huán)境準(zhǔn)備

  • 模擬周日數(shù)據(jù)
create database full charset utf8mb4;
use full;
create table t1(id int);
insert into t1 values(1),(2),(3);
  • 進行全備
innobackupex --user=root --password=  -S /tmp/mysql.socket   --no-timestamp /backup/full
  • 模擬周一數(shù)據(jù)
create database inc1 charset utf8mb4;
use inc1;
create table t1(id int);
insert into t1 values(1),(2),(3);
  • 進行周一增備
innobackupex --user=root --password=  -S /tmp/mysql.socket --no-timestamp  --incremental --incremental-basedir=/backup/full  /backup/inc1
  • 模擬周二數(shù)據(jù)
create database inc2 charset utf8mb4;
use inc2;
create table t1(id int);
insert into t1 values(1),(2),(3);
  • 進行周二增備
innobackupex --user=root --password= -S /tmp/mysql.socket --no-timestamp --incremental --incremental-basedir=/backup/inc1 /backup/inc2
  • 檢查full,inc1,inc2的lsn號


    image.png

由圖可以看出,每次增備的from_lsn號侠坎,減去9,即是上一個的las_lsn號蚁趁,即增備成功

  • 模擬周三數(shù)據(jù)變化
create database inc3 charset utf8mb4;
use inc3;
create table t1(id int);
insert into t1 values(1),(2),(3);
  • 模擬上午10點的數(shù)據(jù)庫崩潰
\rm -rf /data/mysql/data/*

恢復(fù)思路

  • 掛維護頁
  • 查找可用備份full+inc1+inc2
  • 恢復(fù)binlog 裙盾,inc2到故障時間點
  • 恢復(fù)全備+增量+binlog
  • 驗證數(shù)據(jù)
  • 撤維護頁

恢復(fù)過程

  • 備份數(shù)據(jù)
    cp -a /backup /bak
  • 整理全備
    innobackupex --apply-log --redo-only /backup/full/
  • 合并inc1到全備
    innobackupex --apply-log --redo-only --incremental-dir=/backup/inc1 /backup/full
  • 合并inc2到全備
    innobackupex --apply-log --incremental-dir=/backup/inc2 /backup/full

最后inc2的last_lsn號和to_lsn號和full的last_lsn和to_lsn號一樣

  • 最后整理full
    innobackupex --apply-log /backup/full/

redo-only 說明

增量備份恢復(fù)時实胸,在第一次整理全備,在合并增量時番官,除了最后一次增量合并增量后不加庐完。其余的時候都加。最后一次全備整理徘熔,也不用加门躯。只做redo前滾,不做undo回滾

apply-log說明

進行redo前滾和undo回滾

全部恢復(fù)

pkill mysqld
cp -a /backup/full /data/mysql/data
chown -R mysql.mysql /data/mysql/data

binlog恢復(fù)

應(yīng)先查看 /backup/inc2/xtrabackup_binlog_info 的二進制起點

# 查看日志的終點
mysqlbinlog --base64-output=decode-rows  /data/mysql/data/mysql-bin.000007
# 截取日志
mysqlbinlog --start-position=219 --stop-position=819  /data/mysql/data/mysql-bin.000007 > /tmp/inc3.sql
# 恢復(fù)
mysql> set sql_log_bin=0;
mysql> source /tmp/inc3.sql;
mysql> set sql_log_bin=1;
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末酷师,一起剝皮案震驚了整個濱河市讶凉,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌山孔,老刑警劉巖懂讯,帶你破解...
    沈念sama閱讀 216,651評論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異台颠,居然都是意外死亡褐望,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,468評論 3 392
  • 文/潘曉璐 我一進店門串前,熙熙樓的掌柜王于貴愁眉苦臉地迎上來瘫里,“玉大人,你說我怎么就攤上這事荡碾〗鞫粒” “怎么了?”我有些...
    開封第一講書人閱讀 162,931評論 0 353
  • 文/不壞的土叔 我叫張陵坛吁,是天一觀的道長漆腌。 經(jīng)常有香客問我,道長阶冈,這世上最難降的妖魔是什么闷尿? 我笑而不...
    開封第一講書人閱讀 58,218評論 1 292
  • 正文 為了忘掉前任,我火速辦了婚禮女坑,結(jié)果婚禮上填具,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好劳景,可當(dāng)我...
    茶點故事閱讀 67,234評論 6 388
  • 文/花漫 我一把揭開白布誉简。 她就那樣靜靜地躺著,像睡著了一般盟广。 火紅的嫁衣襯著肌膚如雪闷串。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,198評論 1 299
  • 那天筋量,我揣著相機與錄音烹吵,去河邊找鬼。 笑死桨武,一個胖子當(dāng)著我的面吹牛肋拔,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播呀酸,決...
    沈念sama閱讀 40,084評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼凉蜂,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了性誉?” 一聲冷哼從身側(cè)響起窿吩,我...
    開封第一講書人閱讀 38,926評論 0 274
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎错览,沒想到半個月后纫雁,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,341評論 1 311
  • 正文 獨居荒郊野嶺守林人離奇死亡蝗砾,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,563評論 2 333
  • 正文 我和宋清朗相戀三年先较,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片悼粮。...
    茶點故事閱讀 39,731評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡闲勺,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出扣猫,到底是詐尸還是另有隱情菜循,我是刑警寧澤,帶...
    沈念sama閱讀 35,430評論 5 343
  • 正文 年R本政府宣布申尤,位于F島的核電站癌幕,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏昧穿。R本人自食惡果不足惜勺远,卻給世界環(huán)境...
    茶點故事閱讀 41,036評論 3 326
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望时鸵。 院中可真熱鬧胶逢,春花似錦厅瞎、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,676評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至碟刺,卻和暖如春锁保,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背半沽。 一陣腳步聲響...
    開封第一講書人閱讀 32,829評論 1 269
  • 我被黑心中介騙來泰國打工爽柒, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人抄囚。 一個月前我還...
    沈念sama閱讀 47,743評論 2 368
  • 正文 我出身青樓霉赡,卻偏偏與公主長得像橄务,于是被迫代替她去往敵國和親幔托。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,629評論 2 354

推薦閱讀更多精彩內(nèi)容