MySQL 5.7审计插件:从安装到日志轮转的实践指南
简介MySQL 5.7 社区版安全审计插件是针对Linux 64位系统的专业数据库审计组件面向需要满足安全合规要求或强化数据库监控的DBA、运维人员与安全工程师可完整记录SQL操作、登录与权限变更等行为助力审计追溯与故障排查。压缩包共6个文件、体积约568KB包含插件动态库、Shell辅助脚本及多份说明文档txt文件用于安装配置介绍和组件声明so文件为审计插件本体sh脚本可辅助偏移提取COPYING则保留开源许可信息结构小巧便于快速评估。资源包目前已有1143人学习下载。获取后可直接解压并对照文档部署明确插件安装、启用和日志策略配置的关键路径适合在测试环境先验证再投入生产尤其在MySQL 5.7社区版缺少官方审计功能时可作为轻量、可靠的补充方案。1. audit-plugin-mysql-5.7-1.1.7-921-linux-x86_64.zip 是什么一条能查“谁的 SQL”的审计日志链audit-plugin-mysql-5.7-1.1.7-921-linux-x86_64.zip 这个文件名里每一段都是信息mysql-5.7 表示按 MySQL 5.7 插件 API 编译1.1.7-921 是插件版本与构建号linux-x86_64 决定它只能装到 64 位 Linux 的 mysqld 里。装上它之后谁在什么时间、从哪个客户端 IP、用哪个账号执行了哪条 SQL都会被写进结构化审计日志而不是靠 MySQL 自带的 general log 硬扛。它解决两条刚需合规要求数据库有可追溯的访问记录出事时能快速定位某条高危 SQL 是谁执行的。适合的人很明确正在维护 MySQL 5.7、被等保或内部审计追着走的 DBA 和运维工程师以及要给客户交付“可审计数据库”的部署同学。下面按实际部署顺序写先对版本再安装再验证最后讲坑。2. 安装前先对齐环境版本 ABI、插件目录与四项检查清单2.1 为什么 1.1.7-921 只适配 MySQL 5.7版本号与 ABIMySQL 插件本质是一个编译好的共享库加载后直接跑在 mysqld 进程里。它要调用 MySQL 内部的插件 API而 5.6、5.7、8.0 各版本的插件结构体和函数签名并不一样这就是 ABI应用二进制接口差异。一个按 5.7 头文件编译出来的插件放进 8.0 的 plugin_dir 后 INSTALL PLUGIN 会直接报版本不符运气好点加载成功也会在特定语句执行时出问题属于“黑匣子型”故障。所以第一件事是把版本锁死。1.1.7 是插件自身的版本号921 是这套包的构建号它对应 MySQL 5.7 系列你只需要记住这套 zip 只服务 MySQL 5.7不通用。i386、ARM 或其他 Linux 发行版也不能直接套这个 x86_64 包常见做法是先在一台和线上 OS 一致的测试机上验证再铺开。真要确认构建号对应哪些修复内容去拿到包的发布页看 Release Notes别靠猜。2.2 安装前的四项检查版本、插件目录、存量插件与磁盘我一般不会上来就 unzip先花两分钟跑一组只读检查把环境摸清楚。下面这段就是部署前最常用的检查脚本# 1) 确认 MySQL 主版本必须落在 5.7 mysql -uroot -p -e SELECT VERSION(); # 2) 拿到插件目录后面 .so 就放在这里 mysql -uroot -p -e SHOW VARIABLES LIKE plugin_dir; # 3) 检查是否已有 audit 相关插件避免重复加载 mysql -uroot -p -e SHOW PLUGINS; | grep -i audit # 4) 确认 unzip 可用、数据盘有空间 unzip -v /dev/null 21 echo unzip available df -h /var/lib/mysql逐条说下执行逻辑。第 1 条 SELECT VERSION() 会输出类似 5.7.44-log 的完整版本只要大版本是 5.7 就可以继续。第 2 条 plugin_dir 决定你稍后把 libaudit_plugin.so 复制到哪常见值是 /usr/lib/mysql/plugin 或 /usr/lib64/mysql/plugin不同发行版不一样必须以这行输出为准。第 3 条是防止已经装过别的审计插件同名的 AUDIT 插件只能有一个重复加载会互相干扰。第 4 条看 unzip 命令和磁盘zip 解开一般也就几十 MB重点是审计日志将来落盘的目录要有足够空间。2.3 解压后该看到什么结构、架构与动态库检查检查通过后开始解压并顺手确认 .so 的架构与依赖unzip audit-plugin-mysql-5.7-1.1.7-921-linux-x86_64.zip # 解压后进入目录常见布局是 lib/ 下有核心 .sodocs/ 下有说明文档 ls -lR audit-plugin-mysql-5.7-1.1.7-921-linux-x86_64 # 确认 .so 是 64 位 x86 ELF file audit-plugin-mysql-5.7-1.1.7-921-linux-x86_64/lib/libaudit_plugin.so # 检查动态库依赖是否齐全出现 not found 要先补依赖 ldd audit-plugin-mysql-5.7-1.1.7-921-linux-x86_64/lib/libaudit_plugin.sofile 输出里出现 “ELF 64-bit LSB shared object, x86-64” 就说明架构对得上。ldd 如果出现 libxxx.so not found说明系统缺库最常见的是 libaio 之类的基础依赖补齐后再继续。这一步能挡掉一大半“装完一执行就出问题”的玄学故障。依赖干净了再把它复制进 plugin_dir。3. 把 zip 变成在线插件INSTALL PLUGIN 与 my.cnf 持久化3.1 复制 .so 到 plugin_dir 并确认属主权限明确 .so 路径后用下面命令复制并设置权限PLUGIN_DIR$(mysql -uroot -p -e SHOW VARIABLES LIKE plugin_dir; | awk NR2{print $2}) cp audit-plugin-mysql-5.7-1.1.7-921-linux-x86_64/lib/libaudit_plugin.so $PLUGIN_DIR/ chown mysql:mysql $PLUGIN_DIR/libaudit_plugin.so chmod 755 $PLUGIN_DIR/libaudit_plugin.so ls -l $PLUGIN_DIR/libaudit_plugin.so这段先把 plugin_dir 的值取到变量里避免手抄路径出错。cp 之后必须确认属主是运行 mysqld 的系统用户通常是 mysql否则加载时会出现权限类报错。chmod 755 保证可读可执行。常见的翻车点是复制完忘了 chown插件加载时日志里只留一句含糊的权限错误排查起来很费时间。3.2 INSTALL PLUGIN 注册与重启后的两件套复制到位后进入 MySQL 执行注册-- 注册 AUDIT 插件SONAME 必须和 .so 文件名完全一致 INSTALL PLUGIN AUDIT SONAME libaudit_plugin.so; -- 确认已加载且状态为 ACTIVE SHOW PLUGINS; SELECT PLUGIN_NAME, PLUGIN_STATUS, PLUGIN_VERSION FROM information_schema.plugins WHERE PLUGIN_NAME AUDIT;INSTALL PLUGIN 会在 mysql.plugin 表里写一条记录正常情况下重启后会自动加载这就是它和 LOAD PLUGIN 的区别。但我的习惯是双保险my.cnf 的 [mysqld] 段里同时加上 plugin-load-add并把审计参数也写进去这样即使实例做过迁移、重建配置也跟着走。下面是一个最小持久化配置[mysqld] plugin-load-addAUDITlibaudit_plugin.so audit_json_fileON audit_json_log_file/var/log/mysql-audit/mysql-audit.json audit_record_objectsON参数说明plugin-load-add 是启动时加载插件的兜底写法等号左边 AUDIT 是插件名右边是 .so 文件名audit_json_file 控制是否写 JSON 格式审计日志audit_json_log_file 指定日志绝对路径目录要提前创建并给 mysql 用户写权限audit_record_objects 记录具体对象访问后面章节会讲它的代价。写完配置要重启 mysqld 让参数生效重启后第一件事是执行 SHOW VARIABLES LIKE audit%; 确认参数都读进来了。3.3 核心参数速查一张表讲清 8 个必调项下表是我部署时逐项核对过的一组参数默认值以实例加载后 SHOW VARIABLES 的实际输出为准这里给的是推荐关注点参数名默认值参考作用与建议audit_json_fileOFF是否输出 JSON 审计日志审计落地必须为 ONaudit_json_log_file空JSON 日志路径必须指向 mysql 可写的目录audit_record_objectsOFF是否记录表级对象访问合规要求建议开audit_log_rotate_on_size0单文件超过该字节数自动轮转配合磁盘容量设定audit_json_buffer_size32768JSON 写入缓冲区日志量大可调大audit_buffer_size1048576审计事件内存缓冲影响高频写入性能audit_whitelist_users空不参与审计的用户名列表逗号分隔audit_uninstall_pluginOFF卸载保护开关设为 ON 才允许 UNINSTALL PLUGIN这里要特别解释 audit_uninstall_plugin它是插件的自我保护默认 OFF 时你 UNINSTALL PLUGIN 会被拒绝这是安全设计不是故障。想卸载时先 SET GLOBAL audit_uninstall_plugin ON; 再执行 UNINSTALL PLUGIN AUDIT; 完事后再设回 OFF它是名副其实的“后悔药”开关。其余参数大多支持 SET GLOBAL 动态调整但只有写进 my.cnf 才会重启后保留线上变更建议先动态调、观察稳定了再固化到配置文件。4. 开箱验证三行 SQL 开启 JSON 审计并用真实查询确认落盘4.1 最小开启命令三行 SQL 让审计立即生效如果你不想立刻重启实例可以先用 SET GLOBAL 动态开启SET GLOBAL audit_json_file ON; SET GLOBAL audit_json_log_file /var/log/mysql-audit/mysql-audit.json; SET GLOBAL audit_record_objects ON;第一行打开 JSON 日志总开关第二行指定落盘文件第三行记录对象访问。注意动态改参数只对当前运行实例生效重启后会回到 my.cnf 里的值所以最终要把这三项写进 [mysqld] 段。在改参数之前日志目录必须先建好并授权不然插件写文件时可能静默失败你等半天也等不到日志mkdir -p /var/log/mysql-audit chown mysql:mysql /var/log/mysql-audit chmod 750 /var/log/mysql-audit注意日志目录必须提前创建并授权否则插件写文件失败不会有任何客户端报错。目录属主和前面 .so 的属主是同一个逻辑mysqld 进程以 mysql 用户运行它写不了的文件插件不会替你报错这是审计插件最容易踩的“无声失败”坑。4.2 用一条业务查询验证日志输出开启后执行一条真实的写操作再回头查日志INSERT INTO test.audit_probe(id, note) VALUES (1, hello-audit);然后到日志目录看最后几行tail -n 5 /var/log/mysql-audit/mysql-audit.json正常情况下会看到类似下面的结构字段顺序和格式以实际版本为准{date:2025-01-01T10:00:00,thread:42,class:INSERT,user:app_user,ip:10.0.0.5,db:test,query:INSERT INTO test.audit_probe ...}逐字段解释date 是执行时间class 是语句类别user 是登录账号ip 是客户端来源db 是默认库query 是完整 SQL。这条记录证明插件已经进入工作状态。如果机器上有 jq还可以做结构化过滤比如统计哪个用户执行量最大jq -r .user /var/log/mysql-audit/mysql-audit.json | sort | uniq -c | sort -rn | head -20这条链路过一遍之后你才算把审计日志从“装上了”推进到“能用了”。4.3 日志轮转与权限别让审计日志把磁盘撑爆全量审计的日志量很可观SELECT 频繁的业务一天写几 GB 是常态。插件自带 audit_log_rotate_on_size 参数可以按大小轮转我一般配合 logrotate 一起用写一个独立配置cat /etc/logrotate.d/mysql-audit EOF /var/log/mysql-audit/mysql-audit.json { daily rotate 30 compress missingok copytruncate su mysql mysql } EOF配置里关键的是 copytruncate插件会一直持有日志文件的写句柄rename 方式轮转会导致插件继续写旧文件copytruncate 先把文件复制一份再清空原文件更适合服务进程持续写入的日志。rotate 30 加 compress 能压住历史体量。执行 logrotate -f /etc/logrotate.d/mysql-audit 手工触发一次确认没有报错再看磁盘变化。这一步做完审计日志才不会被磁盘告警反噬。5. 审计插件避坑记录5 个翻车现场与修复路径5.1 现象INSTALL PLUGIN 报版本错误现象执行 INSTALL PLUGIN AUDIT SONAME libaudit_plugin.so返回类似 plugin ... is for another MySQL version 的错误。原因把 5.7 的包装到了 5.6 或 8.0 实例上或者 .so 本身是其他平台编译的。解决停下安装先 SELECT VERSION(); 确认大版本再去拿对应版本的审计插件包5.7 就用本标题这套 mysql-5.7 包。跨大版本硬装没有后悔药别浪费时间。5.2 现象插件加载成功但日志文件一直不生成现象SHOW PLUGINS 里 AUDIT 状态是 ACTIVEaudit_json_file 也是 ON但指定路径下没有文件。原因日志目录不存在或 mysql 用户对目录没有写权限插件写文件失败但不会在客户端报错。解决按 4.1 的命令创建目录并 chown mysql:mysql再执行两条命令重置写句柄SET GLOBAL audit_json_file OFF; SET GLOBAL audit_json_file ON;然后用 ls -l 确认文件出现。血泪经验先看目录权限再怀疑插件本身。5.3 现象重启后 SHOW PLUGINS 里 AUDIT 消失现象刚装完一切正常重启 mysqld 后 audit% 参数和插件都查不到了。原因只执行了 INSTALL PLUGIN但实例后来做过 mysql 库恢复或部署流程里 my.cnf 没有同步插件加载项mysql.plugin 表里的注册记录丢了。解决把 plugin-load-addAUDITlibaudit_plugin.so 写进 [mysqld] 段这样只要 .so 文件在启动就会尝试加载再配合 INSTALL PLUGIN 双保险。我的习惯是部署时验证一次“重启前 SHOW PLUGINS 和重启后 SHOW PLUGINS 输出一致”。5.4 现象审计日志一天写几十 GB磁盘报警现象开启全量审计后数据盘快速被打满业务 SELECT 也被逐条记录。原因没设轮转也没做用户过滤高频只读账号的 SELECT 全量落盘量级远超预期。解决先配置 logrotate 和轮转参数止损-- 超过 1GB 自动轮转具体值按磁盘容量调整 SET GLOBAL audit_log_rotate_on_size 1073741824;再用 6.1 的 audit_whitelist_users 把内部运维账号、只读账号加进白名单如果还需要细粒度考虑只记录 INSERT、UPDATE、DELETE、DROP 等高危类别缩小记录面。磁盘是硬约束先保证不炸盘再谈完整性。5.5 现象UNINSTALL PLUGIN 被拒绝插件卸载不掉现象想停用审计执行 UNINSTALL PLUGIN AUDIT返回错误插件像锁死了一样。原因audit_uninstall_plugin 参数默认 OFF这是插件刻意做的卸载保护。解决按顺序执行下面两行SET GLOBAL audit_uninstall_plugin ON; UNINSTALL PLUGIN AUDIT;卸载成功后把该参数设回 OFF并同步删掉 my.cnf 里的 plugin-load-add 行否则下次启动又会加载。这个开关是误装后的“后悔药”但操作顺序不能反。6. 进阶调优白名单过滤、敏感对象审计与性能验证6.1 内部账号白名单让监控和备份语句不再刷屏全量审计的第一轮数据噪音很大监控探活、备份账号、复制账号的语句会占掉相当比例。常见做法是跑几小时后先统计日志里的 user 分布再把高频内部账号加进白名单SET GLOBAL audit_whitelist_users root,replica,monitor,backup_user;匹配的是登录账号逗号分隔加白后这些账号产生的语句不再进审计日志。生产环境建议只放行内部运维身份让应用账号保持被审计状态信噪比会好很多。6.2 敏感对象审计audit_record_objects 的取舍与定位audit_record_objects 开启后日志会带上被访问的表对象对追查敏感表泄露很有用但每条语句元数据变多、日志膨胀更快。我的做法是含身份证、支付信息的库开对象级审计普通业务库只按语句类别记录。配合 jq 能快速定位访问过某张表的记录jq -r select(.query | contains(t_user_pay)) | .date .user .ip \ /var/log/mysql-audit/mysql-audit.json | tail -50这条命令把 query 字段包含指定表名的行过滤出来按时间、账号、IP 输出追查时比翻原始日志高效。6.3 性能验证同一套负载审计开关各跑十分钟审计插件的开销集中在事件缓冲和磁盘写入高频小事务场景影响最明显。我现在的习惯是先在测试实例上用压测脚本跑十分钟只读负载记录基线 TPS再开审计跑同样的十分钟对比两次差值下降超过 8% 就调大 audit_buffer_size 和 audit_json_buffer_size再重测直到差值落在可接受区间整个过程二十分钟结论写进变更单。审计日志平时看着占磁盘真出事时它就是证据链值得在安装前多花这一点时间。希望帮到你。本文还有配套的精品资源点击获取

