Linux下mysql的備份和還原命令
Linux下MySQL的備份和還原
最近一直在更新一個專案,給現場部署,每次都需要備份一下資料庫(以防有問題可以還原回去)
Linux下的資料備份
直接寫命令吧:
mysqldump -u user_name -p --force data_base_name > ./data_base_name_[date].sql
mysqldump -u user_name -p -ntd -R --force data_base_name > ./data_base_name_function_[date].sql
上面兩條命令,一條用於匯出資料庫【data_base_name】中所有的表和檢視結構和資料;
下面一條用於匯出所有的函式和儲存過程;
Linux下的資料還原
使用 source
命令即可
介紹mysqldump的引數
mysqldump支援下面的選項:
-
—help,-?
顯示幫助訊息並退出。 -
–add-drop–database
在每個CREATE DATABASE
語句前新增DROP DATABASE
語句。 -
–add-drop-tables
在每個CREATE TABLE
DROP TABLE
語句。 -
–add-locking
用LOCK TABLES
和UNLOCK TABLES
語句引用每個錶轉儲。過載轉儲檔案時插入得更快。 -
–all–database,-A
轉儲所有資料庫中的所有表。與使用--database
選項相同,在命令列中命名所有資料庫。 -
–allow-keywords
允許建立關鍵字列名。應在每個列名前面加上表名字首。 -
–comments[={0|1}]
如果設定為 0,禁止轉儲檔案中的其它資訊,例如程式版本、伺服器版本和主機。–skip—comments與—comments=0的結果相同。 預設值為1,即包括額外資訊。 -
–compact
產生少量輸出。該選項禁用註釋並啟用--skip-add-drop-tables
、--no-set-names
、--skip-disable-keys
和--skip-add-locking
選項。 -
–compatible=name
產生與其它資料庫系統或舊的MySQL伺服器更相容的輸出。值可以為ansi、mysql323、mysql40、postgresql、oracle、mssql、db2、maxdb、no_key_options、no_tables_options或者no_field_options。要使用幾個值,用逗號將它們隔開。這些值與設定伺服器SQL模式的相應選項有相同的含義。
該選項不能保證同其它伺服器之間的相容性。它只啟用那些目前能夠使轉儲輸出更相容的SQL模式值。例如,–compatible=oracle 不對映Oracle型別或使用Oracle註釋語法的資料型別。 -
–complete-insert,-c
使用包括列名的完整的INSERT
語句。 -
–compress,-C
壓縮在客戶端和伺服器之間傳送的所有資訊(如果二者均支援壓縮)。 -
–create-option
在CREATE TABLE
語句中包括所有MySQL表選項。 -
–database,-B
轉儲幾個資料庫。通常情況,mysqldump將命令列中的第1個名字參量看作資料庫名,後面的名看作表名。使用該選項,它將所有名字參量看作資料庫名。CREATE DATABASE IF NOT EXISTS db_name
和USE db_name
語句包含在每個新資料庫前的輸出中。 -
–debug[=debug_options],-# [debug_options]
寫除錯日誌。debug_options字串通常為’d:t:o,file_name’。 -
–default-character-set=charset
使用charsetas預設字符集。如果沒有指定,mysqldump使用utf8
。 -
–delayed-insert
使用INSERT DELAYED
語句插入行。 -
–delete-master-logs
在主複製伺服器上,完成轉儲操作後刪除二進位制日誌。該選項自動啟用--master-data
。 -
–disable-keys,-K
對於每個表,用/*!40000 ALTER TABLE tbl_name DISABLE KEYS /;和/!40000 ALTER TABLE tbl_name ENABLE KEYS */;語句引用INSERT
語句。這樣可以更快地裝載轉儲檔案,因為在插入所有行後建立索引。該選項只適合MyISAM表。 -
–extended-insert,-e
使用包括幾個VALUES列表的多行INSERT
語法。這樣使轉儲檔案更小,過載檔案時可以加速插入。 -
–fields-terminated-by=…,–fields-enclosed-by=…,–fields-optionally-enclosed-by=…,–fields-escaped-by=…,–行-terminated-by=…
這些選項結合-T選項使用,與LOAD DATA INFILE
的相應子句有相同的含義。 -
–first-slave,-x
不贊成使用,現在重新命名為--lock-all-tables
。 -
–flush-logs,-F
開始轉儲前重新整理MySQL伺服器日誌檔案。該選項要求RELOAD許可權。請注意如果結合–all–database(或-A)選項使用該選項,根據每個轉儲的資料庫重新整理日誌。例外情況是當使用–lock-all-tables或–master-data的時候:在這種情況下,日誌只重新整理一次,在所有 表被鎖定後重新整理。如果你想要同時轉儲和重新整理日誌,應使用–flush-logs連同–lock-all-tables或–master-data。 -
–force,-f
在錶轉儲過程中,即使出現SQL錯誤也繼續。 -
–host=host_name,-h host_name
從給定主機的MySQL伺服器轉儲資料。預設主機是localhost。 -
–hex-blob
使用十六進位制符號轉儲二進位制字串列(例如,‘abc’ 變為0x616263)。影響到的列有BINARY、VARBINARY、BLOB。 -
–lock-all-tables,-x
所有資料庫中的所有表加鎖。在整體轉儲過程中通過全域性讀鎖定來實現。該選項自動關閉–single-transaction和–lock-tables。 -
–lock-tables,-l
開始轉儲前鎖定所有表。用READ LOCAL鎖定表以允許並行插入MyISAM表。對於事務表例如InnoDB和BDB,–single-transaction是一個更好的選項,因為它不根本需要鎖定表。
請注意當轉儲多個數據庫時,–lock-tables分別為每個資料庫鎖定表。因此,該選項不能保證轉儲檔案中的表在資料庫之間的邏輯一致性。不同資料庫表的轉儲狀態可以完全不同。 -
–master-data[=value]
該選項將二進位制日誌的位置和檔名寫入到輸出中。該選項要求有RELOAD許可權,並且必須啟用二進位制日誌。如果該選項值等於1,位置和檔名被寫入CHANGE MASTER語句形式的轉儲輸出,如果你使用該SQL轉儲主伺服器以設定從伺服器,從伺服器從主伺服器二進位制日誌的正確位置開始。如果選項值等於2,CHANGE MASTER語句被寫成SQL註釋。如果value被省略,這是預設動作。
–master-data選項啟用–lock-all-tables,除非還指定–single-transaction(在這種情況下,只在剛開始轉儲時短時間獲得全域性讀鎖定。又見–single-transaction。在任何一種情況下,日誌相關動作發生在轉儲時。該選項自動關閉–lock-tables。 -
–no-create-db,-n
該選項禁用CREATE DATABASE /!32312 IF NOT EXISTS/ db_name語句,如果給出—database或–all–database選項,則包含到輸出中。 -
–no-create-info,-t
不寫重新建立每個轉儲表的CREATE TABLE語句。 -
–no-data,-d
不寫表的任何行資訊。如果你只想轉儲表的結構這很有用。 -
–opt
該選項是速記;等同於指定--add-drop-tables--add-locking --create-option --disable-keys--extended-insert --lock-tables --quick --set-charset
。它可以給出很快的轉儲操作併產生一個可以很快裝入MySQL伺服器的轉儲檔案。該選項預設開啟,但可以用–skip-opt禁用。要想只禁用確信用-opt啟用的選項,使用–skip形式;例如,–skip-add-drop-tables或–skip-quick。 -
–password[=password],-p[password]
連線伺服器時使用的密碼。如果你使用短選項形式(-p),不能在選項和密碼之間有一個空格。如果在命令列中,忽略了–password或-p選項後面的 密碼值,將提示你輸入一個。 -
–port=port_num,-P port_num
用於連線的TCP/IP埠號。 -
–protocol={TCP | SOCKET | PIPE | MEMORY}
使用的連線協議。 -
–quick,-q
該選項用於轉儲大的表。它強制mysqldump從伺服器一次一行地檢索表中的行而不是檢索所有行並在輸出前將它快取到記憶體中。 -
–quote-names,-Q
用‘`’字元引用資料庫、表和列名。如果伺服器SQL模式包括ANSI_QUOTES選項,用‘"’字元引用名。預設啟用該選項。可以用–skip-quote-names禁用,但該選項應跟在其它選項後面,例如可以啟用–quote-names的–compatible。 -
–result-file=file,-r file
將輸出轉向給定的檔案。該選項應用在Windows中,因為它禁止將新行‘\n’字元轉換為‘\r\n’回車、返回/新行序列。 -
–routines,-R
在轉儲的資料庫中轉儲儲存程式(函式和程式)。使用—routines產生的輸出包含CREATE PROCEDURE和CREATE FUNCTION語句以重新建立子程式。但是,這些語句不包括屬性,例如子程式定義者或建立和修改時間戳。這說明當過載子程式時,對它們進行建立時定義者應設定為過載使用者,時間戳等於過載時間。
如果你需要建立的子程式使用原來的定義者和時間戳屬性,不使用–routines。相反,使用一個具有mysql資料庫相應許可權的MySQL賬戶直接轉儲和過載mysql.proc表的內容。
該選項在MySQL 5.1.2中新增進來。在此之前,儲存程式不轉儲。 -
–set-charset
將SET NAMES default_character_set加到輸出中。該選項預設啟用。要想禁用SET NAMES語句,使用–skip-set-charset。 -
–single-transaction
該選項從伺服器轉儲資料之前發出一個BEGIN SQL語句。它只適用於事務表,例如InnoDB和BDB,因為然後它將在發出BEGIN而沒有阻塞任何應用程式時轉儲一致的資料庫狀態。
當使用該選項時,應記住只有InnoDB表能以一致的狀態被轉儲。例如,使用該選項時任何轉儲的MyISAM或HEAP表仍然可以更改狀態。
–single-transaction選項和–lock-tables選項是互斥的,因為LOCK TABLES會使任何掛起的事務隱含提交。
要想轉儲大的表,應結合--quick
使用該選項。 -
–socket=path,-S path
當連線localhost(為預設主機)時使用的套接字檔案。 -
–skip–comments
參見—comments選項的描述。 -
–tab=path,-T path
產生tab分割的資料檔案。對於每個轉儲的表,mysqldump建立一個包含建立表的CREATE TABLE語句的tbl_name.sql檔案,和一個包含其資料的tbl_name.txt檔案。選項值為寫入檔案的目錄。
預設情況,.txt資料檔案的格式是在列值和每行後面的新行之間使用tab字元。可以使用–fields-xxx和–行--xxx選項明顯指定格式。
註釋:該選項只適用於mysqldump與mysqld伺服器在同一臺機器上執行時。你必須具有FILE許可權,並且伺服器必須有在你指定的目錄中有寫檔案的許可。 -
–tables
覆蓋—database或-B選項。選項後面的所有參量被看作表名。 -
–triggers
為每個轉儲的錶轉儲觸發器。該選項預設啟用;用–skip-triggers禁用它。 -
–tz-utc
在轉儲檔案中加入SET TIME_ZONE=’+00:00’以便TIMESTAMP列可以在具有不同時區的伺服器之間轉儲和過載。(不使用該選項,TIMESTAMP列在具有本地時區的源伺服器和目的伺服器之間轉儲和過載)。–tz-utc也可以保護由於夏令時帶來的更改。–tz-utc預設啟用。要想禁用它,使用–skip-tz-utc。該選項在MySQL 5.1.2中加入。 -
–user=user_name,-u user_name
連線伺服器時使用的MySQL使用者名稱。 -
–verbose,-v
冗長模式。打印出程式操作的詳細資訊。 -
–version,-V
顯示版本資訊並退出。 -
–where=‘where-condition’, -w ‘where-condition’
只轉儲給定的WHERE條件選擇的記錄。請注意如果條件包含命令解釋符專用空格或字元,一定要將條件引用起來。
例如:
“–where=user=‘june’” “-w userid>1” “-w userid<1” -
–xml,-X
將轉儲輸出寫成XML。 -
還可以使用
--var_name=value
選項設定下面的變數:
- max_allowed_packet
客戶端/伺服器之間通訊的快取區的最大大小。最大為1GB。 - net_buffer_length
客戶端/伺服器之間通訊的快取區的初始大小。當建立多行插入語句時(如同使用選項–extended-insert或–opt),mysqldump建立長度達net_buffer_length的行。如果增加該變數,還應確保在MySQL伺服器中的net_buffer_length變數至少這麼大。 - 還可以使用–set-variable=var_name=value或-O var_name=value語法設定變數。然而,現在不贊成使用該語法。