MySQL備份命令mysqldump參數說明與示例

1. 語法選項說明

  • -h, --host=name
    主機名
  • -P[ port_num], --port=port_num
    用於鏈接MySQL服務器的的TCP/IP端口號html

  • --master-data
    這個選項能夠把binlog的位置和文件名添加到輸出中,若是等於1,將會打印成一個CHANGE MASTER命令;若是等於2,會加上註釋前綴。而且這個選項會自動打開--lock-all-tables,除非同時設置了--single-transaction(這種狀況下,全局讀鎖只會在開始dump的時候加上一小段時間,不要忘了閱讀--single-transaction的部分)。在任何狀況下,全部日誌中的操做都會發生在導出的準確時刻。這個選項會自動關閉--lock-tablesmysql

  • -x, --lock-all-tables
    鎖定全部庫中全部的表。這是經過在整個dump的過程當中持有全局讀鎖來實現的。會自動關閉--single-transaction--lock-tablessql

  • --single-transaction
    經過將導出操做封裝在一個事務內來使得導出的數據是一個一致性快照。只有當表使用支持MVCC的存儲引擎(目前只有InnoDB)時才能夠工做;其餘引擎不能保證導出是一致的。當導出開啓了--single-transaction選項時,要確保導出文件有效(正確的表數據和二進制日誌位置),就要保證沒有其餘鏈接會執行以下語句:ALTER TABLE, DROP TABLE, RENAME TABLE, TRUNCATE TABLE,這會致使一致性快照失效。這個選項開啓後會自動關閉--lock-tables數據庫

  • -l, --lock-tables
    對全部表加讀鎖。(默認是打開的,用--skip-lock-tables來關閉,上面的選項會把關閉-l選項)服務器

  • -F, --flush-logs
    在開始導出前刷新服務器的日誌文件。注意,若是你一次性導出不少數據庫(使用 -databases=--all-databases選項),導出每一個庫時都會觸發日誌刷新。例外是當使用了--lock-all-tables--master-data時:日誌只會被刷新一次,那個時候全部表都會被鎖住。因此若是你但願你的導出和日誌刷新發生在同一個肯定的時刻,你須要使用--lock-all-tables,或者--master-data配合--flush-logsui

  • --delete-master-logs
    備份完成後刪除主庫上的日誌。這個選項會自動打開``--master-data`。命令行

  • --opt
    -add-drop-table, --add-locks, --create-options, --quick, --extended-insert, --lock-tables, --set-charset, --disable-keys。(默認已開啓,--skip-opt關閉表示這些選項保持它的默認值)應該給你爲讀入一個MySQL服務器的儘量最快的導出,--compact差很少是禁用上面的選項。日誌

  • -q, --quick
    不緩衝查詢,直接導出至stdout。(默認打開,用--skip-quick來關閉)該選項用於轉儲大的表。
  • --set-charset
    SET NAMES default_character_set加到輸出中。該選項默認啓用。要想禁用SET NAMES語句,使用--skip-set-charset
  • --add-drop-tables
    在每一個CREATE TABLE語句前添加DROP TABLE語句。默認開啓。
  • --add-locks
    在每一個表導出以前增長LOCK TABLES而且以後UNLOCK TABLE。(爲了使得更快地插入到MySQL)。默認開啓。
  • --create-option
    在CREATE TABLE語句中包括全部MySQL表選項。默認開啓,使用--skip-create-options來關閉。
  • -e, --extended-insert
    使用全新多行INSERT語法,默認開啓(給出更緊縮而且更快的插入語句)code

  • -d, --no-data
    不寫入表的任何行信息。若是你只想獲得一個表的結構的導出,這是頗有用的。htm

  • --add-drop-database
    在create數據庫以前先DROP DATABASE,默認關閉,因此通常在導入時須要保證數據庫已存在。

  • --default-character-set=
    使用的默認字符集。若是沒有指定,mysqldump使用utf8。

  • -B, --databases
    轉儲幾個數據庫。一般狀況,mysqldump將命令行中的第1個名字參量看做數據庫名,後面的名看做表名。使用該選項,它將全部名字參量看做數據庫名。CREATE DATABASE IF NOT EXISTS db_nameUSE db_name語句包含在每一個新數據庫前的輸出中。

  • --tables
    覆蓋--database選項。選項後面的全部參量被看做表名。

  • -u[ name], --user=
    鏈接服務器時使用的MySQL用戶名。

  • -p[password], --password[=password]
    鏈接服務器時使用的密碼。若是你使用短選項形式(-p),不能在選項和密碼之間有一個空格。若是在命令行中,忽略了--password-p選項後面的 密碼值,將提示你輸入一個。

2. 示例

導出一個數據庫:

$ mysqldump -h localhost -uroot -ppassword \
--master-data=2 --single-transaction --add-drop-table --create-options --quick \
--extended-insert --default-character-set=utf8 \
--databases discuz > backup-file.sql

導出一個表:

$ mysqldump -u pak -p --opt --flush-logs pak t_user > pak-t_user.sql

將備份文件壓縮:

$ mysqldump -hhostname -uusername -ppassword --databases dbname | gzip > backup-file.sql.gz
對應的還原動做爲
gunzip < backup-file.sql.gz | mysql -uusername -ppassword dbname

導入數據庫:

mysql> use target_dbname
mysql> source /mysql/backup/path/backup-file.sql
或
$ mysql target_dbname <backup-file.sql

導入還有一個mysqlimport命令,暫未研究。

直接從一個數據庫向另外一個數據庫轉儲:

mysqldump -u用戶名 -p --opt dbname | mysql --host remote_host -C dbname2

關於增量備份與恢復請參考:MySQL增量備份與恢復實例

參考


原文連接地址:http://seanlook.com/2014/12/05/mysql_mysqldump_options_examples/

相關文章
相關標籤/搜索