前言:
備份的種類:邏輯備份(mysqldump),物理備份(xtrabackup)。對于數據量小的庫可以選擇邏輯備份估脆,數據量大就需要用到物理備份。
一座云、mysqldump
mysqldump相當于導出sql腳本疙赠。MyISAM引擎?zhèn)浞輹r付材,為了保持數據一致性,需要加上--lock-all-tables圃阳。
Innodb如果需要記錄binlog和position厌衔,還需要加上--master-data=2(如果=1也會記錄,只是不會注釋)捍岳。Innodb還需要加上--single-transaction參數富寿。這樣將設置事務的隔離級別為可重復讀,即REPEATABLE READ祟同,這樣能保證在一個事務中所有相同的查詢讀取到同樣的數據作喘,也就大概保證了在dump期間,如果其他innodb引擎的線程修改了表的數據并提交晕城,對該dump線程的數據并無影響泞坦。這個參數與--master-data=2一起加。如果開啟了gtid還需要加上--set-gtid-purged=off這個參數
二砖顷、xtrabackup
物理熱備份贰锁。備份原理大概就是同時備份數據和redolog來保持數據一致性。
具體步驟:
1滤蝠、innobackupex在啟動后豌熄,會先 fork 一個進程,啟動xtrabackup進程物咳,然后就等待xtrabackup備份完 ibd 數據文件者蠕;
2携兵、xtrabackup在備份 InnoDB 相關數據時,是有2種線程的,1種是 redo 拷貝線程逞壁,負責拷貝 redo 文件甸赃,1種是 ibd 拷貝線程宦赠,負責拷貝 ibd 文件骤坐;redo 拷貝線程只有一個,在 ibd 拷貝線程之前啟動油吭,在 ibd 線程結束后結束击蹲。xtrabackup進程開始執(zhí)行后,先啟動 redo 拷貝線程婉宰,從最新的 checkpoint 點開始順序拷貝 redo 日志歌豺;然后再啟動 ibd 數據拷貝線程,在xtrabackup拷貝 ibd 過程中心包,innobackupex進程一直處于等待狀態(tài)(等待文件被創(chuàng)建)世曾。
3、xtrabackup拷貝完成idb后,通知innobackupex(通過創(chuàng)建文件)轮听,同時自己進入等待(redo 線程仍然繼續(xù)拷貝);
4、innobackupex收到xtrabackup通知后岭佳,執(zhí)行FLUSH TABLES WITH READ LOCK(FTWRL)血巍,取得一致性位點,然后開始備份非 InnoDB 文件(包括 frm珊随、MYD述寡、MYI、CSV叶洞、opt鲫凶、par等)●帽伲拷貝非 InnoDB 文件過程中螟炫,因為數據庫處于全局只讀狀態(tài),如果在業(yè)務的主庫備份的話艺晴,要特別小心昼钻,非 InnoDB 表(主要是MyISAM)比較多的話整庫只讀時間就會比較長,這個影響一定要評估到封寞。
5然评、當innobackupex拷貝完所有非 InnoDB 表文件后,通知xtrabackup(通過刪文件) 狈究,同時自己進入等待(等待另一個文件被創(chuàng)建)碗淌;
6、xtrabackup收到innobackupex備份完非 InnoDB 通知后抖锥,就停止 redo 拷貝線程亿眠,然后通知innobackupexredo log 拷貝完成(通過創(chuàng)建文件);
7宁改、innobackupex收到 redo 備份完成通知后缕探,就開始解鎖,執(zhí)行UNLOCK TABLES还蹲;
8爹耗、最后innobackupex和xtrabackup進程各自完成收尾工作,如資源的釋放谜喊、寫備份元數據信息等潭兽,innobackupex等待xtrabackup子進程結束后退出。