1. 程式人生 > >MySQL邏輯備份工具mysqldump

MySQL邏輯備份工具mysqldump

mysqldump

簡介

mysqldump這個程式最開始是Igor Romanenko寫的。它是一個MySQL/MariaDB邏輯備份的工具,備份的邏輯就是將指定的資料庫/表中的資料以SQL語句的形式一條一條匯出。還原的時候也是執行一條條sql語句,達到還原的目的。

用法

shell> mysqldump [options] db_name [tbl_name ...]  #備份指定庫中的表
shell> mysqldump [options] --databases db_name ...   #備份指定資料庫,可以多個
shell> mysqldump [options] --all-databases   #備份所有庫

常用選項

  • -A, --all-databases
    備份所有資料庫
  • –add-drop-database
    在每次建立之前新增DROP DATABASE。通常與–all-
  • –compact
    提供較少的詳細輸出(對除錯很有用)。禁用結構註釋和頁首/頁尾構造。
  • -E, --events
    匯出事件
  • -F, --flush-logs
    在開始備份之前重新整理MariaDB伺服器binlog日誌。如果將此選項與–databases=or --all-databases選項結合使用,則會為每個備份的資料庫重新整理日誌。例外情況是使用–lock-all-tables或–master-data:在這種情況下,日誌只重新整理一次,對應於所有表被鎖定的時刻。如果你希望你的轉儲和重新整理日誌在同一確切的時刻發生,你應該使用–flush-logs與一起兩種–lock-all-tables或–master-data。
  • -f, --force
    即使在錶轉儲期間發生SQL錯誤,也要繼續。
  • -h name, --host=name
    從給定主機上的MariaDB或MySQL伺服器連線並備份資料。預設主機是localhost
  • –ignore-table=name
    不要備份指定的表。要指定多個要忽略的表,請多次使用該指令,每個表使用一次。必須使用資料庫和表名指定每個表,例如,–ignore-table=database.table。
  • -x, --lock-all-tables
    鎖定所有資料庫中的所有表。這是通過在整個轉儲期間獲取全域性讀鎖來實現的。指定–single-transaction和–lock-tables的時候此選項自動關閉
  • –log-error=name
    通過將警告和錯誤附加到指定檔案來記錄警告和錯誤。預設是不進行日誌記錄。
  • –master-data[=#]
    使binlog日誌位置和檔名附加到輸出,如果該選項設定為1(預設值),則將其作為CHANGE MASTER命令輸出; 如果設定為2,則該命令將以註釋符號作為字首。除非另有說明,否則此–master-data選項將開啟。在MariaDB 5.3之前,這將在轉儲開始時短時間內進行全域性讀鎖定
  • -p[passwd]
    連線伺服器時使用的密碼
  • -q, --quick
    此選項對於轉儲大型表非常有用。它強制mysqldump一次從伺服器一行檢索表的行,然後將結果直接輸出到stdout,而不是檢索整個行集並在寫出之前在記憶體中緩衝它。預設為開,用於–skip-quick禁用。
  • –single-transaction
    此選項在備份資料之前向伺服器傳送START TRANSACTION SQL語句。它僅適用於InnoDB之類的事務表,使用此選項時,應記住只有InnoDB表以一致狀態備份。單事務功能不僅取決於引擎是事務性的還是能夠REPEATABLE-READ,還取決於START TRANSACTION WITH CONSISTENT SNAPSHOT。
    該–single-transaction選項與–lock-tables選項互斥,因為LOCK TABLES導致任何掛起的事務被隱式提交。因此,此選項自動關閉–lock-tables
    要轉儲大表,您應該將–single-transaction選項與–quick。
  • -u name, --user=name
    連線到伺服器時使用的MariaDB/MySQL使用者名稱

例項

備份所有庫,並儲存到~/alldb_backup.sql

備份所有庫,並儲存到~/alldb_backup.sql
mysqldump -uroot -pcentos --flush-logs --quick --single-transaction --master-data=2 --all-databases> ~/alldb_backup.sql

還原
mysql -uroot -pcentos < ~/alldb_backup.sql

備份單個hellodb單個庫

mysqldump -uroot -pcentos --flush-logs --quick --single-transaction --databases hellodb > ~/hellodb_backup.sql
還原
mysql -uroot -pcentos < ~/hellodb.sql

備份hellodb資料庫中的students表

mysqldump -uroot -pcentos --flush-logs --quick --single-transaction hellodb students > ~/hellodb_students_backup.sql
還原
mysql -uroot -pcentos hellodb < ~/hellodb_students_backup.sql

   注意 
   還原的時候可以先關閉binlog日誌,不然資料會再次寫到binlog日誌中
    set @@session.sql_log_bin=off
    source sql檔案