Mysql多线程复制方案背景Mysql的复制方案为一个进程负责读取复制数据,另一个进程负责执行sql,这种方案很好的保护了数据的安全和准确性,但效率偏低。当主机的操作量比较大的时候,会引起数据复制延迟。已经严重的影响了应用。方案利用mysql的复制协议,采用锁表方式,来进行多线程复制。以下为方案的详细信息。数据流图Mysql共享内存(mmap)Mysql数据复制进程Mysql复制协议写共享内存管理进程解析管理执行线程执行线程执行线程派生派生……获取语句获取语句获取语句执行语句执行语句执行语句Mater服务器Salve服务器执行步骤12345派生流图说明:1、利用mysql复制协议,从主机获得复制数据。2、复制进程负责按事物写进共享内存。3、管理进程负责根据sql语句,解析出数据库和表名,回写共享内存。并按事物派生一个执行线程。4、执行线程在执行sql语句前,搜索当前共享内存中之前的语句是否有同库同表的语句,有就等待,没有就执行。可行性分析该方案可以简单的理解为对mysql的操作锁到表这一级,会带来一定的管理成本。目前完成已经完成了DEMO程序。下面是从DEMO采集的一些数据1、管理成本平均为一条sql语句1/5000秒,一条sql语句平均为1/100秒左右,管理成本占比2%2、在执行一段sql语句,但进程方式执行时间为2分20秒左右,多线程方式为1分10秒左右。3、从磁盘io情况看,单进程为20M/秒左右,多线程为60M/秒左右。4、锁等待概率为2%左右。难点和可能存在的问题1、数据的准确性,需要长期的运行观察,通过对帐来检查。2、数据的安全性,在发生灾难的时候,如何确保数据操作信息被正确保存并且在灾难消除后可以快速继续复制。3、易用性,需要提供和mysql复制功能的同样的操作。结论从以上数据和分析,可以看出该方案可行。