1. 程式人生 > >MySQL導入導出

MySQL導入導出

sca keys ast split 對待 容易 total 多少 vertical

MySQL導出導入數據有以下幾種方法:

1)select ... into outfile

2)load data

3)mysqldump

4)mysqlimport

5)mysql

一、表級別導入、導出

關於字符處理有以下相關子句:

1)fields terminated by ‘‘:各個字段之間使用tab分隔。

2)[optionally] enclosed by ‘‘:字段值使用什麽符號引起來,如果指定了optionally選項,則enclosed by ‘‘指定字符串類型字段有效。

3)escaped by ‘‘:定義轉義字符,默認為“\”。

4)lines terminated by ‘‘:定義換行符,linux下默認為\n。

文本文件格式:

數據:可以使用科學計數法

字符串:字符串裏的特殊字符必須使用反斜線字符作為識別標識,以區別各種分隔符

日期:安照2017-05-30格式字符串表示

時間:按照15:12:00格式字符串表示

時間戳:20170520151200格式整數對待

null值:假設“\”作為轉義字符,“‘”作為字符串前後綴標識,那麽在導出操作中\N表示null值。

1、使用select ... into outfile導出表數據

使用select ... into outfile可以進行表級別的導出操作,並且輸出文件不能先於輸出存在。

例如:

mysql> select * into outfile ‘/datas/column_charset_00.sql‘ from column_charset;

mysql> select * into outfile ‘/datas/column_charset_01.sql‘ fields terminated by ‘,‘ from column_charset;

mysql> select * into outfile ‘/datas/column_charset_03.sql‘ fields terminated by ‘,‘ lines terminated by ‘\n‘ from column_charset;

mysql> select * into outfile ‘/datas/column_charset_04.sql‘ fields terminated by ‘,‘ optionally enclosed by ‘"‘ lines terminated by ‘\n‘ from column_charset;

2、使用load data導入數據到表中

select ... into outfile命令可以導出表數據到文件中,load data命令巧好於select ... into outfile命令相反,可以導入文件中數據到某張表中。

參數local作用:如果導出文件在服務器上,使用命令load data infile ... 導入數據;否則可以使用load data local infile ... 命令導入客戶端本地文件數據到表中。

使用load data命令導入數據時需要註意mysql服務器字符集的設置。如果load data infile在某些mysql版本中不支持字符集,這時,mysql將假定導入字符集為character_set_database指定字符集,如果沒有設置character_set_database參數,則默認采用character_set_server指定字符集,可以使用set character_set_database或set names命令更改服務器字符集設置,也可以在load data命令中指定字符集。

例如:

mysql> load data infile ‘/datas/column_charset_00.sql‘ into table column_charset;

--導入數據采用character_set_database默認指定字符集。

mysql> load data infile ‘/datas/column_charset_00.sql‘ into table column_charset character set utf8;

--命令中設置字符集導入tab分隔文件。

mysql> load data infile ‘/datas/column_charset_01.sql‘ into table column_charset character set utf8 fields terminated by ‘,‘;

--導入‘,’分隔文件到表中。

mysql> load data infile ‘/datas/column_charset_03.sql‘ into table column_charset character set utf8 fields terminated by ‘,‘ lines terminated by ‘\t‘;

--導入‘,’分隔列,tab分隔行的文件。

mysql> load data infile ‘/datas/column_charset_04.sql‘ into table column_charset character set utf8 fields terminated by ‘,‘ enclosed by ‘"‘ lines terminated by ‘\n‘;

或者

mysql> load data infile ‘/datas/column_charset_04.sql‘ into table column_charset character set utf8 fields terminated by ‘,‘ optionally enclosed by ‘"‘ lines terminated by ‘\n‘;

--導入‘,’分隔列,“\n”分隔行的文件,‘"‘號引用字段的文件。

mysql> load data infile ‘/datas/column_charset_04.sql‘ into table column_charset character set utf8 fields terminated by ‘,‘ optionally enclosed by ‘"‘ lines terminated by ‘\n‘ (c1,c2,c3,c4);

--指定導入表的字段順序。

mysql> load data infile ‘/datas/column_charset_04.sql‘ into table column_charset character set utf8 fields terminated by ‘,‘ optionally enclosed by ‘"‘ lines terminated by ‘\n‘ (c1,c2,c3,c4) set c1=‘dbking‘;

--load data同時指定更新列。

mysql> load data local infile ‘/datas/column_charset_04.sql‘ into table column_charset character set utf8 fields terminated by ‘,‘ optionally enclosed by ‘"‘ lines terminated by ‘\n‘ (c1,c2,c3,c4) set c1=‘dbking‘;

mysql> load data local infile ‘/datas/column_charset_04.sql‘ replace into table column_charset character set utf8 fields terminated by ‘,‘ optionally enclosed by ‘"‘ lines terminated by ‘\n‘ (c1,c2,c3,c4) set c1=‘chavin‘;

--導入本地文件到表中。

local data優化:

相對於普通的mysql命令,load data命令導入速度要快得多,一般可以達到幾萬條記錄每秒,如果想要擁有更高的速度,可以進行以下優化操作。這裏針對於innodb和myisam存儲引擎分別介紹:

針對於innodb模式,建議優化方式有:

