MySQL 导入导出相关操作

使用mysqldump 导出csv, tsv 格式
使用LOAD DATA 将csv, tsv数据导入到表中
其他一些限制条件的导入导出

csv

mysqldump -uroot -p test content -t -T /tmp --skip-tz-utc --fields-terminated-by=',' --fields-enclosed-by=\"

tsv

mysqldump -uroot -p test content -t -T /tmp --skip-tz-utc --fields-terminated-by='\t'

备注:

  1. mysqldump 导出csv、tsv格式只能在本地进行,无法远程操作
  2. -T 为目录path,不是文件名,并且需要 mysql 可写权限
  3. -tz-utc 默认打开,会影响timestamp,所以需要--skip-tz-utc

按条件导出

mysqldump -uroot -p dbname tablename -w "Updated >= '2016-03-03 17:28:29'" -t --skip-extended-insert > /data/tmp/tablename-delta-0311.sql

忽略错误继续导入,比如忽略主键冲突

mysql -uroot -p -f dbname < /data/tmp/tablename-delta-0304.sql

只导出结构的sql

mysqldump -uroot -p dbname tablename -d /tmp/content.sql

只导出数据的sql

mysqldump -uroot -p dbname tablename -t /tmp/content.sql

导出部分字段

导出部分字段使用 mysql -e 来执行,实际上 mysqldump 也是转化为SQL来执行,默认导出的是tsv数据

mysql -uroot -p -e " SELECT id, appName, appVersion FROM test.ua_message INTO OUTFILE '/tmp/ua_message.tsv' "

可以修改数据格式:

mysql -uroot -p -e " SELECT id, appName, appVersion FROM test.ua_message INTO OUTFILE '/tmp/ua_message.tsv' FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"' "

参考文档:http://dev.mysql.com/doc/refman/5.7/en/select-into.html

导入CSV

LOAD DATA INFILE '/tmp/data.csv' INTO table `tablename` FIELDS TERMINATED BY ',' LINES TERMINATED BY '\r\n';

LOAD DATA INFILE '/tmp/data.tsv' INTO table `tablename` FIELDS TERMINATED BY '\t' LINES TERMINATED BY '\r\n';

合并导入

将t1表与t2表数据按照主键合并,导入到新表:

INSERT INTO `tablename_v1` (id, c1, c2) select t1.id, t1.c1, t2.c2 from t1, t2 where t1.id = t2.id