公司的数据存放在linux集群下,前几天需要导出几张表,顺便记录下导出过程留已以后再用。
一、表导出成csv
1.导出文件不带列名
导出数据表中的数据到CSV文件:
select * from table_name into outfile "/tmp/xxxx.csv" fields terminated by ',' lines terminated by '\n';
linux下直接用文本编辑器打开,windows下支持用Excel文件格式来打开,打开文件发现只有数据,没有表头。
2.导出文件带列名
带上表头导出数据到CSV文件:
select * into outfile '/tmp/xxxx.csv' fields terminated by ',' lines terminated by '\n' from (select 'col1','col2','col3','col4' union select column1,column2,column3,column4 from table_name) b;
打开导出的文件就能看到对应的表头了。
eg:远程mysql连接导出时文件会生成在原数据所在的服务器上,默认会导出为/home/mysql_data/tmp/xxxx.csv文件。
二、linux传输远程服务器上的文件
假如需要将服务器A上的文件传到服务器B上
scp -p 【A上的文件名】 【服务器B的ip】:/tmp
三、用u盘将linux服务器上的数据拷贝下来,这里是使用centos7系统
1.fdisk -l命令查看一下U盘是否有被识别到,及识别的U盘是在哪个位置,假设u盘位置是/dev/Sdb4
2.挂载u盘到/mnt目录下 mount /dev/sdb4 /mnt
3.复制服务器上的文件到u盘里cp /home/xxx.csv /mnt
4.退出u盘umount /mnt
eg:方法二走网络传输耗时,方法三u盘传输快一些。
四、将csv文件命令行导回数据库里
1.首先切换到要导回的数据库下
//1.连接mysql数据库
mysql -h数据库所在服务器ip -u用户名 -p密码;
//2.显示所有的数据库名
show databases;
//3.切换到要导回的数据库下
use 数据库名;
2.执行load data语句,下面简单介绍下用到的关键字作用,博主这里列举的不全,没有写设置字符编码或者忽略第一行等等,只是一些自己用到的。
[local]导入时指定local关键字,表示文件放在客户端主机上。若不指定代表在服务器主机上读取本地文件。
[replace 和 ignore]
[replace]与唯一键重复的行将被覆盖更新。
[ignore]与唯一键重复的行将被忽略。
[terminated by]csv或者txt文件中字段之间的分割符
[optionally enclosed by]字段以什么符号结束,默认是'',有时会设置为','
[enclosed by]字段以什么符号开始,默认是'',有时会设置为','
[lines terminated by]行与行之间以什么分隔,window下为'/r/n',linux下为'/n'
3.一个导入csv文件的demo,导出的文件格式为[一、表导出成csv1.导出文件不带列名]
//1.连接mysql数据库
mysql -uroot -proot;
//2.显示所有的数据库名
show databases;
//3.切换到要导回的数据库下
use test;
//linux服务器下将客户端主机上tmp下xxxx.csv文件导入到test数据库下 demo 表中,以逗号分隔,每个字段的开始字符和结束字符均为空
load data local infile '/tmp/xxxx.csv' replace into table demo fields terminated by ',' optionally enclosed by '' escaped by '' lines terminated by '\n';