相关新闻

K-Means的两位近亲:K-Medoids与Fuzzy C-Means深度解析

K-Means的两位近亲:K-Medoids与Fuzzy C-Means深度解析

做了这么多年聚类,我越来越有个感触:K-Means是大多数人的起点,但它真不是终点。数据里混几个离群点,均值中心瞬间被拽偏;两个簇本身就有重叠,你非要给每个样本一个非此即彼的标签,总觉得是在自欺…

2026/10/14 23:57:37 阅读更多 →
汽车修理厂管理系统实战:数据库设计、工单状态与权限控制全解析

汽车修理厂管理系统实战:数据库设计、工单状态与权限控制全解析

简介:这一套汽车修理厂汽车修理管理系统源码包,面向汽修门店管理者与Windows桌面软件开发者,覆盖客户档案、预约排班、维修订单、配件库存、财务收支、员工考核等核心业务场景,可用于快速搭建或二次开发中小型汽修管理系统。压缩包…

2026/10/14 23:57:37 阅读更多 →
金融智能体Agent架构设计:分层解耦与风控合规实战

金融智能体Agent架构设计:分层解耦与风控合规实战

干金融系统的同学这几年应该都有同一个感受:大模型Agent在各个行业遍地开花,但一碰到金融场景,通用方案几乎全得推倒重来。我过去一年深度参与了某金融业务运营助手的架构设计,从最初的"给模型接几个API"演进到完整的分…

