Mysql/MariaDB數(shù)據(jù)庫備份與恢復(fù)

文章來源:https://blog.movekj.com/?p=1049

數(shù)據(jù)庫備份

數(shù)據(jù)庫備份的目的是為了防止由于某些意外情況導(dǎo)致數(shù)據(jù)丟失而造成無法挽救的局面出現(xiàn)主守。因此禀倔,數(shù)據(jù)備份是運(yùn)維工作者日常的重要工作之一

可能出現(xiàn)數(shù)據(jù)丟失的場景

  • 硬件故障
  • 軟件故障
  • 自然災(zāi)害
  • 黑客攻擊
  • 誤操作 (占比最大)

數(shù)據(jù)備份類型

  • 按備份數(shù)據(jù)集的多少分類
  • 完全備份: 備份此刻數(shù)據(jù)集中的所有數(shù)據(jù)
  • 增量備份: 僅備份自上一次完全備份或增量備份以來改變的那部數(shù)據(jù)
  • 差異備份: 僅備份自上一次完全備份以來改變的那部數(shù)據(jù)
  • 按備份的方式分類
  • 物理備份: 復(fù)制數(shù)據(jù)文件進(jìn)行備份
  • 邏輯備份: 從數(shù)據(jù)庫導(dǎo)出數(shù)據(jù)另存在一個(gè)或多個(gè)文件中
  • 按備份時(shí)是否為數(shù)據(jù)庫施加鎖和施加的鎖類型分類
  • 熱備: 備份時(shí)不為數(shù)據(jù)庫施加任何鎖榄融,所有對數(shù)據(jù)庫的寫操作和讀操作都正常進(jìn)行。由于MyISAM存儲(chǔ)引擎不支持熱備救湖,因此對使用MyISAM存儲(chǔ)引擎的表無法進(jìn)行熱備
  • 溫備: 備份時(shí)為數(shù)據(jù)庫施加讀鎖愧杯,所有對數(shù)據(jù)庫的讀操作能正常進(jìn)行,但正常進(jìn)行寫操作
  • 冷備: 備份時(shí)使數(shù)據(jù)庫服務(wù)離線鞋既,所有的讀寫操作無法進(jìn)行

數(shù)據(jù)庫備份工具

使用mysqldump進(jìn)行備份

  • 使用格式
