首页 > 代码库 > mysql A库a表 B库b表 将a表导入b表中

mysql A库a表 B库b表 将a表导入b表中

今天接到开发妹子的需求,导入指定月份的数据到测试服mysql指定的表中(表名称不一样)


首先看了下线上的表的整体大小

mysql> SELECT sum(DATA_LENGTH)+sum(INDEX_LENGTH)  FROM information_schema.TABLES where TABLE_SCHEMA=‘库名‘ AND TABLE_NAME=‘表名‘;

+------------------------------------+

| sum(DATA_LENGTH)+sum(INDEX_LENGTH) |

+------------------------------------+

|                         4196941824 |

+------------------------------------+

1 row in set (0.00 sec)


这这数据有点大啊4G多,幸好只是只是导入指定月份的数据


开干


依稀记得mysqldump 有个功能可以指定范围导出 Google之后果断导出


/usr/local/mysql/bin/mysqldump -h192.168.1.1 -uzxc -pzxc123  库名 表名 --where="uptime >= 1404144000 and uptime <= 1406822399" > /tmp/表名.sql


导出还是比较快的,数据只有200多M


之后再想如何导入呢,表名称不一样,最后在各种辅助下,决定用合并表的方法弄

a、先导入到数据库的对应库里面

b、然后在采用合并表的方法合并数据

insert into  目标表 select * from  来源表;

ok之后发现数据在增加,在导入数据ing 轻松愉快的解决了这个问题


mysql> SELECT sum(DATA_LENGTH)+sum(INDEX_LENGTH)  FROM information_schema.TABLES where TABLE_SCHEMA=‘库名‘ AND TABLE_NAME=‘表名‘;

+------------------------------------+

| sum(DATA_LENGTH)+sum(INDEX_LENGTH) |

+------------------------------------+

|                          177422336 |

+------------------------------------+

1 row in set (0.00 sec)


数据在增长中。。。

导入成功之后,

满心欢喜的查看了数据,


select * FROM 表名称 LIMIT 1,10;


发现列名既然顺序不一样对应的数据不一样,醉了,妹子说好了数据结构一样的呢


只能重来,清空之前导入的数据之后,在根据来源表的列名顺序,指定导入进来的列名顺序

insert into 目标表(列1,列2,列3。。。) select * from 来源表;


现在才终于搞定收工


本文出自 “在路上” 博客,请务必保留此出处http://xiaochengxiang.blog.51cto.com/2558908/1541628