40 lines
1.9 KiB
SQL
40 lines
1.9 KiB
SQL
USE baiyue_audit;
|
|
|
|
DROP PROCEDURE IF EXISTS add_audit_event_id;
|
|
DELIMITER $$
|
|
CREATE PROCEDURE add_audit_event_id()
|
|
BEGIN
|
|
IF NOT EXISTS (
|
|
SELECT 1 FROM information_schema.COLUMNS
|
|
WHERE TABLE_SCHEMA='baiyue_audit' AND TABLE_NAME='sys_audit_log' AND COLUMN_NAME='event_id'
|
|
) THEN
|
|
ALTER TABLE sys_audit_log ADD COLUMN event_id VARCHAR(64) NULL COMMENT '审计事件全局唯一ID' AFTER id;
|
|
END IF;
|
|
IF NOT EXISTS (
|
|
SELECT 1 FROM information_schema.STATISTICS
|
|
WHERE TABLE_SCHEMA='baiyue_audit' AND TABLE_NAME='sys_audit_log' AND INDEX_NAME='uk_audit_event_id'
|
|
) THEN
|
|
ALTER TABLE sys_audit_log ADD UNIQUE KEY uk_audit_event_id (event_id);
|
|
END IF;
|
|
END$$
|
|
DELIMITER ;
|
|
CALL add_audit_event_id();
|
|
DROP PROCEDURE IF EXISTS add_audit_event_id;
|
|
|
|
CREATE TABLE IF NOT EXISTS sys_audit_dead_letter (
|
|
id BIGINT NOT NULL AUTO_INCREMENT COMMENT '死信记录自增ID',
|
|
event_id VARCHAR(64) NOT NULL COMMENT '审计事件全局唯一ID',
|
|
payload_text LONGTEXT NOT NULL COMMENT 'RocketMQ死信原始载荷',
|
|
status VARCHAR(16) NOT NULL DEFAULT 'PENDING' COMMENT '状态:PENDING待补偿、PROCESSING处理中、PROCESSED已处理、DEAD永久失败',
|
|
retry_count INT NOT NULL DEFAULT 0 COMMENT '死信重试次数',
|
|
next_retry_at DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) COMMENT '下次允许补偿时间',
|
|
lease_owner VARCHAR(128) NULL COMMENT '当前补偿租约持有实例',
|
|
lease_until DATETIME(3) NULL COMMENT '当前补偿租约截止时间',
|
|
last_error VARCHAR(1000) NULL COMMENT '最近一次补偿错误',
|
|
created_at DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) COMMENT '死信记录创建时间',
|
|
processed_at DATETIME(3) NULL COMMENT '补偿处理完成时间',
|
|
PRIMARY KEY (id),
|
|
UNIQUE KEY uk_audit_dead_event (event_id),
|
|
KEY idx_audit_dead_retry (status, next_retry_at, lease_until)
|
|
) ENGINE=InnoDB COMMENT='审计消息死信补偿表';
|