|
--triggers 同時導出觸發(fā)器。該選項默認啟用,用 --skip-triggers 禁用它。
其他參數(shù)詳情請參考手冊,我通常使用以下 SQL 來備份 MyISAM 表:
/usr/local/mysql/bin/mysqldump -uyejr -pyejr
--default-character-set=utf8 --opt --extended
-insert=false \--triggers -R --hex-blob -x db_name
> db_name.sql
使用以下 SQL 來備份 Innodb 表:
/usr/local/mysql/bin/mysqldump -uyejr -pyejr --default
-character-set=utf8 --opt --extended-insert=
false \--triggers -R --hex-blob --single-transaction db_name
> db_name.sql
1.2 還原
用 mysqldump備份出來的文件是一個可以直接倒入的 SQL 腳本,有兩種方法可以將數(shù)據(jù)導入。
直接用 mysql 客戶端 例如:
/usr/local/mysql/bin/mysql -uyejr -pyejr db_name < db_name.sql
用 SOURCE 語法 其實這不是標準的 SQL 語法,而是 mysql 客戶端提供的功能,例如: SOURCE /tmp/db_name.sql;
這里需要指定文件的絕對路徑,并且必須是 mysqld 運行用戶(例如 nobody)有權限讀取的文件。
2、 mysqlhotcopy
2.1 備份
mysqlhotcopy 是一個 PERL 程序,最初由Tim Bunce編寫。它使用 LOCK TABLES、FLUSH TABLES 和 cp 或 scp 來快速備份數(shù)據(jù)庫。它是備份數(shù)據(jù)庫或單個表的最快的途徑,但它只能運行在數(shù)據(jù)庫文件(包括數(shù)據(jù)表定義文件、數(shù)據(jù)文件、索引文件)所在的機器上。mysqlhotcopy 只能用于備份 MyISAM,并且只能運行在 類Unix 和 NetWare 系統(tǒng)上。
mysqlhotcopy 支持一次性拷貝多個數(shù)據(jù)庫,同時還支持正則表達。以下是幾個例子:
root#/usr/local/mysql/bin/mysqlhotcopy -h=localhost -u=yejr -p=yejr db_name /tmp
(把數(shù)據(jù)庫目錄 db_name 拷貝到 /tmp 下)
root#/usr/local/mysql/bin/mysqlhotcopy -h=localhost -u=yejr -p=yejr db_name_1 ...
db_name_n /tmproot#/usr/local/mysql/bin/mysqlhotcopy -h
=localhost -u=yejr -p=yejr db_name./regex/ /tmp
更詳細的使用方法請查看手冊,或者調(diào)用下面的命令來查看 mysqlhotcopy 的幫助:
perldoc /usr/local/mysql/bin/mysqlhotcopy
注意,想要使用 mysqlhotcopy,
必須要有 SELECT、RELOAD(要執(zhí)行 FLUSH TABLES) 權限,并且還必須要能夠有讀取 datadir/db_name 目錄的權限。
2.2 還原
mysqlhotcopy備份出來的是整個數(shù)據(jù)庫目錄,使用時可以直接拷貝到 mysqld 指定的 datadir (在這里是 /usr/local/mysql/data/)目錄下即可,同時要注意權限的問題,如下例:
root#cp -rf db_name /usr/local/mysql/data/root#chown -R nobody:nobody /usr/local/mysql/data/
(將 db_name 目錄的屬主改成 mysqld 運行用戶)
3、 SQL 語法備份
3.1 備份
BACKUP TABLE 語法其實和 mysqlhotcopy 的工作原理差不多,都是鎖表,然后拷貝數(shù)據(jù)文件。它能實現(xiàn)在線備份,但是效果不理想,因此不推薦使用。它只拷貝表結(jié)構(gòu)文件和數(shù)據(jù)文件,不同時拷貝索引文件,因此恢復時比較慢。例子:
BACK TABLE tbl_name TO '/tmp/db_name/';
注意,必須要有 FILE 權限才能執(zhí)行本SQL,并且目錄 /tmp/db_name/ 必須能被 mysqld 用戶可寫,導出的文件不能覆蓋已經(jīng)存在的文件,以避免安全問題。
SELECT INTO OUTFILE 則是把數(shù)據(jù)導出來成為普通的文本文件,可以自定義字段間隔的方式,方便處理這些數(shù)據(jù)。
例子:
SELECT INTO OUTFILE '/tmp/db_name/tbl_name.txt' FROM tbl_name;
注意,必須要有 FILE 權限才能執(zhí)行本SQL,并且文件 /tmp/db_name/tbl_name.txt 必須能被 mysqld 用戶可寫,導出的文件不能覆蓋已經(jīng)存在的文件,以避免安全問題。 |
【收藏】【打印】【進入論壇】 |
|
|
|
|
|
|
|