DophinScheduler 如何定期刪除日誌例項?

海豚调度發表於2024-06-12

轉載自東華果汁哥

Apache DophinScheduler 執行一段時間後,例項排程日誌越來越多,需要定期清理。

SQL 錯誤 [1701] [42000]: Cannot truncate a table referenced in a foreign key constraint (`dolphinscheduler`.`t_ds_task_instance`, CONSTRAINT `foreign_key_instance_id`)  如何刪除dophinscheduler 例項日誌

SQL 錯誤 [1701] [42000] 表示嘗試截斷(刪除所有行)一個表,該表在其他表的外來鍵約束中被引用。在這種情況下,dolphinscheduler.t_ds_task_instance表被 foreign_key_instance_id外來鍵約束引用。

為了解決這個問題,您可以按照以下步驟操作:

1. 刪除外來鍵約束:

在刪除表的資料之前,您需要刪除或禁用引用該表的外來鍵約束。這樣可以確保資料庫的完整性不受影響。
例如,您可以使用以下 SQL 語句來刪除外來鍵約束(請根據您的資料庫系統調整語法):

ALTER TABLE referencing_table DROP FOREIGN KEY foreign_key_instance_id;

其中 referencing_table 是引用 t_ds_task_instance 的表名。

2. 截斷表:

刪除外來鍵約束後,您現在可以截斷表。

TRUNCATE TABLE dolphinscheduler.t_ds_task_instance;

3. 重新新增外來鍵約束:

截斷表後,如果您需要,可以重新新增外來鍵約束。

ALTER TABLE referencing_table ADD CONSTRAINT foreign_key_instance_id FOREIGN KEY (instance_id) REFERENCES t_ds_task_instance(id);

請注意,在執行這些操作之前,請確保您有足夠的許可權,並且瞭解這些操作對您的資料庫的影響。在生產環境中操作之前,建議備份資料庫。

另外,如果您使用的是像 MySQL 這樣的資料庫,您也可以考慮使用 SET FOREIGN_KEY_CHECKS = 0; 來臨時禁用外來鍵約束,然後執行截斷操作,之後再重新啟用外來鍵約束:

最終解決方案

SET FOREIGN_KEY_CHECKS = 0;
TRUNCATE TABLE dolphinscheduler.t_ds_task_instance;
SET FOREIGN_KEY_CHECKS = 1;

但請注意,這種方法會暫時違反資料庫的完整性,因此請謹慎使用。社群建議透過 open api的方式安全地刪除工作流例項和任務例項,open api可以刪除任務例項的執行日誌。

原文連結:https://blog.csdn.net/u013421629/article/details/136932478

本文由 白鯨開源 提供釋出支援!

相關文章