数据迁移问题总结:
1.脚本要定时跑,在夜间闲时跑 不影响服务器
数据迁移要分批次的查询,插入,选好粒度,每次的插入要按照选定的粒度来做,每次的插入一般要比粒度要小,保证插入数据稳妥不出错。因为:
2.如果单次取出的数据过多,php内存会溢出
3.如果单次取出过多做插入的时候mysql可能会因为过长而报错
4.数据库写的时候要考虑到主从库问题,不能疯狂的写主库,这样主库会压力很大,磁盘io会影响整个系统。从裤会压力也会很大,滞后性很严重,数据查询会出问题。这时候可以按照粒度来sleep
5.数据库不要使用limit来分批次,使用id>=a and id <b来分段取,这样效率比较高,limit的扫面范围是全表,到后面会越来越慢,完全不可行。id不要用 a<=id<b,这样会用不到索引。
6.一定要写好日志,标记好迁移完成的位置。
7.做好数据迁移失败的处理,建议减小粒度继续迁移把迁移失败的数据范围尽量缩小。
8.数据前已完成要做好对比,算下老表和新表们的数据量是否一致。
9.迁移最好可以停止,防止因为迁移导致服务器业务响应缓慢,这时候需要在缓存或者资料库里面记录一个游标,也就是之前迁移数据的位置,这个位置可以从日志里直接看,但是建议写在缓存里,下次执行脚本支持1.直接从缓存里面读,2.从日志文件里看,3.自定义开始位置。
10.要迁移一段时间后看下服务器的稳定性,不要脚本在跑就不管了,保证迁移不影响服务器的性能。