2026/10/14 23:57:37 阅读更多 →

最新新闻

AI配音生成后怎么检查?这几个细节容易影响视频效果

AI配音生成后怎么检查?这几个细节容易影响视频效果

用 AI 配音制作视频,最容易忽略的一个环节,就是语音生成后的检查。很多人把文案输入工具,生成声音后就直接放进视频里。结果发布前才发现,有些地方停顿奇怪,数字读得不对,或者一句话还没说完,语…

2026/10/15 0:42:38 阅读更多 →
其实A市场博弈是在和自己博弈--心理账户陷阱:亏了 5000 → 你想“这够我吃半年早餐

其实A市场博弈是在和自己博弈--心理账户陷阱:亏了 5000 → 你想“这够我吃半年早餐

行为金融学里最经典的"坑"——处置效应 目录 行为金融学里最经典的"坑"——处置效应 一、先给你的症状起个名字 二、为什么会这样?——4 个心理机制同时发作 1. 损失厌恶(Loss Aversion) 2. 心理账户(Mental Accounting)—— 这是你的最大陷阱 3. 沉…

2026/10/15 0:42:38 阅读更多 →
视频旁白里的英文和数字总读错,怎么处理?

视频旁白里的英文和数字总读错,怎么处理?

制作教程、数码分享或知识类短视频时,有一种问题很容易被忽略:文案看起来没有问题,转换成语音后,却可能出现英文缩写读得奇怪、数字不符合语境、符号被直接念出来等情况。这类问题不一定是配音工具不好用,也可能与文字…

