PT-OSC错误一例

ERROR 1360 (HY000)

Posted by BY lingjun on June 6, 2019 本文总阅读量

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`;

然后删除触发器,临时表,成功截图如下 问题得到解决~