1.Mysql自帶的備份工具
mysqldump 邏輯備份工具,支持所有引擎,MyISAM引擎是溫備,InnoDB引擎是熱備,備份速度中速,還原速度非常非常慢,但是在實現還原的時候,具有很大的操作餘地。具有很好的彈性。
mysqlhotcopy 物理備份工具,但只支持MyISAM引擎,基本上屬於冷備的範疇,物理備份,速度比較快。
2.文件系統備份工具
cp 冷備份,支持所有引擎,複製命令,只能實現冷備,物理備份。使用歸檔工具,cp命令,對其進行備份的,備份速度快,還原速度幾乎最快,但是靈活度很低,可以跨系統,但是跨平臺能力很差。
lvm 幾乎是熱備份,支持所有引擎,基於快照(LVM,ZFS)的物理備份,速度非常快,幾乎是熱備。隻影響數據幾秒鐘而已。但是創建快照的過程本身就影響到了數據庫在線的使用,所以備份速度比較快,恢復速度比較快,沒有什麼彈性空間,而且LVM的限制:不能對多個邏輯卷同一時間進行備份,所以數據文件和事務日誌等各種文件必須放在同一個LVM上。而ZFS則非常好的可以在多邏輯卷之間備份。
3.其它工具
ibbackup 商業工具 MyISAM是溫備份,InnoDB是熱備份 ,備份和還原速度都很快,這個軟件它的每服務器授權版本是5000美元。
xtrabackup 開源工具 MyISAM是溫備份,InnoDB是熱備份 ,是ibbackup商業工具的替代工具。
四、MySQL備份策略
1.策略一:直接拷貝數據庫文件(文件系統備份工具 cp)(適合小型數據庫,是最可靠的)
當你使用直接備份方法時,必須保證表不在被使用。如果服務器在你正在拷貝一個表時改變它,拷貝就失去意義。保證你的拷貝完整性的最好方法是關閉服務器,拷貝文件,然後重啓服務器。如果你不想關閉服務器,要在執行表檢查的同時鎖定服務器。如果服務器在運行,相同的制約也適用於拷貝文件,而且你應該使用相同的鎖定協議讓服務器“安靜下來”。當你完成了備份時,需要重啓服務器(如果關閉了它)或釋放加在表上的鎖定(如果你讓服務器運行)。要用直接拷貝文件把一個數據庫從一臺機器拷貝到另一臺機器上,只是將文件拷貝到另一臺服務器主機的適當數據目錄下即可。要確保文件是MyIASM格式或兩臺機器有相同的硬件結構,否則你的數據庫在另一臺主機上有奇怪的內容。你也應該保證在另一臺機器上的服務器在你正在安裝數據庫表時不訪問它們。
2.策略二:mysqldump備份數據庫(完全備份+增加備份,速度相對較慢,適合中小型數據庫)(MyISAM是溫備份,InnoDB是熱備份)
mysqldump 是採用SQL級別的備份機制,它將數據表導成 SQL 腳本文件,在不同的 MySQL 版本之間升級時相對比較合適,這也是最常用的備份方法。mysqldump 比直接拷貝要慢些。對於中等級別業務量的系統來說,備份策略可以這麼定:第一次完全備份,每天一次增量備份,每週再做一次完全備份,如此一直重複。而對於重要的且繁忙的系統來說,則可能需要每天一次全量備份,每小時一次增量備份,甚至更頻繁。爲了不影響線上業務,實現在線備份,並且能增量備份,最好的辦法就是採用主從複製機制(replication),在 slave 機器上做備份。
3.策略三:lvs快照從物理角度實現幾乎熱備的完全備份,配合二進制日誌備份實現增量備份,速度快適合比較煩忙的數據庫
前提:
數據文件要在邏輯捲上;
此邏輯卷所在卷組必須有足夠空間使用快照卷;
數據文件和事務日誌要在同一個邏輯捲上;
步驟:
(1).打開會話,施加讀鎖,鎖定所有表;
1 2 | mysql> FLUSH TABLES WITH READ LOCK; mysql> FLUSH LOGS; |
(2).通過另一個終端,保存二進制日誌文件及相關位置信息;
1 | mysql -uroot -p -e 'SHOW MASTER STATUS\G' > /path/to/master .info |
(3).創建快照卷
1 | lvcreate -L # -s -p r -n LV_NAME /path/to/source_lv |
(4).釋放鎖
1 | mysql> UNLOCK TABLES; |
(5).掛載快照卷,備份
1 2 | mount cp |
(6).刪除快照卷;
或者用現成的集成命令工具mylvmbackup(可以集成上面的命令集合,自動完成備份)
mylvmbackup --user=dba --password=xxx --mycnf=/etc/my.cnf --vgname=testvg --lvname=testlv --backuptype=tar --lvsize=100M --backupdir=/var/lib/backup
4.策略四:xtrabackup 備份數據庫,實現完全熱備份與增量熱備份(MyISAM是溫備份,InnoDB是熱備份),由於有的數據在設計之初,數據目錄沒有存放在LVM上,所以不能用LVM作備份,則用xtrabackup代替來備份數據庫
說明:Xtrabackup是一個對InnoDB做數據備份的工具,支持在線熱備份(備份時不影響數據讀寫),是商業備份工具InnoDB Hotbackup或ibbackup的一個很好的替代品。
Xtrabackup有兩個主要的工具:xtrabackup、innobackupex
xtrabackup 只能備份InnoDB和XtraDB兩種數據表,而不能備份MyISAM數據表。
innobackupex 是參考了InnoDB Hotbackup的innoback腳本修改而來的.innobackupex是一個perl腳本封裝,封裝了xtrabackup。主要是爲了方便的同時備份InnoDB和MyISAM引擎的表,但在處理myisam時需要加一個讀鎖。並且加入了一些使用的選項。如slave-info可以記錄備份恢復後作爲slave需要的一些信息,根據這些信息,可以很方便的利用備份來重做slave。
特點:
備份過程快速、可靠;
備份過程不會打斷正在執行的事務;
能夠基於壓縮等功能節約磁盤空間和流量;
自動實現備份檢驗;
還原速度快;
5.策略五:主從複製(replication)實現數據庫實時備份(集羣中常用)
6.總結
單機備份是完全備份(所有數據庫文件)+增量備份(備份二進制日誌)相結合!
集羣中備份是完全備份(所有數據庫文件)+增量備份(備份二進制日誌)+主從複製(replication)相結合的方法!
數據會完整備份到/root/mybackup/xtrabackup/中目錄名字爲當前的日期,xtrabackup會備份所有的InnoDB表,MyISAM表只是複製表結構文件、以及MyISAM、MERGE、CSV和ARCHIVE表的相關文件,同時還會備份觸發器和數據庫配置信息相關的文件。除了保存數據外還生成了一些xtrabackup需要的數據文件,詳解如下:
xtrabackup_checkpoints 備份類型(如完全或增量)、備份狀態(如是否已經爲prepared狀態)和LSN(日誌序列號)範圍信息;每個InnoDB頁(通常爲16k大小)都會包含一個日誌序列號,即LSN。LSN是整個數據庫系統的系統版本號,每個頁面相關的LSN能夠表明此頁面最近是如何發生改變的。
xtrabackup_binlog_info mysql服務器當前正在使用的二進制日誌文件及至備份這一刻爲止二進制日誌事件的位置。
xtrabackup_binary 備份中用到的xtrabackup的可執行文件。
backup-my.cnf 備份命令用到的配置選項信息。
xtrabackup_logfile 記錄標準輸出信息xtrabackup_logfile
17.總結
如果在增量備份後數據庫出現故障,我們需要通過完整備份+到現在爲止的所有增量備份+最後一次增量備份到現在的二進制日誌來恢復。
18.附註
單獨備份:
1 | innobackupex --user=root --password=123456 --defaults- file = /etc/my .cnf --database= test /root/mybackup |
備份並打包壓縮:
1 | innobackupex --user=root --password=123456 --defaults- file = /etc/my .cnf --database= test --stream= tar /root/mybackup/ | gzip > /root/mybackup/testdb . tar .gz |
帶時間戳:
1 | innobackupex --user=root --password=123456 --defaults- file = /etc/my .cnf --database= test --stream= tar /root/mybackup/ | gzip > /root/mybackup/ ` date +%F`_testdb. tar .gz |
備份信息輸出重定向到文件:
1 | innobackupex --user=root --password=123456 --defaults- file = /etc/my .cnf --database= test --stream= tar /root/mybackup/ 2> /root/mybackup/test .log | gzip 1> /root/mybackup/test . tar .gz |
說明:
1 2 3 4 5 6 7 | --stream #指定流的格式,目前只支持tar --database= test #單獨對test數據庫做備份 ,若是不添加此參數那就那就是對全庫做 2> /root/mybackup/test .log #輸出信息寫入日誌中 1> /root/mybackup/test . tar .gz #打包壓縮存儲到該文件中 解壓 tar -izxvf 要加-i參數,官方解釋 innobackupex: You must use -i (--ignore-zeros) option for extraction of the tar stream. 在備份完成後,數據尚且不能用於恢復操作,因爲備份的數據中可能會包含尚未提交的事務或已經提交但尚未同步至數據文件中的事務。 此時數據文件仍處理不一致狀態。“準備”的主要作用正是通過回滾未提交的事務及同步已經提交的事務至數據文件也使得數據文件處於一致性狀態。 |
5.策略五:主從複製(replication)實現數據庫實時備份(集羣中常用)