2026/10/15 0:42:38 阅读更多 →
西安奕致格客服热线上线:怎么联系、该打哪个号、咨询前准备什么

西安奕致格客服热线上线:怎么联系、该打哪个号、咨询前准备什么

活动策划项目的沟通有一个共同特点:问题往往集中在筹备期的最后几周集中出现。场地确认、流程调整、物料变更、现场衔接,每一件都需要快速找到对的人。过去,西安奕致格文化传媒有限公司(简称奕致格)对外的沟通主要依赖…

2026/10/15 0:41:38 阅读更多 →
重大提醒!江苏宝珀售后服务网点最新地址及人工客服电话2026年10月更新

重大提醒!江苏宝珀售后服务网点最新地址及人工客服电话2026年10月更新

江苏表主在送修前最需要确认的,往往不是"能不能修",而是"去哪修、打哪个电话、要不要预约"。重大提醒!江苏宝珀售后服务网点最新地址及人工客服电话2026年10月更新所整理的,正是江苏本地可核对的送修信息。宝珀对外可查的…

2026/10/15 0:41:38 阅读更多 →
AI大模型API聚合平台选型2026新解:稳定性、协议兼容与成本三维实测

AI大模型API聚合平台选型2026新解:稳定性、协议兼容与成本三维实测

API聚合与调度平台已演变为关键数字基础设施,不再只是简单的流量通道,直接关系业务连续性、数据安全合规与技术栈演进:一次服务中断可能导致生产流水线停摆,模糊计费会埋下财务审计隐患。本文基于2026年第一季度实测数据&#xff…