1)將innodb_buffer_pool_size值設置的大一些。

2)將innodb_log_file_size設置的大一些。

3)設置忽略二級索引的唯一性約束,set unique_checks=0.

4)設置忽略外檢約束,set foreign_key_checks=0.

5)設置不記錄二進制文件,set sql_log_bin=0.

6)按主鍵順序導入數據。

7)對於innodb引擎表,可以在導入前設置autocommit=0。

8)將大的文件切割成多個小的文件導入,例如split。

針對於myisam模式,建議優化方式有:

1)將bulk_insert_tree_size、myisam_sort_buffer_size、key_buffer_size設置的大一些。

2)先禁用key(alter table ... disable keys),然後再導入數據,然後再啟用key(alter table ... enable keys)。重新啟用key後,會重新批量創建索引,批量創建索引比一條一條創建索引效率高的多。alter table ... disable keys命令只禁用非唯一性索引,唯一索引和主鍵是不能禁用的,除非你手工移除它。

3)使用load data,tab分隔的文件更容易解析,比其他方式快。

二、使用mysqldump導出數據

mysqldump導出的一般是SQL文件,也成為轉儲文件或dump文件,我們可以使用mysql工具或mysqlimport工具導入mysqldump導出文件。

例如:

導出chavin數據庫:

mysqldump -uroot -pmysql chavin > chavin00.sql

mysqldump -uroot -pmysql --complete-insert --force --insert-ignore --add-drop-database --hex-blob --database chavin > chavin02.sql

導出chavin庫中的某些表:

mysqldump -uroot -pmysql chavin --tables column_charset column_collate > chavin01.sql

導出chavin庫,采用sql與數據分離模式:

mysqldump -uroot -pmysql --tab=/datas/chavin00 chavin

導出chavin庫,采用sql與數據分離,數據字段使用“,”分隔:

mysqldump -uroot -pmysql --tab=/datas/chavin01 --fields-terminated-by=‘,‘ --fields-enclosed-by=‘"‘ chavin

導出所有數據庫:

mysqldump -uroot -pmysql --all-database --add-drop-database >db00.sql

導出xml格式數據:

mysqldump -uroot -pmysql --xml chavin >chavin.03.xml

導出數據庫並增加壓縮功能:

mysqldump -uroot -pmysql --hex-blob chavin|gzip >chavin04.sql.gz

導出全庫:

mysqldump -uroot -pmysql --flush-logs --master-data=2 --hex-blob -R -E -f --all-databases 2>> /datas/full-log |gzip > mysql-full.gz

僅導出數據結構:

mysqldump -uroot -pmysql -d --add-drop-table chavin > chavin11.sql

mysqldump -uroot -pmysql --no-data --add-drop-table chavin > chavin12.sql

三、導入由mysqldump導出的數據

1、使用mysql命令行工具可以導入由mysqldump導出的文件。

例如:

導入文件chavin.sql:

mysql -uroot -pmysql restore01 < chavin00.sql

導入壓縮過的導出文件:

gzip -dc chavin04.sql.gz | mysql -uroot -pmysql chavin08

導入文件並且確保客戶端、連接、文件字符集一致性:

mysql -uroot -pmysql --default-character-set=utf8 restore02 < chavin00.sql

2、mysqlimport工具可以用來導入數據。

3、使用source命令恢復數據

mysql> source /datas/chavin10.sql

四、使用mysql工具批處理功能導出數據

1、導出column_charset表:

mysql -uroot -poracle -h192.168.108.128 -P3306 --batch --default-character-set=utf8 -e "select * from chavin.column_charset;" > output.txt

mysql -uroot -poracle -h192.168.108.128 -P3306 --default-character-set=utf8 --batch "--execute=select * from column_charset;" chavin > output03.txt

mysql -uroot -poracle -h192.168.108.128 -P3306 --default-character-set=utf8 --batch -e "select * from column_charset;" chavin > output04.txt

2、查詢結果縱向顯示

mysql -uroot -poracle -h192.168.108.128 -P3306 --default-character-set=utf8 --vertical "--execute=select * from chavin.column_charset;" > output00.txt

3、生成html格式輸出

mysql -uroot -poracle -h192.168.108.128 -P3306 --default-character-set=utf8 --html "--execute=select * from chavin.column_charset;" > output01.html

4、生成xml格式的輸出

mysql -uroot -poracle -h192.168.108.128 -P3306 --default-character-set=utf8 --xml "--execute=select * from chavin.column_charset;" > output02.xml

五、操作系統split工具切割數據文件

split命令作用是切割文件。-l參數指定按多少行進行切割,不指定默認為每1000行切割一份。

# split -l 32 output03.txt split/output_split_sub_

# ll split/

total 20

-rw-r--r-- 1 root root 880 Jan 22 05:39 output_split_sub_aa

-rw-r--r-- 1 root root 896 Jan 22 05:39 output_split_sub_ab

-rw-r--r-- 1 root root 896 Jan 22 05:39 output_split_sub_ac

-rw-r--r-- 1 root root 896 Jan 22 05:39 output_split_sub_ad

-rw-r--r-- 1 root root 28 Jan 22 05:39 output_split_sub_ae

將大文件切割成小文件後,通過多個客戶端並行導入,會提高效率。

MySQL導入導出