mysqldump是mysql用于轉(zhuǎn)存儲數(shù)據(jù)庫的實用程序。它主要產(chǎn)生一個SQL腳本,其中包含從頭重新創(chuàng)建數(shù)據(jù)庫所必需的命令CREATE TABLE INSERT等。下面就讓我們一起學(xué)習(xí)吧!
一、mysqldump:數(shù)據(jù)庫備份程序
有3種方式來調(diào)用mysqldump:
| mysqldump [options] db_name [tables]mysqldump [options] ---database DB1 [DB2 DB3...]mysqldump [options] --all--database |
如果沒有指定任何表或使用了---database或--all--database選項,則轉(zhuǎn)儲整個數(shù)據(jù)庫。
1、備份一個數(shù)據(jù)庫.
| mysqldump -uroot -p123456 mysql > mysql_backup.sql |
這里備份了database mysql的結(jié)構(gòu)和數(shù)據(jù),生成的sql文件不會有創(chuàng)建database mysql的語句。
2、可以用一個命令備份mysql,test多個數(shù)據(jù)庫:
| mysqldump -u root -p123456 --database mysql test > my_databases.sql |
生成的sql文件有創(chuàng)建database mysql和test的語句
3、備份所有數(shù)據(jù)庫:
| mysqldump -u root -p123456 --all-databases > all_databases.sql |
4、導(dǎo)出mysql這個數(shù)據(jù)庫的結(jié)構(gòu)
| mysqldump -u root -p123456 -d --add-drop-table mysql > mysql_define.sql |
5、導(dǎo)出一個數(shù)據(jù)所有數(shù)據(jù)并用gz壓縮
| mysqldump -u root -p123456 mysql | gzip > mysql.sql.gz |
可以這樣將轉(zhuǎn)儲文件讀回到服務(wù)器:
| mysql db_name < backup-file.sqlmysql -e "source /path-to--backup/backup-file.sql" db_name |
或者從gz文件中還原
| gunzip -f < mysql.sql.gz | mysql -u root -p123456 test |
二、SELECT...INTO OUTFILE
SELECT...INTO OUTFILE 'file_name'形式的SELECT可以把被選擇的行寫入一個文件中,該文件被創(chuàng)建到服務(wù)器主機上。
SELECT...INTO OUTFILE是LOAD DATA INFILE的補語;用于語句的exort_options部分的語法包括部分FIELDS和LINES子句,這些子句與LOAD DATA INFILE語句同時使用。
在下面的例子中,生成一個文件,各值用逗號隔開。這種格式可以被許多程序使用
| SELECT * INTO OUTFILE '/tmp/result.txt' FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"' LINES TERMINATED BY '/n'FROM mysql.user; |
將mysql數(shù)據(jù)庫的user表的數(shù)據(jù)導(dǎo)出到/tmp/result.txt
SELECT...INTO OUTFILE只能導(dǎo)出數(shù)據(jù),不能導(dǎo)出結(jié)構(gòu),一般和load data聯(lián)合使用。
三、LOAD DATA INFILE
LOAD DATA INFILE語句用于高速地從一個文本文件中讀取行,并裝入一個表中。文件名稱必須為一個文字字符串。
由character_set_database系統(tǒng)變量指示的字符集被用于解釋文件中的信息。
| LOAD DATA LOCAL INFILE '/tmp/result.txt' INTO TABLE test.userFIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"' LINES TERMINATED BY '/n' |