今天接到開發妹子的需求,導入指定月份的數據到測試服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 來源表;
現在才終於搞定收工