MySQL備份工具之mysqldump使用


MySQL備份工具之mysqldump使用說明

一、備份分類

根據能否停用數據庫,將備份類型分為:
1. 冷備:數據庫服務停止后備份
2. 溫備:只能對數據庫進行讀操作,不能進行寫操作
3. 熱備:在線備份,可以對數據庫進行讀寫操作

根據是直接備份數據庫文件還是數據庫里面的數據,將備份類型分為:、
1. 物理備份:直接復制數據庫文件
2. 邏輯備份:將數據導出到文本文件中

根據備份是備份全部內容還是部分內容,將備份類型分為:
1. 完全備份:full backup,備份全部數據
2. 差異備份:fidderential backup,只備份上次完全備份以來變化的數據
3. 增量備份:incrementl backup,只備份上次完全增量備份以后的數據
注:因此數據庫備份策略一般是完全備份+增量備份,或者完全備份+差異備份

   
   
  
  
          

二、備份工具

mysqldump:是邏輯備份工具,mysqldump進行溫備份,備份時需要加上一個全局鎖,客戶端只能進行讀操作。

mysqlbackup:對於innodb引擎的表mysqlbackup可以進行熱備;但是對於非innodb表mysqlbackup就只能溫備了。

Xtrabackup:
1.xtrabackup是一種物理備份工具,通過協議連接到mysql服務端,然后讀取並復制innodb底層的"數據塊",完成所謂的"物理備份"。
2.支持對innodb進行熱備、增量備份、差量備份。
3.支持對myisam進行溫備,因為在備份myisam表時,會對myisam表添加讀鎖,而且不能對myisam表進行增量備份,每次備份myisam數據都是全量,即使名義上是增量,但是實際上仍然是全量。

注:innodb引擎熱備,myism引擎溫備。

   
   
  
  
          

三、備份工具mysqldump

常用選項:
--add-drop-database:每個數據庫創建之前添加drop數據庫語句
-A,--all-databases: Dump all the databases
-B,--databases: --databases db1 db2... 備份指定的多個庫
--x,--lock-all-tables:請求鎖定所有表之后在備份
-l,--lock-tables:鎖定指定的表
--single-transaction:能夠對InnoDB存儲引擎實現熱備
--events:為備份的數據庫備份事件
--routines:備份routines(存儲過程和函數)
--triggers:為每個備份的表備份trigger
-q,--quick:快速導出,備份時逐行讀取表而非一次全部行后緩沖在內存中。在備份大表時有用。
-F,--flush-logs:備份前,請求到鎖之后滾動日志
--all-tablespaces,-Y: 備份所有表空間
--force, -f:即使發現sql錯誤,仍然繼續備份
--no-data, -d:只導出表結構
--tables:覆蓋 --databases or -B選項,后面所跟參數被視作表名
--add-drop-table:在每個創建數據庫表語句前添加刪除數據庫表的語句
--add-locks:備份數據庫表時鎖定數據庫表;
--comments:添加注釋信息;
--compact:壓縮模式,產生更少的輸出
--complete-insert:輸出完成的插入語句
--default-character-set:指定默認字符集
--host:指定要備份數據庫的服務器;
--lock-tables:備份前,鎖定所有數據庫表
--no-create-db:禁止生成創建數據庫語句
--no-create-info:禁止生成創建數據庫庫表語句
--password:連接MySQL服務器的密碼
--port:MySQL服務器的端口號
--user:連接MySQL服務器的用戶名
--socket,-S:指定連接mysql的socket文件位置

--master-data=[0|1|2]:記錄二進制日志文件及位置
0表示不記錄
1表示記錄change master語句
2記錄為注釋的change master語句

--opt是quick,add-drop-table,add-locks,extended-insert,lock-tables幾個參數的合稱,一般都要使用

注:備份和恢復的過程比較慢,很難實現差異或增量備份恢復,如果目標庫不存在,需要事先手動創建。

本次實驗操作用的是mariadb,默認引擎為innodb
下面用mysqldump工具進行mysql數據庫備份操作:

方法一:鎖表,滾動日志,備份
MariaDB [(none)]> flush tables with read lock;  #鎖表,只能讀不能寫
Query OK, 0 rows affected (0.00 sec)

MariaDB [(none)]> flush logs;  #滾動日志
Query OK, 0 rows affected (0.00 sec)

mysqldump -uroot -p123456  --databases zabbix | gzip > /opt/zabbix.sql.gz

方法二:適用於MyISAM存儲引擎
mysqldump -uroot -p123456 --database zabbix --lock-all-tables --flush-logs | gzip > /opt/zabbix.sql.gz

方法三:使用於innodb存儲引擎,innodb支持熱備,mariadb默認支持innodb引擎
mysqldump -uroot -p123456 --database zabbix --single-transaction --flush-logs | gzip > /opt/zabbix.sql.gz

擴展:既然熟悉了mysqldump命令,那么可不可以寫一個mysql的備份腳本呢?同時用郵件的方式發送通知給管理員?


總結:mysqldump備份方式是采用的邏輯備份,其最大的缺陷是備份和恢復速度較慢,如果數據庫大於50G,mysqldump備份就不太適合。   

   
   
  
  
          

四、使用mysqldump進行增量備份


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM