MySQL導入導出
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導入導出