#####################################
背景:
业务对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掉这个工具的进程,直接返回
########################################