2026/10/15 0:41:38 阅读更多 →

日新闻

Docker Compose 容器化部署 ChirpStack LoRaWAN 网络服务器实战

Docker Compose 容器化部署 ChirpStack LoRaWAN 网络服务器实战

1. 为什么选择容器化方式部署 LoRa 网络服务LoRa 物联网项目落地时,网络服务器是整个链路的核心枢纽。它负责接收网关上报的数据包、完成去重与解密、再把有效载荷分发给上层应用。早期大家习惯把网络服务器直接装在物理机上,依赖一堆系统库和特定版本的…

2026/10/15 0:00:46 阅读更多 →
共享LLM服务下的跨模型自动扩缩容:Kubernetes实战与避坑指南

共享LLM服务下的跨模型自动扩缩容:Kubernetes实战与避坑指南

1. 共享推理服务里,扩缩容到底难在哪做过大模型推理服务部署的人,大概都经历过这样的场景:一个团队共用一套推理集群,A 业务跑的是 7B 的小模型,B 业务跑的是 72B 的大模型,C 业务白天流量高、晚上几乎归零…

2026/10/15 0:00:46 阅读更多 →
Systemd 启动阶段根文件系统只读之谜:fstab 与 remount-fs 服务深度解析

Systemd 启动阶段根文件系统只读之谜:fstab 与 remount-fs 服务深度解析

