MySQL心得8-1-使用客戶端程序備份和恢復
1. 備份和恢復需求分析
數據庫中的數據丟失或被破壞可能是由於以下原因:
(1)計算機硬件故障。由於使用不當或產品質量等原因,計算機硬件可能會出現故障,不能使用。如硬盤損壞會使得存儲於其上的數據丟失。
(2)軟件故障。由於軟件設計上的失誤或用戶使用的不當,軟件系統可能會誤操作數據引起數據破壞。
(3)病毒。破壞性病毒會破壞系統軟件、硬件和數據。
(4)誤操作。如用戶誤使用了諸如DELETE、UPDATE等命令而引起數據丟失或破壞。
(5)自然災害。如火災、洪水或地震等,它們會造成極大的破壞,會毀壞計算機系統及其數據。
(6)盜竊。一些重要數據可能會遭竊。 www.2cto.com
因此,必須制作數據庫的復本,即進行數據庫備份,在數據庫遭到破壞時能夠修復數據庫,即進行數據庫恢復,數據庫恢復就是把數據庫從錯誤狀態恢復到某一正確狀態。
備份和恢復數據庫也可以用於其他目的,如可以通過備份與恢復將數據庫從一個服務器移動或復制到另一個服務器。
2. 數據恢復的手段
有多種可能會導致數據表的丟失或者服務器的崩潰,一個簡單的DROP TABLE或者DROP DATABASE的語句,就會讓數據表化為烏有。更危險的是DELETE *FROM table_name,可以輕易地清空數據表,而這樣的錯誤是很容易發生的。
因此,擁有能夠恢復的數據對於一個數據庫系統來說是非常重要的。MySQL有三種保證數據安全的方法。
(1)數據庫備份:通過導出數據或者表文件的拷貝來保護數據。
(2)二進制日志文件:保存更新數據的所有語句。
(3)數據庫復制:MySQL內部復制功能建立在兩個或兩個以上服務器之間,通過設定它們之間的主從關系來實現的。其中一個作為主服務器,其他的作為從服務器。在此主要介紹前兩種方法。
數據庫恢復就是當數據庫出現故障時,將備份的數據庫加載到系統,從而使數據庫恢復到備份時的正確狀態。
恢復是與備份相對應的系統維護和管理操作,系統進行恢復操作時,先執行一些系統安全性的檢查,包括檢查所要恢復的數據庫是否存在、數據庫是否變化及數據庫文件是否兼容等,然後根據所采用的數據庫備份類型采取相應的恢復措施。
3. 使用客戶端程序備份和恢復
MySQL提供了很多免費的客戶端程序和實用工具,不同的MySQL客戶端程序可以連接服務器以訪問數據庫或執行不同的管理任務。這些程序不與服務器進行通信,但可以執行MySQL相關的操作。在MySQL目錄下的BIN子目錄中存儲著這些客戶端程序。
這裡簡單介紹一下mysqldump程序和mysqlimport程序。使用客戶端的方法:打開DOS終端,進入BIN目錄,路徑為:C:\Program Files\MySQL\MySQLServer 5.1\bin,後面介紹的客戶端命令都在此處輸入, www.2cto.com
1). 使用mysqldump備份數據
mysqldump客戶端也可用於備份數據,它比SQL語句多做的工作是可以在導出的文件中包含表結構的SQL語句,因此可以備份數據庫表的結構,而且可以備份一個數據庫,甚至整個數據庫系統。
(1_1)備份表
命令格式:mysqldump[options] db_name [tables] > filename
說明:options是mysqldump命令支持的選項,可以通過執行mysqldump -help命令得到mysqldump選項表及幫助信息,這裡不詳細列出。db_name是數據庫名,後面可以跟需要備份的表名。Filename為最後備份的文件名,如果該語句中有多個表,則都保存在這個文件中,文件默認的保存地址是MySQL的bin目錄下。如果要保存在特定位置,可以指定其具體路徑。注意,文件名在目錄中不能已經存在,否則新的備份文件將會將原文件覆蓋,造成不必要的麻煩。
同其他客戶端程序一樣,備份數據時需要使用一個用戶賬號連接到服務器,這需要用戶手工提供參數或在選項文件中修改有關值。參數格式為:-h[hostname] -u[username] -p[password]
其中,-h後是主機名,-u後是用戶名,-p是用戶密碼,-p選項和密碼之間不能有空格。
例: 使用mysqldump備份XS表和KC表。具體命令如下:
mysqldump -h localhost -u root -p123456XSCJ XS KC > twotables.sql
說明:如果是本地服務器,-h選項可以省略。在MySQL的bin目錄下可以看到,已經保存了一個.sql格式的文件,文件中存儲了創建XS表和KC表的一系列SQL語句。
注意:若在命令中沒有表名,則備份整個數據庫。
(1_2)備份數據庫
mysqldump程序還可以將一個或多個數據庫備份到一個文件中。
命令格式:
mysqldump [options] --databases DB1[DB2 DB3...] > filename
例: 備份XSCJ數據庫和mysql數據庫到D盤FILE文件夾下。
命令如下: mysqldump -uroot -p123456 --databases XSCJmysql>D:/FILE/data.sql
說明:命令執行完後,在FILE文件夾下的data.sql文件被創建了,其中存儲了XSCJ數據庫和mysql數據庫的全部SQL語句。 www.2cto.com
mysql還能備份整個數據庫系統,即系統中的所有數據庫。
例:備份MySQL服務器上的所有數據庫。使用如下命令:
mysqldump -uroot -p123456--all-databases>all.sql
雖然用mysqldump導出表的結構很有用,但是在恢復數據時,如果數據量很大,眾多SQL語句將使恢復的效率降低。可以通過使用--tab=選項,分開數據和創建表的SQL語句。--tab=選項會在選項中“=”後面指定的目錄裡,分別創建存儲數據內容的.txt格式文件和包含創建表結構的SQL語句的.sql格式文件。該選項不能與--databases或--all-databases同時使用,並且mysqldump必須運行在服務器主機上。
例: 將XSCJ數據庫中所有表的表結構和數據都分別備份到D盤FILE文件夾下。命令如下:
mysqldump -uroot -p123456 --tab=D:/FILE/ XSCJ
其效果是在目錄FILE中生成6個文件,分別是xs.txt、xs.sql、kc.txt、kc.sql、xs_kc.txt和xs_kc.sql。
(1_3)恢復數據庫
mysqldump程序備份的文件中存儲的是SQL語句的集合,用戶可以將這些語句還原到服務器中以恢復一個損壞的數據庫。
例:假設XSCJ數據庫損壞,用備份文件將其恢復。
備份XSCJ數據庫的命令為:
mysqldump -uroot -p123456 XSCJ>XSCJ.sql
恢復命令為:
mysql -uroot -p123456 XSCJ<XSCJ.sql
2). 使用mysqlimport恢復數據
mysqlimport客戶端可以用來恢復表中的數據,它提供了LOADDATA INFILE語句的一個命令行接口,發送一個LOAD DATA INFILE命令到服務器來運作。它大多數選項直接對應LOAD DATA INFILE語句。
mysqlimport命令格式為:
mysqlimport [options] db_name filename ...
說明:options是mysqlimport命令的選項,使用mysqlimport -help即可查看這些選項的內容和作用。常用的選項為: www.2cto.com
-d,--delete:在導入文本文件前清空表格。
- -lock-tables:在處理任何文本文件前鎖定所有的表。這保證所有的表在服務器上同步。而對於InnoDB類型的表則不必進行鎖定。
--low-priority,--local,--replace,--ignore:分別對應LOAD DATA INFILE語句的LOW_PRIORITY,LOCAL,REPLACE,IGNORE關鍵字。
對於在命令行上命名的每個文本文件,mysqlimport剝去文件名的擴展名,並使用它決定向哪個表導入文件的內容。例如,“patient.txt”、“patient.sql”和“patient”都會被導入名為patient的表中。所以備份的文件名應根據需要恢復表命名。
例: 恢復XSCJ數據庫中表XS的數據,保存數據的文件為XS.txt,命令如下:mysqlimport -uroot -p123456 --low-priority n --replace XSCJ XS.txt
mysqlimport也需要提供-u、-p選項來連接服務器。值得注意的是,mysqlimport是通過執行LOAD DATA INFILE語句來恢復數據庫的,所以上例中備份文件未指定位置的默認是在MySQL的DATA目錄中。如果不在則要指定文件的具體路徑。
2). 使用mysqlimport恢復數據
mysqlimport客戶端可以用來恢復表中的數據,它提供了LOADDATA INFILE語句的一個命令行接口,發送一個LOAD DATA INFILE命令到服務器來運作。它大多數選項直接對應LOAD DATA INFILE語句。
mysqlimport命令格式為:
mysqlimport [options] db_name filename...
說明:options是mysqlimport命令的選項,使用mysqlimport -help即可查看這些選項的內容和作用。常用的選項為:
-d,--delete:在導入文本文件前清空表格。
--lock-tables:在處理任何文本文件前鎖定所有的表。這保證所有的表在服務器上同步。而對於InnoDB類型的表則不必進行鎖定。 www.2cto.com
--low-priority,--local,--replace,--ignore:分別對應LOAD DATA INFILE語句的LOW_PRIORITY,LOCAL,REPLACE,IGNORE關鍵字。
對於在命令行上命名的每個文本文件,mysqlimport剝去文件名的擴展名,並使用它決定向哪個表導入文件的內容。例如,“patient.txt”、“patient.sql”和“patient”都會被導入名為patient的表中。所以備份的文件名應根據需要恢復表命名。
例: 恢復XSCJ數據庫中表XS的數據,保存數據的文件為XS.txt,命令如下:mysqlimport -uroot -p123456 --low-priority --replace XSCJ XS.txt
mysqlimport也需要提供-u、-p選項來連接服務器。值得注意的是,mysqlimport是通過執行LOAD DATA INFILE語句來恢復數據庫的,所以上例中備份文件未指定位置的默認是在MySQL的DATA目錄中。如果不在則要指定文件的具體路徑。
作者 tianyazaiheruan