今天接到开发妹子的需求,导入指定月份的数据到测试服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