1. 程式人生 > >MySQL基礎之 mydump備份

MySQL基礎之 mydump備份

備份一個數據庫

mysqldump命令備份一個數據庫的基本語法:

mysqldump  -u user -p pwd  dbname > Backup.sql

我們來講解一下備份的檔案都包含了什麼?-- MySQL dump 10.13 Distrib 5.5.20, for Win32 (x86)--

-- Host: 127.0.0.1    Database: school
-- ------------------------------------------------------
-- Server version    5.5.20-log

/*!40101 SET @
[email protected]
@CHARACTER_SET_CLIENT
*/; /*!40101 SET @[email protected]@CHARACTER_SET_RESULTS */; /*!40101 SET @[email protected]@COLLATION_CONNECTION */; /*!40101 SET NAMES utf8 */; /*!40103 SET @[email protected]@TIME_ZONE */; /*!40103 SET TIME_ZONE='+00:00' */; /*!40014 SET @[email protected]@UNIQUE_CHECKS, UNIQUE_CHECKS=0
*/; /*!40014 SET @[email protected]@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */; /*!40101 SET @[email protected]@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */; /*!40111 SET @[email protected]@SQL_NOTES, SQL_NOTES=0 */; -- -- Table structure for table `book` -- DROP TABLE IF EXISTS `book`; /*!40101 SET @saved_cs_client = @@character_set_client
*/; /*!40101 SET character_set_client = utf8 */; CREATE TABLE `book` ( `bookid` int(11) NOT NULL, `bookname` varchar(255) NOT NULL, `authors` varchar(255) NOT NULL, `info` varchar(255) DEFAULT NULL, `comment` varchar(255) DEFAULT NULL, `year_publication` year(4) NOT NULL, KEY `BkNameIdx` (`bookname`) ) ENGINE=MyISAM DEFAULT CHARSET=utf8; /*!40101 SET character_set_client = @saved_cs_client */; -- -- Dumping data for table `book` -- LOCK TABLES `book` WRITE; /*!40000 ALTER TABLE `book` DISABLE KEYS */; INSERT INTO `book` VALUES (1,'鍓戝湥','灝忔槑','13','hao',2013); /*!40000 ALTER TABLE `book` ENABLE KEYS */; UNLOCK TABLES;
/*!40103 SET [email protected]_TIME_ZONE */; /*!40101 SET [email protected]_SQL_MODE */; /*!40014 SET [email protected]_FOREIGN_KEY_CHECKS */; /*!40014 SET [email protected]_UNIQUE_CHECKS */; /*!40101 SET [email protected]_CHARACTER_SET_CLIENT */; /*!40101 SET [email protected]_CHARACTER_SET_RESULTS */; /*!40101 SET [email protected]_COLLATION_CONNECTION */; /*!40111 SET [email protected]_SQL_NOTES */; -- Dump completed on 2014-07-23 22:04:16

我們看到檔案中以“ - ”開頭的都表示註釋。以“ /*! ”開頭,“ */ ”結尾的語句為MYSQL可以執行的註釋。旨在說明mysql具有可移植性。

備份檔案的上半部分的一些SET語句,這些語句將一些系統變數值賦給使用者定義變數,目的是確保被恢復的資料庫的系統變數和原來備份時的變數相同。

備份檔案的最後幾行MYSQL使用SET語句恢復伺服器系統變數原來的值。

還有一點需要注意:備份檔案中的MYSQL可執行註釋語句,以“40101”數字開頭的,這些數字代表了MYSQL版本號,告訴我們,這些語句只有在制定的MYSQL版本或者比該版本高的情況下才能執行。40101代表版本:4.01.01版本。

 

備份一個數據庫中的某個表

mysqldump  -u user  -p pwd dbname table1 table2  table3... >  Backup.sql

備份多個數據庫

mysqldump  -u root -p pwd  --databases dbname1  dbname2  dbname3  .... > Backup.sql

備份MYSQL中全部的資料庫

mysqldump  -u root -p pwd  --all-databases > Backup.sql

最後講一下mysqldump語法說明:

-h, --host=name
主機名
-P[ port_num], --port=port_num
用於連線MySQL伺服器的的TCP/IP埠號

--master-data
這個選項可以把binlog的位置和檔名新增到輸出中,如果等於1,將會列印成一個CHANGE MASTER命令;如果等於2,會加上註釋字首。並且這個選項會自動開啟--lock-all-tables,除非同時設定了--single-transaction(這種情況下,全域性讀鎖只會在開始dump的時候加上一小段時間,不要忘了閱讀--single-transaction的部分)。在任何情況下,所有日誌中的操作都會發生在匯出的準確時刻。這個選項會自動關閉--lock-tables。

-x, --lock-all-tables
鎖定所有庫中所有的表。這是通過在整個dump的過程中持有全域性讀鎖來實現的。會自動關閉--single-transaction和--lock-tables。

--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-logs。

--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語法,預設開啟(給出更緊縮並且更快的插入語句)

-d, --no-data
不寫入表的任何行資訊。如果你只想得到一個表的結構的匯出,這是很有用的。

--add-drop-database
在create資料庫之前先DROP DATABASE,預設關閉,所以一般在匯入時需要保證資料庫已存在。

--default-character-set=
使用的預設字符集。如果沒有指定,mysqldump使用utf8。

-B, --databases
轉儲幾個資料庫。通常情況,mysqldump將命令列中的第1個名字參量看作資料庫名,後面的名看作表名。使用該選項,它將所有名字參量看作資料庫名。CREATE DATABASE IF NOT EXISTS db_name和USE db_name語句包含在每個新資料庫前的輸出中。

--tables
覆蓋--database選項。選項後面的所有參量被看作表名。

-u[ name], --user=
連線伺服器時使用的MySQL使用者名稱。

-p[password], --password[=password]
連線伺服器時使用的密碼。如果你使用短選項形式(-p),不能在選項和密碼之間有一個空格。如果在命令列中,忽略了--password或-p選項後面的 密碼值,將提示你輸入一個。

注意:如果執行mysqldump沒有--quick或--opt選項,mysqldump在轉儲結果前將整個結果集裝入記憶體,如果轉儲大資料庫可能會出現問題,該選項預設啟用,但可以使用--skip-opt禁用。如果使用最新版本的mysqldump程式備份資料,並用於恢復到比較舊版本的mysql伺服器中,則不要使用--opt選項.