外观
MySQL 日志相关参数
错误日志参数
log_error
- 错误日志文件路径
- 用于记录 MySQL 服务器的错误信息
- 建议设置为明确的文件路径,便于管理
log_error_verbosity
- 错误日志的详细程度
- 1:仅记录错误信息
- 2:记录错误和警告信息
- 3:记录错误、警告和信息(默认)
log_warnings
- 控制是否记录警告信息
- 0:不记录警告
- 1:记录警告(默认)
- 2:记录详细警告
log_error_services
- 控制错误日志的服务插件
- 默认为 'log_filter_internal; log_sink_internal'
- 可以配置自定义的日志过滤器和接收器
log_error_suppression_list
- 控制错误日志中需要抑制的错误代码
- 可以指定多个错误代码,用逗号分隔
慢查询日志参数
slow_query_log
- 控制慢查询日志的启用状态
- 0:禁用慢查询日志
- 1:启用慢查询日志
slow_query_log_file
- 慢查询日志文件路径
- 用于记录执行时间超过阈值的查询
long_query_time
- 慢查询的时间阈值
- 单位为秒,默认值为 10
- 建议设置为 0.1-1 秒,便于捕获更多潜在的慢查询
min_examined_row_limit
- 慢查询的最小扫描行数
- 扫描行数少于此值的查询不会被记录
- 默认为 0,记录所有满足时间阈值的查询
log_queries_not_using_indexes
- 控制是否记录未使用索引的查询
- 0:不记录未使用索引的查询
- 1:记录未使用索引的查询
log_throttle_queries_not_using_indexes
- 控制未使用索引查询的记录频率
- 单位为每分钟,默认值为 0(无限制)
- 建议设置为 100-1000,避免日志文件过大
log_slow_admin_statements
- 控制是否记录管理语句
- 0:不记录管理语句
- 1:记录管理语句
log_slow_slave_statements
- 控制是否记录从库上的慢查询
- 0:不记录从库慢查询
- 1:记录从库慢查询
slow_query_log_use_global_control
- 控制是否使用全局控制变量
- 默认为 'all'
二进制日志参数
log_bin
- 控制二进制日志的启用状态
- 0:禁用二进制日志
- 1:启用二进制日志
- 可以指定二进制日志文件的前缀
log_bin_basename
- 二进制日志文件的基本名称
- 包括路径和文件前缀
log_bin_index
- 二进制日志索引文件路径
- 用于记录所有二进制日志文件的名称
binlog_format
- 二进制日志的格式
- STATEMENT:基于语句的复制
- ROW:基于行的复制
- MIXED:混合模式
binlog_row_image
- 基于行复制时的行镜像模式
- FULL:记录完整的行数据
- MINIMAL:只记录修改的列
- NOBLOB:不记录 BLOB 列
binlog_rows_query_log_events
- 控制是否记录行事件的原始查询
- 0:不记录
- 1:记录
sync_binlog
- 控制二进制日志的同步策略
- 0:由操作系统决定何时同步
- 1:每次事务提交时同步
- N:每 N 个事务同步一次
max_binlog_size
- 二进制日志文件的最大大小
- 默认为 1GB
- 超过此大小会创建新的二进制日志文件
expire_logs_days
- 二进制日志的过期天数
- 默认为 0(永不过期)
- 建议设置为 7-30 天,避免磁盘空间耗尽
binlog_expire_logs_seconds
- 二进制日志的过期时间(秒)
- 优先级高于 expire_logs_days
- 建议设置为 604800(7天)- 2592000(30天)
binlog_cache_size
- 二进制日志缓存的大小
- 用于缓存未提交事务的二进制日志
- 建议设置为 32KB-1MB
max_binlog_cache_size
- 二进制日志缓存的最大大小
- 用于限制单个事务的二进制日志缓存大小
- 默认为 1GB
binlog_stmt_cache_size
- 基于语句的二进制日志缓存大小
- 默认为 32KB
max_binlog_stmt_cache_size
- 基于语句的二进制日志缓存最大大小
- 默认为 1GB
通用查询日志参数
general_log
- 控制通用查询日志的启用状态
- 0:禁用通用查询日志
- 1:启用通用查询日志
general_log_file
- 通用查询日志文件路径
- 用于记录所有查询语句
log_output
- 控制日志的输出方式
- FILE:输出到文件
- TABLE:输出到表
- NONE:不输出
中继日志参数
relay_log
- 中继日志文件的前缀
- 用于从库复制时存储主库的二进制日志
relay_log_index
- 中继日志索引文件路径
- 用于记录所有中继日志文件的名称
relay_log_info_file
- 中继日志信息文件路径
- 用于记录中继日志的位置信息
relay_log_purge
- 控制是否自动清理中继日志
- 0:不自动清理
- 1:自动清理(默认)
relay_log_recovery
- 控制中继日志的恢复模式
- 0:不启用中继日志恢复
- 1:启用中继日志恢复
max_relay_log_size
- 中继日志文件的最大大小
- 默认为 0,与 max_binlog_size 相同
InnoDB 日志参数
innodb_log_file_size
- InnoDB 重做日志文件大小
- 较大的日志文件可以减少 checkpoint 频率
- 建议设置为 256MB-2GB
innodb_log_files_in_group
- InnoDB 重做日志文件组中的文件数
- 默认为 2
innodb_log_buffer_size
- InnoDB 重做日志缓冲区大小
- 用于缓存重做日志条目
- 建议设置为 16-64MB
innodb_flush_log_at_trx_commit
- 控制重做日志的刷新策略
- 0:每秒刷新一次
- 1:每次事务提交时刷新
- 2:每次事务提交时写入文件系统缓存,每秒刷新一次
innodb_flush_method
- 控制 InnoDB 的 I/O 刷新方法
- fsync:使用 fsync() 函数
- O_DSYNC:使用 O_DSYNC 模式
- O_DIRECT:使用 O_DIRECT 模式
审计日志参数
audit_log
- 控制审计日志的启用状态
- 0:禁用审计日志
- 1:启用审计日志
audit_log_file
- 审计日志文件路径
- 用于记录审计事件
audit_log_format
- 审计日志的格式
- NEW:新格式
- OLD:旧格式
- JSON:JSON 格式
audit_log_policy
- 审计日志的策略
- ALL:记录所有事件
- LOGINS:仅记录登录事件
- QUERIES:仅记录查询事件
- NONE:不记录任何事件
audit_log_rotate_on_size
- 审计日志的轮换大小
- 超过此大小会创建新的审计日志文件
日志管理参数
log_output
- 控制日志的输出方式
- FILE:输出到文件
- TABLE:输出到表
- NONE:不输出
log_timestamps
- 控制日志中时间戳的时区
- UTC:使用 UTC 时区
- SYSTEM:使用系统时区
log_error_verbosity
- 错误日志的详细程度
- 1:仅记录错误信息
- 2:记录错误和警告信息
- 3:记录错误、警告和信息
log_queries_not_using_indexes
- 控制是否记录未使用索引的查询
- 0:不记录
- 1:记录
log_throttle_queries_not_using_indexes
- 控制未使用索引查询的记录频率
- 单位为每分钟,默认值为 0(无限制)
日志安全参数
binlog_encryption
- 控制二进制日志的加密状态
- 0:禁用二进制日志加密
- 1:启用二进制日志加密
binlog_checksum
- 控制二进制日志的校验和
- NONE:不使用校验和
- CRC32:使用 CRC32 校验和
relay_log_recovery
- 控制中继日志的恢复模式
- 0:不启用中继日志恢复
- 1:启用中继日志恢复
日志性能参数
binlog_cache_size
- 二进制日志缓存的大小
- 用于缓存未提交事务的二进制日志
- 建议设置为 32KB-1MB
binlog_stmt_cache_size
- 基于语句的二进制日志缓存大小
- 默认为 32KB
innodb_log_buffer_size
- InnoDB 重做日志缓冲区大小
- 用于缓存重做日志条目
- 建议设置为 16-64MB
sync_binlog
- 控制二进制日志的同步策略
- 0:由操作系统决定何时同步
- 1:每次事务提交时同步
- N:每 N 个事务同步一次
日志轮换参数
expire_logs_days
- 二进制日志的过期天数
- 默认为 0(永不过期)
- 建议设置为 7-30 天
binlog_expire_logs_seconds
- 二进制日志的过期时间(秒)
- 优先级高于 expire_logs_days
- 建议设置为 604800(7天)- 2592000(30天)
max_binlog_size
- 二进制日志文件的最大大小
- 超过此大小会创建新的二进制日志文件
- 默认为 1GB
max_relay_log_size
- 中继日志文件的最大大小
- 默认为 0,与 max_binlog_size 相同
audit_log_rotate_on_size
- 审计日志的轮换大小
- 超过此大小会创建新的审计日志文件
日志监控参数
performance_schema
- 控制 Performance Schema 的启用状态
- 0:禁用 Performance Schema
- 1:启用 Performance Schema
performance_schema_max_thread_instances
- Performance Schema 中线程实例的最大数量
- 默认为 1000
performance_schema_max_file_instances
- Performance Schema 中文件实例的最大数量
- 默认为 10000
调优建议
错误日志调优
- 设置合适的错误日志详细程度
- 定期清理错误日志文件
- 监控错误日志中的关键错误
慢查询日志调优
- 设置合理的慢查询时间阈值
- 启用未使用索引查询的记录
- 定期分析慢查询日志
- 结合 pt-query-digest 等工具分析慢查询
二进制日志调优
- 选择合适的二进制日志格式
- 设置合理的二进制日志大小和过期时间
- 启用二进制日志加密
- 定期备份二进制日志
InnoDB 日志调优
- 设置合适的重做日志大小
- 选择合适的日志刷新策略
- 监控重做日志的使用情况
通用查询日志调优
- 仅在调试时启用通用查询日志
- 避免长时间启用通用查询日志
- 设置合理的日志输出方式
监控与管理
日志监控工具
- MySQL Enterprise Monitor
- Percona Monitoring and Management (PMM)
- Prometheus + Grafana
- ELK Stack (Elasticsearch, Logstash, Kibana)
日志管理最佳实践
- 建立集中式日志管理系统
- 定期备份重要日志文件
- 实施日志轮换策略
- 监控日志文件大小和增长速度
- 建立日志分析和告警机制
日志安全管理
- 限制日志文件的访问权限
- 加密敏感的日志信息
- 定期清理过期的日志文件
- 实施日志审计机制
常见问题(FAQ)
Q1: 如何优化慢查询日志的性能影响?
A1: 优化慢查询日志的性能影响:
- 设置合理的慢查询时间阈值,避免记录过多查询
- 启用慢查询日志的文件刷新缓存
- 使用 pt-query-digest 等工具定期分析慢查询日志
- 仅在需要时启用慢查询日志
- 考虑使用 Performance Schema 代替慢查询日志进行性能分析
Q2: 如何设置二进制日志的最佳大小?
A2: 设置二进制日志的最佳大小:
- 考虑复制延迟和恢复时间
- 较大的二进制日志可以减少日志轮换频率
- 较小的二进制日志可以加快恢复速度
- 建议设置为 512MB-1GB
- 结合 expire_logs_days 或 binlog_expire_logs_seconds 一起设置
Q3: 如何处理过大的日志文件?
A3: 处理过大的日志文件:
- 实施日志轮换策略
- 设置合理的日志过期时间
- 使用日志压缩工具压缩旧日志
- 建立日志归档机制
- 考虑使用集中式日志管理系统
Q4: 如何监控 MySQL 日志中的错误?
A4: 监控 MySQL 日志中的错误:
- 使用 ELK Stack 收集和分析日志
- 设置关键错误的告警机制
- 定期检查错误日志中的重复错误
- 使用脚本自动化分析错误日志
- 结合监控工具设置错误率告警
Q5: 如何优化 InnoDB 重做日志的性能?
A5: 优化 InnoDB 重做日志的性能:
- 设置合适的重做日志大小
- 选择合适的日志刷新策略
- 使用 SSD 存储重做日志文件
- 监控重做日志的使用情况
- 避免过度提交小事务