1. 引子:一次内核恐慌引发的追查先从一个真实场景说起。某次我给一台老旧的嵌入式设备折腾系统裁减,为了把启动时间压进两秒以内,我手贱地把一串自认为“没用”的 systemd 服务给 disable 了,其中就包括systemd-remount-fs.servic…

2026/10/15 0:00:46 阅读更多 →

周新闻

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

简介:基于 ARIMA、LSTM、Transformer 等模型的流感时间序列预测 Python 源码,面向计算机相关专业课程设计与期末大作业学生,以及项目实战学习者。内容覆盖预处理、平稳性检验、定阶、残差分析、多模型对比预测的完整时序建模流程,…

2026/10/14 3:30:28 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别 做影刀RPA自动化,十个新手有八个栽在"往输入框里填东西"这件事上:要么填不进去,要么填了一半,要么直接把原来内容追加在后面。这背后的根因&…

2026/10/14 16:30:29 阅读更多 →
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容 1. 认识影刀:什么场景该用RPA采小说数据 起点中文网的页面结构相对稳定——分类榜单、书籍详情、章节内容三块独立页面,跳转链路清晰。这种场景非常适合影刀自动化&#x…

2026/10/14 3:29:58 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/15 0:14:36 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/14 22:45:47 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/14 7:53:34 阅读更多 →