MySQL邏輯備份工具mysqldump
阿新 • • 發佈:2018-11-17
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檔案