Mysql備份還有這麼多套路,還不瞭解下?

邏輯備份和物理備份

邏輯備份

邏輯備份用於備份數據庫的結構(CREAET DATABASE、CREATE TABLE)和數據(INSERT),這種備份類型適合數據量小、跨SQL服務器、須要修改數據等場景。如mysqldump命令就是產生一個邏輯備份工具,使用mysqldump輸出的文件包含CREATE TABLEINSERT語句,可以直接重建表內容和表結構。css

使用邏輯備份有如下優點和劣勢:mysql

優點
  • 可移植性高,SQL語句可直接適用於其餘SQL服務器;
  • 在數據恢復以前可增長、修改數據;
  • 數據恢復粒度小能夠是服務器、數據庫、表級別;
  • 使用文本格式,可讀性高;
劣勢
  • 備份時須要訪問mysql服務器,影響其餘客戶端;
  • 須要將數據轉換成邏輯格式(SQL,CSV);
  • 若是命令運行在客戶端,mysql服務器還須要將數據發送給客戶端;
  • 由於輸出格式爲文本文件,佔用空間較大;

物理備份

物理備份是包括存儲數據庫內容的目錄和文件的副本,這種類型的備份適用於須要在出現問題時快速恢復的大型重要數據庫。web

優點
  • 完整的Mysql文件和目錄備份,只須要複製文件不須要轉換,速度比邏輯備份更快;
  • 除了備份數據,還能備份配置文件和日誌文件;
  • 不須要運行Mysql服務器就能夠完成備份;
  • 備份工具簡單使用cp、scp、tar命令便可完成備份;
劣勢
  • 可移植性不高,恢復數據只適用於相同或相似的機器上;
  • 爲了保持數據庫文件的一致性,須要停機備份;
  • 恢復粒度不能按表或用戶恢復;

在線備份和離線備份

在線備份須要mysql服務器處理運行狀態,以便備份工具從mysql服務器中獲取數據。離線備份表示mysql服務器處理中止狀態。兩種備份形式也能夠稱爲「熱備份」和「冷備份「。sql

在線備份的主要特性

  • 備份不須要停機,對其餘客戶端影響較小其餘鏈接可以正常訪問mysql服務器(依賴操做類型,如讀操做);
  • 備份須要加鎖,以避免在備份期間對數據作出修改;

離線備份的主要特性

  • 備份期間服務器不可用;
  • 備份過程更簡單,不會受到客戶端的干擾;

邏輯備份(mysqldump使用)

mysqldump屬於邏輯備份命令,使用mysqldump備份的優點是它很是方便和靈活,能夠直接編輯輸出文件或者使用導入到其餘的SQL服務器中去,可是它不能用做備份大量數據的快速解決方案,對於大數據量,即便備份花費的時候能夠接受,可是恢復數據也可能會很是緩慢,由於執執行SQL語句會涉及磁盤I/O進行插入,建立索引等。mysqldump的使用方式很是簡單:shell

shellmysqldump [options] db_name [tbl_name ...]
shellmysqldump [options] --databases db_name ...
shellmysqldump [options] --all-databases
複製代碼

使用mysqldump備份時要注意:數據庫的一致狀態,在執行mysqldump命令時要保證數據不會再發生變動,保持數據的一致性有二種方法:數據庫

  • 使Mysql服務器只讀
  • 使用事務加上隔離級別:REPEATABLE READ

使用REPEATABLE READ事務隔離級別執行mysqldump命令(使用事務保持數據庫的一致狀態):服務器

mysqldump --master-data=2 \
 --flush-logs  \
 --single-transaction  \
 --all-databases > /backup/`date +%F-%H`-mysql-all.sql  
複製代碼

備份參數說明:微信

  • --master-data: 將二進制日誌文件的名稱和位置備份
  • --flush-logs: 開始備份以前刷新mysql服務器日誌文件
  • --single-transaction:開始備份以前設置事務隔離級別爲REPEATABLE READ而後發送一個START TRANSACTION命令。
  • --all-databases:備份全部數據庫

物理備份(複製原始文件)

爲了保證複製文件的完整性,備份原始文件最好是中止mysql服務器,複製原始文件備份由如下步驟完成:架構

  1. 中止mysql服務器
    $ mysqladmin shutdown
  2. 使用合適的工具複製原始數據文件
    $ tar cf /tmp/dbbackup.tar ./data
  3. 備份完成後,運行mysql服務器
    $ mysqld_safe

使用主從備份模式

使用mysqldumptar備份或多或少都會對業務產生影響,使用mysqldump備份須要對數據加鎖,加鎖就意味着其餘客戶端操做受到限制。使用tar命令須要中止服務器直接致使數據庫服務器不可用,有沒有辦法能解決這兩種問題呢?答案是有的,就是使用主從備份模式。app

在單機的基礎上增長一臺Slave機器對Master機器的數據進行同步:

開始備份時對Slave進行備份,這樣即便Slave停機或對數據加鎖也不會影響業務的正常使用,若是公司有條件或業務很是重要能夠選擇這種方案來備份數據。




歡迎關注微信公衆號《架構文摘》,高質量技術文章第一時間推送。

相關文章
相關標籤/搜索