mysqldump [選項(xiàng)] db_name [ta_name ...] > /path/to/file
mysqldump [選項(xiàng)] --db_name ... > /path/to/file
mysqldump [選項(xiàng)] --all-databases > /path/to/file
  • 選項(xiàng)
  • -x, –lock-all-tables: 在備份前的那一刻為所有庫的所有表施加讀鎖
  • -l, –lock-tables: 當(dāng)存在多個(gè)庫時(shí)力九,分開為每個(gè)庫的所有表施加讀鎖。此選項(xiàng)可能導(dǎo)致多個(gè)庫之間的數(shù)據(jù)不一致
  • –single-transaction: 創(chuàng)建一個(gè)事務(wù)涛救,基于此事務(wù)執(zhí)行備份畏邢。若備份數(shù)據(jù)庫中的表的存儲(chǔ)引擎是InnoDB,則此備份操作為熱備检吆,否則為溫備
  • -R, –routines: 備份時(shí)同時(shí)備份存儲(chǔ)過程和存儲(chǔ)函數(shù)
  • –triggers: 備份時(shí)同時(shí)備份觸發(fā)器
  • -E, –events: 備份時(shí)同時(shí)備份事件調(diào)度器
  • –master-data[=#]: 備份時(shí)記錄下備份前的那一刻mysql服務(wù)器所使用的二進(jìn)制日志文件及其所處的位置
    • 1:記錄的change master to語句不被注釋
    • 2:記錄的change master to語句將被注釋
  • –flush-logs: 鎖定表完成后舒萎,即進(jìn)行日志刷新操作
  • 示例
備份mysql數(shù)據(jù)庫的所有庫中的所有表
[root@movekj ~]$ mysqldump -x --master-data=2 --flush-logs --all-databases  > ~/my_backup$(date +%F).sql
恢復(fù)數(shù)據(jù)庫
[root@movekj ~]$ mysql -e 'source /root/my_backup.sql'

基于LVM2進(jìn)行備份

前提: 要求數(shù)據(jù)文件和事務(wù)日志位于同一個(gè)邏輯卷

  • 備份步驟
獲取全局讀鎖,此步驟可能需要花費(fèi)很長時(shí)間等待其他鏈接釋放正則使用的鎖
[root@movekj ~]$ mysql -e "FLUSH TABLES WITH READ LOCK"
 滾動(dòng)二進(jìn)制日志文件蹭沛,并記錄二進(jìn)制文件事件位置
[root@movekj ~]$ mysql -e "FLUSH LOGS"
[root@movekj ~]$ mysql -e "SHOW MASTER STATUS" > /PATH/TO/FILE
 創(chuàng)建快照卷
[root@movekj ~]$ lvcreate  -L SIZE -s -p r -n SNAM-NAME /dev/VG-NAME/LV-NAME 
 釋放全局讀鎖
[root@movekj ~]$ mysql -e "UNLOCK TABLES"
 掛載快照卷臂寝,并執(zhí)行備份,備份完成后刪除快照卷
[root@movekj ~]$ mkdir /snap /mybackup
[root@movekj ~]$ mount /dev/VG-NAME/LV-NAME  /snap
[root@movekj ~]$ cd /snap; tar Jxf /mybackup/mybackup-$(date +%F).tar.xz ./* 
[root@movekj ~]$ umount /snap
[root@movekj ~]$ lvremove  /dev/VG-NAME/LV-NAME 

使用Xtrabackup備份Mysql

Xtrabackup是由percona提供的mysql數(shù)據(jù)庫備份工具摊灭,據(jù)官方介紹咆贬,這也是世界上惟一一款開源的能夠?qū)nnodb和xtradb數(shù)據(jù)庫進(jìn)行熱備的工具。下載地址: https://www.percona.com/software/mysql-database/percona-xtrabackup

  • 使用格式
    innobackupex [選項(xiàng)] /path/to/backup-dir/
  • 選項(xiàng)
  • –user=User: 備份時(shí)使用的數(shù)據(jù)庫用戶名
  • –password=Password: 備份時(shí)用戶的數(shù)據(jù)庫用戶名對應(yīng)的密碼
  • –no-timestamp: 備份使不在/PATH/TO/BACKUP-DIR/目錄下創(chuàng)建以時(shí)間戳命名的子目錄
  • –apply-log: 提交帚呼、回滾備份數(shù)據(jù)中的事務(wù)日志
  • –redo-only: 只提交備份數(shù)據(jù)中的事務(wù)日志掏缎,不回滾
  • –use-memory: 定義innobackupex使用的內(nèi)存空間
  • –incremental /PATH/TO/BACKUP-DIR/: 指定增量備份數(shù)據(jù)的存放目錄
  • –incremental-basedir=BASEDIR: 指定基于哪個(gè)之前的備份做增量備份
  • –copy-back: 將應(yīng)用完日志的備份數(shù)據(jù)復(fù)制會(huì)mysql服務(wù)器的數(shù)據(jù)目錄
  • 備份步驟
# 創(chuàng)建一個(gè)備份賬號(hào)
mysql> CREATE USER 'User'@'Host' IDENTIFIED BY 'Passwd';
mysql> REVOKE ALL PRIVILEGES, GRANT OPTION FROM 'User';
mysql> GRANT RELOAD, LOCK TABLES, REPLICATION CLIENT,PROCESS ON *.* TO 'User'@'Host';
mysql> FLUSH PRIVILEGES;
 # 執(zhí)行一次完全備份
[root@movekj ~]$ innobackupex   /PATH/TO/BACKUP-DIR/
 # 執(zhí)行一次增量備份
# BASEDIR可以指向完全備份路徑或者上一次增量備份路徑
[root@movekj ~]$ innobackupex --incremental  /PATH/TO/BACKUP-DIR/ --incremental-basedir=BASEDIR 
 # 壓縮并歸檔備份出來的數(shù)據(jù)
[root@movekj ~]$ innobackupex --stream=tar  /backup | gzip > /backup/`date +%F_%H-%M-%S`.tar.gz
 # 將備份出來的數(shù)據(jù)復(fù)制到遠(yuǎn)程主機(jī)
[root@movekj ~]$ innobackupex --stream=tar  /PATH/TO/BACKUP-DIR/ | \ 
ssh user@www.magedu.com  "cat -  > /PATH/TO/BACKUP-DIR/`date +%F_%H-%M-%S`.tar" 
  • 恢復(fù)步驟
# BASE-DIR為完全備份數(shù)據(jù)所在的路徑
# INCREMENTAL-DIR-#為增量備份數(shù)據(jù)所在的路徑
# 只有一個(gè)完全備份且無其他增量備份時(shí),--apply-log這一步也需要做
# 準(zhǔn)備完全備份數(shù)據(jù)
[root@movekj ~]$ innobackupex --apply-log --redo-only BASE-DIR
 # 準(zhǔn)備第一個(gè)增量備份數(shù)據(jù)
[root@movekj ~]$ innobackupex --apply-log --redo-only BASE-DIR --incremental-dir=INCREMENTAL-DIR-1
 # 準(zhǔn)備第二個(gè)增量備份數(shù)據(jù)
[root@movekj ~]$ innobackupex --apply-log --redo-only BASE-DIR --incremental-dir=INCREMENTAL-DIR-2
 # 停止mysql服務(wù)并清空mysql數(shù)據(jù)目錄
[root@movekj ~]$ systemctl stop mariadb
[root@movekj ~]$ tar Jcvf /tmp/mybackup-$(date +%F) /mydata/data 
[root@movekj ~]$ rm -rf  /mydata/data/*
 # 將備份數(shù)據(jù)恢復(fù)至mysql服務(wù)器的數(shù)據(jù)目錄
[root@movekj ~]$ innobackupex --copy-back  BASE-DIR
 # 改變mysql數(shù)據(jù)文件的屬主和屬組
[root@movekj ~]$ chown -R  mysql:mysql  /mydata/data/
 # 啟動(dòng)mysql服務(wù)
[root@movekj ~]$ systemctl start mariadb
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末煤杀,一起剝皮案震驚了整個(gè)濱河市眷蜈,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌沈自,老刑警劉巖酌儒,帶你破解...
    沈念sama閱讀 210,914評論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異枯途,居然都是意外死亡忌怎,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 89,935評論 2 383
  • 文/潘曉璐 我一進(jìn)店門酪夷,熙熙樓的掌柜王于貴愁眉苦臉地迎上來榴啸,“玉大人,你說我怎么就攤上這事晚岭〔宓啵” “怎么了?”我有些...
    開封第一講書人閱讀 156,531評論 0 345
  • 文/不壞的土叔 我叫張陵,是天一觀的道長辅甥。 經(jīng)常有香客問我酝润,道長,這世上最難降的妖魔是什么璃弄? 我笑而不...
    開封第一講書人閱讀 56,309評論 1 282
  • 正文 為了忘掉前任要销,我火速辦了婚禮,結(jié)果婚禮上夏块,老公的妹妹穿的比我還像新娘疏咐。我一直安慰自己,他們只是感情好脐供,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,381評論 5 384
  • 文/花漫 我一把揭開白布浑塞。 她就那樣靜靜地躺著,像睡著了一般政己。 火紅的嫁衣襯著肌膚如雪酌壕。 梳的紋絲不亂的頭發(fā)上务豺,一...
    開封第一講書人閱讀 49,730評論 1 289
  • 那天茂腥,我揣著相機(jī)與錄音,去河邊找鬼削罩。 笑死沦泌,一個(gè)胖子當(dāng)著我的面吹牛糊昙,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播谢谦,決...
    沈念sama閱讀 38,882評論 3 404
  • 文/蒼蘭香墨 我猛地睜開眼释牺,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了回挽?” 一聲冷哼從身側(cè)響起没咙,我...
    開封第一講書人閱讀 37,643評論 0 266
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎厅各,沒想到半個(gè)月后镜撩,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體预柒,經(jīng)...
    沈念sama閱讀 44,095評論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡队塘,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,448評論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了宜鸯。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片憔古。...
    茶點(diǎn)故事閱讀 38,566評論 1 339
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖淋袖,靈堂內(nèi)的尸體忽然破棺而出鸿市,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 34,253評論 4 328
  • 正文 年R本政府宣布焰情,位于F島的核電站陌凳,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏内舟。R本人自食惡果不足惜合敦,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,829評論 3 312
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望验游。 院中可真熱鬧充岛,春花似錦、人聲如沸耕蝉。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,715評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽垒在。三九已至蒜魄,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間爪膊,已是汗流浹背权悟。 一陣腳步聲響...
    開封第一講書人閱讀 31,945評論 1 264
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留推盛,地道東北人峦阁。 一個(gè)月前我還...
    沈念sama閱讀 46,248評論 2 360
  • 正文 我出身青樓,卻偏偏與公主長得像耘成,于是被迫代替她去往敵國和親榔昔。 傳聞我的和親對象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,440評論 2 348

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