- LAMP網站開發黃金組合Linux+Apache+MySQL+PHP
- 楊明華等編著
- 1431字
- 2018-12-29 19:23:42
6.3 備份數據庫
使用數據庫的備份功能是保護數據有效措施。通常,可以使用下列兩種方式來備份數據庫:
(1)使用mysqldump程序備份數據庫;
(2)直接拷貝數據文件;
6.3.1 使用mysqldump備份
當使用mysqldump程序產生數據庫備份文件時,文件內容包含CREATE TABLE語句(這些語句用戶創建被備份的表),以及表中數據的INSERT語句(創建表中的數據)。換句話說,mysqldump創建的備份文件,在恢復數據時,可作為mysql的輸入使用,以重建數據庫。
1.備份整個數據庫到文件
通過示例來說明。例如,可以通過下面命令,將整個student_course數據庫備份到文本文件student_course_bak.txt中:
% mysqldump student_course>D:\DataBackup\student_course_bak.txt
查看所生成的文本文件,除注釋信息外,其內容包含一些列CREATE TABLE語句和INSETY語句,類似于:
-- MySQL dump 9.08 -- -- Host: localhost Database: student_course --------------------------------------------------------- -- Server version 4.0.14-nt -- -- Table structure for table 'courses' -- CREATE TABLE courses ( cid int(11) NOT NULL default '0', cname varchar(50) NOT NULL default '', ccredit int(11) NOT NULL default '0', cteacher varchar(50) default NULL ) TYPE=MyISAM; -- -- Dumping data for table 'courses' -- INSERT INTO courses VALUES (1,'C語言',3,'李老師'); … -- -- Table structure for table 'stu_cou' -- CREATE TABLE stu_cou ( sid int(11) NOT NULL default '0', cid int(11) NOT NULL default '0', score int(11) NOT NULL default '0' ) TYPE=MyISAM; -- -- Dumping data for table 'stu_cou' -- INSERT INTO stu_cou VALUES (1,1,88); … -- -- Table structure for table 'students' -- CREATE TABLE students ( sid int(11) NOT NULL default '0', sname varchar(50) NOT NULL default '', sgender char(2) default NULL, sage int(11) default NULL ) TYPE=MyISAM; -- -- Dumping data for table 'students' -- INSERT INTO students VALUES (1,'張三','男',21); …
2.備份部分表到文件
如果數據庫數據量太大,則數據備份文件也將是極大的,管理起來非查困難。可以通過備份部分表的內容來解決這個問題,這個操作將該備份文件分成更小的、更多的、易于管理的多個文件。
下面的例子將說明如何將student_course中的students和courses表轉儲到兩個不同的單獨文件中:
% mysqldump student_course students courses>D:\DataBackup\students_and_courses.sql
3.備份數據到另一個服務器
如果需要將一個數據庫直接備份到另一個服務器上,則無須創建備份文件,直接備份即可。這時,應該確保目標數據庫正常運行,然后使用一個管道使mysql直接讀取mysqldump的輸出結果,以備份數據庫。
例如,如果想要將student_course數據庫從host1拷貝到host2,命令如下:
% mysqladmin -h host2 create student_course % mysqldump student_course | host2 student_course
mysqldump程序還有許多選項,用于控制備份數據庫時的選項。常用的如add-drop-table,用于指定在備份到另一個數據庫的時候是否刪除已經存在的表,在此不作詳述。
6.3.2 使用直接拷貝數據文件方式
如果不使用前面所介紹的mysqldump來備份數據庫或表,另一種方法是直接拷貝表文件。在Linux中,可利用像cp、tar或cpio這樣的命令來進行拷貝,在Windows中則可以通過圖形化界面直接拷貝文件。
在拷貝文件時,為確保數據的完整性,最好首先關閉服務器,拷貝文件,然后重新啟動服務器。如果在拷貝一個表時服務器正在使用它,則數據拷貝無效。
下面的例子將說明在Linux中,怎樣將整個student_course數據庫拷貝到備份目錄(BACKUPDIR)中:
% cd DATADIR % cp -r student_course BACKUPDIR
其中,DATADIR表示MySQL數據庫數據所在目錄,而BACKUPDIR表示想要備份到的目錄。如果只想備份其中的一部分表,則可以用下面的命令:
% cd DATADIR/student_course % cp students BACKUPDIR % cp courses BACKUPDIR % ...
在Windows系統中,則更加簡單,只需要使用圖形化界面將數據文件復制到目的文件夾即可,在此不作詳述。
要想用直接拷貝文件的方式將數據庫從一臺服務器備份到另一臺服務器,只要將這些文件拷貝到另一臺服務器上的相應數據庫中即可。此時,應確保數據文件類型相同,且兩臺機器都有相同的服務器環境。還應該確保第一臺服務器不會在拷貝這些表時訪問它們。
當完成備份后,可以重新啟動服務器,或者釋放在表上施加的鎖。
6.3.3 兩種方式的比較
前面兩部分介紹了使用mysqldump和直接備份數據文件兩種方式來備份數據庫,在實際的應用中,應該如何選擇呢?本節不比較這兩種方式的優缺點,讀者可以根據自身情況進行合理的選擇。
● mysqldump必須配合MySQL服務器來運行,但直接復制的方式則不用。
● mysqldump的方式比直接復制的方式慢。
● mysqldump復制方式所產生的文本文件,可以攜帶到其他的機器上,但是需要保證兩個服務器具有相同的系統環境。
● 利用mysqldMp復制文件時,可以將復制的文件加上時間編號。例如使用下面命令:
% mysqldump db_name>D:\Databackup\db_name.20060214
這樣,便于管理生成的備份文件。