MySQL備份與恢復




一:備份的類型vue

    1.1按數據庫服務器的狀態mysql

    1.2按備份文件的類型sql

    1.3備份數據庫的內容數據庫



二:備份策略bash

    2.1備份應該備份什麼?服務器

    2.2物理備份仍是邏輯備份?ide

    2.3備份策略函數




三:MySQL備份工具工具

    3.1 mysqldumpspa

    3.2 mysqlhotcopy

    3.3 ibackup

    3.4 xtrabackup




1.1按數據庫服務器的狀態

    熱備份:在線備份,讀寫操做不受影響

    溫備份:能讀不能寫,僅能執行讀操做

    冷備份:離線備份,讀寫操做都不能進行




1.2按備份文件的類型

    物理備份:直接備份數據文件

    邏輯備份:將數據導出到文本文件中



1.3備份數據庫的內容

    徹底備份:備份所有數據,多是某個庫的所有數據,也多是全部庫的所有數據

    增量備份:僅備份上次徹底備份或增量備份之後變化的數據

    差別備份:僅備份上次徹底備份之後變化的數據



2.1備份應該備份什麼?

    數據、配置文件、二進制日誌、事務日誌




2.2物理備份仍是邏輯備份?

    物理備份:速度快

    邏輯備份:速度慢、丟失浮點數精度、能夠方便使用文本處理工具直接對其處理、可移植能力好、跨MySQL服務器版本



2.3備份策略

    根據數據量的大小,能夠作不一樣的選擇,例如:一週一次徹底,一天一次增量或差別或者一個月一次徹底備份,一天一次增量或者差別備份

    徹底+增量      

    徹底+差別



3.1mysqldump邏輯備份工具、MyISAM(溫備份)InnoDB(熱備份)

3.1.1備份單個數據庫或庫中的特定表

    db_name[tb1][tb2]備份指定數據庫,不包括建立數據庫的命令,因此恢復的時候必須手動的建立數據庫

mysqldump -uroot -p mydb > /root/mydb.sql

wKioL1VkfWqjzsKLAACievyamzU103.jpg

wKiom1Vke9qg9GztAAFbZW6mxsU043.jpg

注意:以上的方式是在MySQL服務器運行期間執行的備份,若是在備份的過程當中有數據插入,會致使數據的不一致。因此在備份的時候必定要鎖表


wKioL1VkfZijWMDIAACC9p7X_kc291.jpg

wKiom1VkfAjDkuBMAABjEDsCMD8163.jpg

wKioL1VkfZixwilPAABM8f77cmc006.jpg

wKiom1VkfAjj_03JAABhkPSSgY0911.jpg

wKioL1VkfZiDmI6_AABY8Ety-sE242.jpg

wKiom1VkfAmjWa5VAADmc56lbmM645.jpg

注意:最後一條數據沒有在備份文件中,因此如要要拿剛纔的備份文件去恢復,是不可以恢復到服務器出事故以前的狀態的,可是能夠去二進制日誌文件中查找讀出來,可是到二進制日誌文件中查找的時候,怎麼知道剛纔插入數據的時間點呢?還原的時候應該是徹底備份+徹底備份之後的事件進行恢復,可是怎麼知道二進制日誌文件當中剛纔從哪一個事件開始的?或者說哪一個位置?哪一個時間點?並且每次還得手動記錄存放於哪一個二進制日誌文件中。



3.1.2 --master-date={0|1|2}

    0表示不記錄二進制日誌文件及其事件位置

    1表示以CHANGE MASTER TO 的方式記錄二進制日誌文件位置,可用於恢復後直接啓動服務器

    2表示以CHANGE MASTER TO的方式記錄二進制日誌文件位置,可是默認被註釋掉了

wKioL1VkfmHTzAh5AABcHeVPFaQ421.jpg

wKiom1VkfNKjJA2tAABOsn4_2co964.jpg

wKiom1VkfNLAehUMAABnMF24vps828.jpg

wKioL1VkfmLhWH3IAABXecN98Rs520.jpg

wKioL1Vkfm-BLLbnAACNh-4G0kg894.jpg

wKiom1VkfOCSTZH1AAD_zNVUdOg003.jpg

wKioL1Vkfm-x5BYxAAFwPDaLvO0408.jpg




3.1.3--lock-all-tables:鎖定全部表

 

3.1.4--flush-logs:執行日誌滾動      

 

3.1.5若是指定庫中的表類型都爲InnoDB,可以使用--single-transaction啓動熱備,使用它的時候就不須要在使用--lock-all-tables選項了,它會自動釋加鎖

 

3.1.6備份多個庫

    --all-databases備份全部庫

    --databases DB_NAME1,DB_NAME2...備份指定庫

注:這兩個選項都會自動建立CREATEDATABASE命令,因此還原的時候就不用在手動指定庫了

wKioL1Vkfq6xuj8PAABJhZlM8dc261.jpg



3.1.7其它選項

    --event:備份數據庫的事件調度器

    --routines:備份存儲過程和存儲函數

    --triggers:備份觸發器

 

3.1.8執行備份與還原

    備份策略:周徹底+日增量

    徹底備份:mysql>mysqldump

    增量備份:備份二進制日誌文件(flush logs



模擬徹底備份,而後天天備份增量

1.假如如今是第一次執行mydb數據庫的徹底備份

wKiom1VkfWyBqtAZAACxHfwGrqo672.jpg

wKioL1VkfvzDvue7AABJgzbaGPo326.jpg



2.執行完徹底備份之後,進入數據庫作一些操做,模擬這些操做是在次日用戶作的

wKiom1VkfY6DxX0CAACxWywQiRI296.jpg



3.而後模擬執行次日的增量備份

wKiom1Vkfdfja97nAABTA1W3sYM510.jpg


4.mysql-bin.000019是第一天的增量

wKioL1Vkf5uB-yAMAADNfoB2vVw952.jpg

wKiom1VkfgzT4vOjAABeQZNle3U018.jpg

wKioL1Vkf5vgdUNrAAA6B5-go-s480.jpg


5.模擬到了次日了,增長了一些信息

wKiom1VkfizDgLTIAACcDt7VoM0644.jpg


6.假如一不當心把整個數據庫給刪了,假如二進制日誌文件和數據沒放到同一目錄下

wKioL1Vkf9egfMTOAABbwJ96QRk625.jpg



7.關閉mysql服務,初始化數據庫,啓動mysql服務

wKioL1VkgArxPog9AACFRwQyeJ0285.jpg

wKiom1VkfnuB2SMoAAC4-_h7oyk582.jpg

wKioL1VkgAuxEw0kAACq-2DiBrk537.jpg



8.開始使用備份文件進行數據庫恢復

wKiom1VkfsXhesMaAABgtibKbTE880.jpg

wKioL1VkgFXz3_zbAADNg2y7piE747.jpg

wKiom1VkfsXxJp4SAACYkYXCTfk006.jpg

wKioL1VkgFXwIhVkAABmLEolhYQ193.jpg

wKiom1VkfsXgebzYAACJtC47TVY448.jpg



注意:此時尚未恢復到數據庫出事故前一刻的狀態,須要執行數據庫出事故前一刻的二進制日誌文件進行最終的恢復

wKioL1VkgH-ihqzHAABhS9t8i_Q516.jpg



mysqldump -uroot -p --master-data=2 --flush-logs --all-databases --single-transaction --events --ignore-table=mysql.evnets > /root/full_database.sql
相關文章
相關標籤/搜索