段 震
(太原師范學(xué)院,山西 太原 030619)
MYSQL數(shù)據(jù)庫系統(tǒng)將每一個數(shù)據(jù)庫的數(shù)據(jù)以文件的形式保存,因此可以通過復(fù)制文件的方式對數(shù)據(jù)庫進(jìn)行備份。但是,復(fù)制文件時確保在復(fù)制期間不使用表。如果不滿足此條件,復(fù)制的文件中可能存在數(shù)據(jù)不一致,復(fù)制操作將失敗。因此可以在復(fù)制以前關(guān)閉MYSQL服務(wù),復(fù)制完成后再重新啟動服務(wù)。
數(shù)據(jù)的備份根據(jù)其具體用途的不同而執(zhí)行不同的操作。有為了防止數(shù)據(jù)丟失而進(jìn)行的定期備份、有數(shù)據(jù)轉(zhuǎn)移的備份、有數(shù)據(jù)丟失而需要找回的數(shù)據(jù)還原等。在MYSQL中實現(xiàn)備份數(shù)據(jù)庫的方法有很多,主要有以下幾種:
進(jìn)行完全備份的最簡單和最快的方法是復(fù)制數(shù)據(jù)庫文件夾。當(dāng)然,復(fù)制時需要MySQL。您還可以使用mysqldump程序或mysqlhotcopy腳本在SQL語句級備份數(shù)據(jù)庫。它們稍微慢一點,但是它們有很強(qiáng)的通用性[1]。
使用復(fù)制的方法直接將數(shù)據(jù)表文件備份,也屬于完全備份。只要服務(wù)器不再進(jìn)行更新,可以復(fù)制所有表文件(.frm、*.myd和*.myi文件)。所有表文件(.frm、*.myd和*.myi文件)只要服務(wù)器不再更新,就可以復(fù)制這些文件。對于Innodb表,可以過行在線備份,不對表進(jìn)行鎖定。
可以在MySQL安裝目錄中找到Mysqldump,它用于轉(zhuǎn)儲或收集數(shù)據(jù)庫,以便備份或?qū)?shù)據(jù)傳輸?shù)街С諷QL語句的服務(wù)器(不一定是MySQL服務(wù)器)。備份后生成的備份是一個文本文件。該文件的內(nèi)容是用于創(chuàng)建表并將數(shù)據(jù)插入表的SQL語句。
下面我們來詳細(xì)介紹Mysqldump的一些選項,對數(shù)據(jù)表和數(shù)據(jù)庫的備份。
對指定的數(shù)據(jù)庫或指定的表進(jìn)行備份,可提供其所生成的備份文件的名稱和地址,也可以不提供。若不提供所備份的文件路徑或名稱,那么所備份的內(nèi)容將直接顯示在系統(tǒng)終端;否則其備份內(nèi)容被記錄在備份文件中。
1) 備份數(shù)據(jù)庫或表,但不提供備份地址。語法如下:
Mysqldump[選項]數(shù)據(jù)庫名[表名]數(shù)據(jù)庫名[表名]
2) 備份一個數(shù)據(jù)庫或一張表,指明備份文件的名稱和地址,語法如下:
Mysqldump[選項]數(shù)據(jù)庫名[表名]>文件路徑(文件名稱)
例如:對jxgl數(shù)據(jù)庫中的work表進(jìn)行備份,使用root用戶名,123456密碼,不提供備份文件的地址,其代碼如下:
mysqldump-u root-p123456 jxgl work
例如:對jxgl數(shù)據(jù)庫中的work表進(jìn)行備份,指定其備份文件路徑為:“d:work.sql”,使用root用戶名,123456為密碼,其代碼如下:
mysqldump-u root-p123456 jxgl work>d:work.sql
對指定的數(shù)據(jù)庫列表進(jìn)行備份,可提供其所生成的備份文件的名稱和址,也可以不提供。若不提供所備份的文件路徑或名稱,那么備份的內(nèi)容將直接顯示在系統(tǒng)終端;否則其備份內(nèi)容被記錄在備份文件中[2]。
同時備份多個數(shù)據(jù)庫,語法如下:
Mysqldump[選項]--database數(shù)據(jù)庫名1[數(shù)據(jù)庫名2數(shù)據(jù)庫3…]
同時備份多個數(shù)據(jù)庫,指定備份文件路徑,語法如下:
Mysqldump[選項]--database數(shù)據(jù)庫名1[數(shù)據(jù)庫名2數(shù)據(jù)庫3…]>文件路徑(文件名稱)
語法如下:
Mysqldump[選項]—all-database
而mysqldump用于備份一個完整的數(shù)據(jù)庫,基本語法如下:
Mysqldump-opt數(shù)據(jù)庫名>備份文件名.sql
Mysqldump[選項]-所有數(shù)據(jù)庫
Mysqldump用于備份完整的數(shù)據(jù)庫?;菊Z法如下:
選擇數(shù)據(jù)庫名>備份文件名.sql
除了將數(shù)據(jù)庫的備份顯示在終端,還可使用數(shù)據(jù)表備份的方法,將上述備份保存在文件中,代碼如下:
Mysqldump-u root-p-all-database>d:databases.sql
如果只想備份數(shù)據(jù)庫的某些表,可以使用select into outfile或backup table語句只提取數(shù)據(jù)表中的數(shù)據(jù),而不備份表的結(jié)構(gòu)和定義。
其用法如下:
從表名[其他Select子句]中選擇列名列表到輸出文件| dumpfile’filename'output選項
例如:備份jxgl.work表中除了w_no字段以外的數(shù)據(jù),創(chuàng)建“d:work.txt”文件并將數(shù)據(jù)導(dǎo)入文件中,代碼如下:
Select w_name,w_sex into outfile“d:work.txt”from jxgl.work;
在代碼中,由于反斜杠被編譯為轉(zhuǎn)義字符,因此需要使用雙反斜杠。
Load data infile語句是select into…outfile語句的反執(zhí)行,能夠?qū)elect into…outfile語句所備份的文件重新放回表中。
增量備份是在完全備份后僅備份數(shù)據(jù)更改。增量備份可用于常規(guī)備份和自動備份。
MySQL支持增量備份。啟動服務(wù)器時包含—log bin選項啟用二進(jìn)制日志功能。二進(jìn)制文件記載了自某一次備份以來所有的數(shù)據(jù)更新操作。生成一份增量備份時,需要使用FLUSH LOGS或者mysqldump--flush-logs生成一份新的日志文件,執(zhí)行完成之后,將自某一次備份之后到最新的二進(jìn)制日志文件復(fù)制到備份位置,即增量備份文件?;謴?fù)時,重新執(zhí)行這些增量備份文件。
shell>mysqlbinlog binlog_files|mysql-u root-p
通過增量備份,當(dāng)出現(xiàn)在操作系統(tǒng)崩潰或斷電的情況下,InnoDB可以自己完成所有的數(shù)據(jù)恢復(fù)工作。
數(shù)據(jù)庫的安全是系統(tǒng)安全的重要組成部分,故必須設(shè)計一個完善的數(shù)據(jù)庫備份和恢復(fù)方案。MySQL提供了多種工具,可以一起使用,使數(shù)據(jù)庫備份和恢復(fù)變得容易。在實際的MySQL數(shù)據(jù)庫備份和恢復(fù)中,會出現(xiàn)很多無法通過和復(fù)雜的情況。根據(jù)不同的情況,需要大量的實踐和經(jīng)驗來恢復(fù)數(shù)據(jù)庫,使數(shù)據(jù)具有最大的可恢復(fù)性和最短的恢復(fù)時間。