1
Mac 2014-05-29 22:31:35 +08:00
INSERT INTO T_a (c1,c2,c3) SELECT c1,c2,c3 FROM T_b
哪个数据多就做主表,数据少的做来源,这样起码你省一半时间了吧。KW级的数据在你的环境里要INSERT多久? |
2
Mac 2014-05-29 22:32:58 +08:00 1
先在T_a中增加一列c3,默认值0
然后再T_b中加入一列c2,默认值0 自己调整好字段顺序,使得两个表结构是一样的 INSERT INTO T_a (c1,c2,c3) SELECT c1,c2,c3 FROM T_b 然后更改T_a表名为T_c 哪个数据多就做主表,数据少的做来源,这样起码你省一半时间了吧。 |
4
pubby 2014-05-29 22:57:11 +08:00 1
一、如果T_a T_b可以有较长时间停止数据更新
1. 修改业务代码,暂时停掉会导致T_a T_b更新的功能 2. 构建T_c 3. 直接切换到新业务代码使用T_c 二、如果T_a/T_b不能长时间停止写入 1. 写个触发器,记录T_a/T_b上的更新 2. 构建T_c 3. 停掉业务,把触发器收集到的更新记录还原到T_c上(量应该不会太大吧) 4. 切换到新业务代码使用T_c 以上只是随便想象,还需专业DBA来分析下 |
5
xifangczy 2014-05-29 23:36:16 +08:00 1
我有个想法,如果你测试环境和业务环境交换数据很快的话。
业务环境里开始做记录然后测试环境开始合并,合并完成后停机,把记录的数据更新到刚刚合并好的数据库上,测试完成上线。 |
6
czheo 2014-05-29 23:53:37 +08:00 1
start a slave mysql server on a remote machine(if no another machine is available, just start another mysql on the local machine as a slave)
1. slave> create slave.T_a both with c1, c2, c3 2. slave> replicate master.T_a -> slave.T_a 3. client> get offline for a short while. (to avoid any writing to master.T_a after you've done step 4) 4. slave> rename slave.T_a -> slave.T_b 5. client> redirect operations of master.T_a -> slave.T_b and get online 6. slave> replicate master.T_b -> slave.T_b 7. client> redirect operations of master.T_b -> slave.T_b slave.T_b will be what you referred as T_c |
7
czheo 2014-05-29 23:55:23 +08:00
1. slave> create slave.T_a with column c1, c2, c3
|