必须先执行 install component 'file://component_log_sink_json' 安装组件,再配置 log_error_services='log_filter_internal; log_sink_json' 并确保 log_error 为绝对路径且 mysql 用户有写权限。

INSTALL COMPONENT 是前提,不执行这一步,后续所有配置都无效。MySQL 8.0 默认不加载 JSON 日志写入器,log_sink_json 是可加载组件,必须显式安装,否则 log_error_services 再怎么改,日志还是纯文本。
必须先安装 component_log_sink_json 组件
执行命令:INSTALL COMPONENT 'file://component_log_sink_json';(注意前缀 file:// 不能省,也不能写成 file:/// 或绝对路径)
若报错 Component not found,说明组件文件缺失:
• 检查 SELECT @@plugin_dir; 返回的目录下是否存在 component_log_sink_json.so(Linux)或 component_log_sink_json.dll(Windows)
• 安装后无需重启 MySQL,但当前用户需具备 SYSTEM_VARIABLES_ADMIN 和 COMPONENT_ADMIN 权限
log_error_services 的顺序和组合不能错
过滤器必须在 sink 前,否则未过滤的日志全量进 JSON,可能包含大量低优先级噪音。
最小有效值是:SET PERSIST log_error_services = 'log_filter_internal; log_sink_json';
若还想保留传统文本日志,可叠加:SET PERSIST log_error_services = 'log_filter_internal; log_sink_internal; log_sink_json';
• 多个 sink 会各自输出:文本日志写入 log_error 指定路径,JSON 日志则生成 log_error 值 + .00.json、.01.json 等滚动文件
• 切勿写成 log_sink_json; log_filter_internal —— 这会导致过滤器完全不生效
DMap GL地图JSAPI(dmapgl)开发指南。用于编写、审查、调试 DMap 地图 API 代码,涵盖地图初始化、覆盖物渲染、图层管理、事件处理、控件交互等任务。当用户提及 dmap、dmapgl、jsapi‑gl 或相关地图开发需求时自动触发。
log_error 必须设为绝对路径且权限正确
log_sink_json 不自己指定路径,它完全依赖 log_error 系统变量的值。
• 必须在 [mysqld] 段中配置为绝对路径,例如:log_error = /var/log/mysql/error.log
• 目录需提前创建并授权:sudo mkdir -p /var/log/mysql && sudo chown mysql:mysql /var/log/mysql
• 若 log_error = stderr,JSON 会输出到控制台(不推荐生产);若该变量为空或未设置,JSON 尝试写入默认路径(如 /var/lib/mysql/hostname.err.00.json),但该目录通常无写权限
• SELinux 启用时,还需放行:sudo setsebool -P mysqld_disable_trans on 或调整上下文
验证 JSON 是否真正生效
改完配置后别急着看文件,先确认是否真在输出 JSON:
• 查看 log_error 指向的目录下是否有 .json 后缀的文件生成(如 error.log.00.json)
• 用 head -n 1 /var/log/mysql/error.log.00.json 看第一行是否为合法 JSON 对象(含 "prio"、"time"、"msg" 等字段)
• 若无文件或内容为空,重点检查三件事:组件是否成功安装、log_error_services 顺序是否对、log_error 路径对应目录是否有 mysql 用户写权限
log_error 的路径权限和 INSTALL COMPONENT 的执行时机——很多人在配置完才想起来装组件,或者把日志路径设成 /tmp/mysql-error.log 却忘了 /tmp 下 mysql 用户通常没写权。










