#####################################

背景:

 

   业务对mysql集群的一个从库实例的dashboard_scheduled_history表发起了一个慢查询,有多慢呢?已经执行了一个半小时还没执行完,这个表是个大表,有4000多万行,然后我就执行了pt-online-schema-change对这个表添加索引,再然后就去上了个厕所。

 

问题:

慢查询导致pt-online-schema-change工具一直无法获得元数据锁,该工具一直处于Waiting for table metadata lock状态,导致该从库实例主从延迟越来越大,业务写入的数据,在该从库上查不到从而导致业务异常。

 

 

临时解决:

1)踢掉该从库实例的流量;

2)kill掉业务慢查询;

3)执行pt-online-schema-change进行修改表结构;

4)当该从库实例追上主库后,再将流量打到该从库实例;

 

 

如何永久性解决这个问题呢?

1)dba执行ddl的时候,还是不能大意,需要关注执行状况,发现一直没动静,估计就是拿不到元数据锁了,需要先kill掉慢查询或未提交的事务

2)执行pt-online-schema-change工具后,应该自动化跟踪该工具的执行状态,一旦发现该工具处于Waiting for table metadata lock状态,就kill掉这个工具的进程,直接返回

 

   

########################################