MySQL備份與恢復

1.經過mysqldump命令進行數據備份mysql

        mysql數據庫的備份採用直接打包數據庫文件夾(注:InnoDB引擎不支持直接拷貝數據文件備份數據庫,因爲使用InnoDB引擎的庫或表是不能使用此種方式);或者使用專用的導出工具mysqldump。linux

        經過mysqldump命令能夠將指定的庫、表或所有的庫導出爲SQL腳本。sql

A.數據導出:數據庫

        格式1:導出指定庫中的部分表緩存

          •  Mysqldump[選項]庫名 [表名1][表名2] . .>/備份路徑/備份文件名服務器

        格式2:導出一個或多個完整的庫(包括其中全部的表)oracle

          •  Mysqldump[選項]--databases庫名1[庫名2]… >/備份路徑/備份文件名socket

        格式3:備份mysql服務器中的全部的庫函數

          •  Mysqldump[選項]--all-databases>/備份路徑/備份文件名工具

               其中「 -u 」用來指定數據庫的用戶名;「 -p 」用來指定數據庫的密碼

         格式 4:導出數據庫結構

           •  Mysqldump[選項] –d –add-drop-table 庫名 > /備份路徑/備份文件名

 

       例:將testdb庫的tb表導出爲tb.sql文件:

                 mysqldump -uroot -p  --opt testdb tb   > .\tb.sql

       例:將整個testdb庫導出爲testdb.sqltestdb.sql文件:

                 mysqldump -uroot -p  --opt testdb  > .\testdb.sql

       例:備份整個mysql服務器的全部庫,當導出數據量較大時,添加—opt選項以優化執行速度。

                 Mysqldump –u root –p –opt –all –databases > all-data.sql

        因爲備份整個庫或服務器全部庫,數據量大時會致使生成的文件很大,這時可以使用壓縮方式,在linux下,可使用gzip壓縮數據,命令以下:

                 Shell>mysqldump -uroot -p123456 testdb | gzip > testdb.sql.gz

         從壓縮文件直接恢復:

                   Shell>gzip < testdb.sql.gz | mysql -uroot -p123456 test1

     

B.查看備份文件內容:

        過濾出testdb.sql腳本中的數據庫操做語句:

         [root@ns ~]# grep -v "^--" testdb.sql | grep -v "^/" | grep -v "^$"

 

C.恢復數據庫:

        格式: mysql [選項] [庫名] [表名] < /備份路徑/備份文件名

        當備份文件中只包含表的備份,而不包括建立庫的語句時,則執行導入操做時必須指定庫名,且目標庫必須存在。

        例:從備份文件中tb.sql中將表導入到test1庫:

       首先查看test1庫:

mysql> use test1;

Database changed

mysql> show tables;

Empty set (0.00 sec)                                                                                                                                                          

         接着,將tb.sql導入test1庫中:

mysql -u root -p test1 < .\tb.sql

         再查看test1庫:

mysql> use test1;

Database changed

mysql> show tables;

+-----------------+

| Tables_in_test1 |

+-----------------+

| tb              |

+-----------------+

1 row in set (0.00 sec)

若備份文件中已經包括完整的庫信息,則執行導入操做時無需指定庫名。

        例:從備份文件all-data.sql恢復其中的全部庫:

mysql –u root –p < ./all-data.sql

 

D.使用Source命令導入數據

使用source命令須要進入mysql控制檯,選擇數據庫後,使用source /備份路徑/備份文件名  進行導入。用source命令能夠導入比較大的文件。

mysql>use dbtest;

mysql>set names utf8;

mysql>source D:/www/sql/back.sql;

經過source命令導入多個文件,能夠新建一個sou.sql文件,裏面存放下面的命令

例如:

source d:/a1.sql;

source d:/a2.sql;

這樣就能夠在一個source命令裏面導入多個sql文件了。

 

2.使用mysqlhotcopy進行數據庫備份

mysqlhotcopy:數據庫備份程序

mysqlhotcopy是一個Perl腳本,最初由Tim Bunce編寫並提供。它使用LOCK TABLES、FLUSH TABLES和cp或scp來快速備份數據庫。它是備份數據庫或單個表的最快的途徑,但它只能運行在數據庫目錄所在的機器上。mysqlhotcopy只用於備份MyISAM。它運行在Unix和NetWare中。

 

mysqlimport:數據導入程序

mysqlimport客戶端提供了LOAD DATA INFILEQL語句的一個命令行接口。mysqlimport的大多數選項直接對應LOAD DATA INFILE子句。

 

 

3.增量備份

 

 

 

4.定時備份

 

 

 

 

 

 

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、mysql32三、mysql40、postgresql、oracle、mssql、db二、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的相應子句有相同的含義。

·         --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條件選擇的記錄。請注意若是條件包含命令解釋符專用空格或字符,必定要將條件引用起來。

相關文章
相關標籤/搜索