1. 安装MySQL 8.0.32,官方下载地址:https://dev.mysql.com/downloads/mysql/,安装时保留默认配置,确保具备root操作权限。
2. 确认服务启动:Linux执行`sudo systemctl start mysqld`,Windows执行`net start mysql`。
3. 登录MySQL:执行命令:mysql -u root -p,输入密码后进入交互终端。
找到配置文件:Linux为`/etc/my.cnf`,Windows为`C:\ProgramData\MySQL\MySQL Server 8.0\my.ini`,在`[mysqld]`段末尾添加以下完整配置,勿遗漏任何参数: ``` [mysqld] server-id=1 log_bin=mysql-bin binlog_format=ROW expire_logs_days=7 ```
上述参数作用:开启二进制日志(审计载体)、设置日志格式为行级(精准记录字段变更)、保留7天日志(按需调整天数)。
Linux执行`sudo systemctl restart mysqld`,Windows执行`net stop mysql && net start mysql`,重启后验证:
执行命令:show variables like 'log_bin%';,返回`log_bin=ON`说明配置生效。
假设业务档案表名为`archives`,执行以下SQL建表: ``` CREATE TABLE archives ( id INT AUTO_INCREMENT PRIMARY KEY, content TEXT NOT NULL, operator VARCHAR(50) NOT NULL, create_time DATETIME DEFAULT CURRENT_TIMESTAMP ); ```
创建审计表`archives_audit`(全程记录变更): ``` CREATE TABLE archives_audit ( audit_id INT AUTO_INCREMENT PRIMARY KEY, archives_id INT NOT NULL, old_content TEXT, new_content TEXT, operator VARCHAR(50) NOT NULL, operate_type VARCHAR(10) NOT NULL, operate_time DATETIME DEFAULT CURRENT_TIMESTAMP, FOREIGN KEY (archives_id) REFERENCES archives(id) ); ```
触发器用于自动同步档案变更到审计表,需修改MySQL分隔符避免冲突(每段触发器前执行`DELIMITER //`):
验证触发器:执行`SHOW TRIGGERS FROM 库名;`(替换为实际数据库名),可看到3个触发器已创建。
按以下步骤测试全链路审计,所有SQL直接复制执行:
在审计表新增`client_ip VARCHAR(45)`字段,修改UPDATE触发器,添加`INET_ATCONNECTION()`函数获取客户端IP,例如: ``` INSERT INTO archives_audit (archives_id, old_content, new_content, operator, operate_type, client_ip) VALUES (OLD.id, OLD.content, NEW.content, NEW.operator, 'UPDATE', INET_ATCONNECTION()); ```
开启事件调度器,创建定时清理30天前数据的任务: ``` SET GLOBAL event_scheduler=ON; DELIMITER // CREATE EVENT event_clear_audit_logs ON SCHEDULE EVERY 1 DAY STARTS '2024-01-01 00:00:00' DO DELETE FROM archives_audit WHERE operate_time < NOW() - INTERVAL 30 DAY; END // DELIMITER ; ```