PT-OSC错误一例
ERROR 1360 (HY000): Trigger does not exist
磁盘空间不够,导致pt-osc失败,打印日志如下图
磁盘空间不够,导致线上pt-osc失败,正常情况下应该是删除所有触发器,删除临时表,在删除触发器的时候,报错了,如上图。
问题处理过程
早上上班,一大堆告警,一看磁盘空间不够,立马线上删除临时表_t_billc_trade_info_new
,释放了空间
然后查看triggers
这是由于在线做online ddl生成的触发器,删除之
报错,ERROR 1360 (HY000): Trigger does not exist,可是show triggers明显是有的,删除就报错没有该触发器
当时有其他工作,没有细究,过了一会,相应研发找过来跟我说表没法使用,日志打印表不存在,提供截图如下
错误截图很明显报错没有
_t_billc_trade_info_new
该临时表,很奇怪,这张表是做在线online ddl使用的
唯一想到的就是触发器需要删除数据对应这张临时表导致报错,而他们代码遇到错误即停止,所以导致业务异常
想到是不是应该先删触发器,再删临时表
于是重建临时表
create table _t_billc_trade_info_new like t_billc_trade_info;
再进行删除触发器,仍然报错ERROR 1360 (HY000): Trigger does not exist
又想到去看数据文件,果然发现问题所在
数据文件少了相应的触发器文件
问题找到了,就是解决问题,在其他库建相同触发器,把该数据文件移带该库目录下
CREATE TRIGGER pt_osc_hc_bill_center_t_billc_trade_info_del AFTER DELETE ON `testdb`.`t_billc_trade_info` FOR EACH ROW DELETE IGNORE FROM `testdb`.`_t_billc_trade_info_new` WHERE `testdb`.`_t_billc_trade_info_new`.`id` <=> OLD.`id`;
然后删除触发器,临时表,成功截图如下
问题得到解决~