背景
最近在做运维有关的数据分析,需要从一个A表中读取数据,但A表缺少很多关键字段,需要新增字段并补充内容后才能进行下一步分析,但是我对A表无管理权限。于是我的思路是:从A表读取一部分数据到txt,在另一个数据库实例中创建一个B表(B表字段在A表基础上增加了6个),将得到的txt导入到B表;就这样一个简单的需求,中途遇到很多坎儿,才猛然发现对数据库的维护早已久疏阵仗了。
过程
1.从a表导出到txt
mysql -uuser01 -ppassword -h127.0.0.1 -N -e "use a_db;select n1,n2,n3 from a_table where time >= $startTime and time <= $endTime;" > /tmp/a.txt
#select的字段顺序必须和接下来导入时保持一致,才能保证txt插入B表时,字段和内容不混乱
2.将txt导入到b表
#需要进入b_db库,在命令行界面对b_table直接操作
LOAD DATA LOCAL INFILE '/tmp/a.txt' INTO TABLE b_table (n1,n2,n3);
#b_table()中的字段必须和导出时的顺序一致,b_table多出来的字段则使用字段默认值
#如果中途有报错,搜到的内容大多给的解决方法是,通过下面两个命令开启允许本地文件导入
show global variables like 'local_infile';
SET GLOBAL local_infile=1;
#之后,我再次尝试将txt导入还是失败的。通过一番摸索最终使用下面的参数进入mysql,执行导入txt才算成功
mysql --local-infile=1 -u user01 -p1 -ppassword -h127.0.0.1 #这个地址是b_table的地址
3.命令行远程导入txt
mysql --local-infile=1 -u user01 -p1 -ppassword -h127.0.0.1 -e "use b_db;LOAD DATA LOCAL INFILE '/tmp/a.txt' INTO TABLE b_table (n1,n2,n3);"
#地址是b表的地址
4.txt导入只影响了一行
#通过查看警告信息,发现b_table新增的字段中有一个id字段,主键,且不是自增,就导致主键重复;稍后给主键增加自增属性解决。
结束
有遇到相关问题的,欢迎下方留言!