使用日志对MySQL进行监视是一种重要的方法,通过日志可以评估服务器的操作状态,服务器崩溃后可以帮助进行数据恢复,使用复制功能时,能够帮助用户判断慢查询,此外还可以帮助用户确认安全合规等问题。本篇将介绍MySQL的各种日志。
MySQL包含多个日志用于记录服务完全的行为,其中错误日志(Error log)包含服务器启动、关闭、异常等诊断信息。二进制日志(Binary log)包含数据更改的信息。通用查询日志(General query log)包含服务器从客户端接收到的全部语句。慢查询日志(Slow query log)包含执行时间过长的查询。审计日志(Audit log)在企业版中提供,包含基于规则的监视、记录、阻挡连接和查询的活动等。
日志的特点:
- 消耗大量的磁盘空间
- 存储在文件
- 存储在表
- 可加密
- 文本格式写入(二进制日志除外)
错误日志(Error Log)
错误日志默认开启,用于记录诊断信息,例如,记录MySQL服务器在启动和关闭过程中出现的错误,及警告信息等。使用组件可以对错误日志进行过滤及汇集的配置,例如,“log_fileter_internal”可以基于错误代码及事件的优先级进行过滤,“log_filter_dragnet”则可以基于用户提供的规则进行过滤。汇集组件包括log_sink_internal用于将日志内容写入到文件或控制台,“log_sink_json”用于将日志内容以JSON格式写入到文件或控制台,“log_sink_syseventlog”则用于将日志内容写入操作系统的系统日志中。
“log_fileter_internal”组件通过配置“log_error_verbosity”和“log_error_suppression_list”服务器变量进行过滤,“log_filter_dragnet”组件通过“log_error-fileter_rules”服务器变量定义过滤规则。
二进制日志(Binary Log)
日志包含数据和模式的变更及时间戳。MySQL8.0默认开启二进制日志。二进制日志通常用于时间点恢复及复制功能,当服务器重启,或达到日志最大容量设置时,日志将进行轮换。用户可以通过“SHOW BINARY LOGS”,“SHOW MASTER STATUS”查看日志的元数据,并且可以通过“SHOW BINLOG EVENTS”语句或“mysqlbinlog”客户端工具查看日志的内容。
二进制日志可以自动清理,用户通过“binlog_expire_logs_seconds”,“expire_logs_days”变量进行配置,默认为30日,在服务器重启或者日志轮换时进行清理。
此外,用户可以使用“PURGE BINARY LOGS”语句手动清理日志,例如,“PURGE BINARY LOGS TO 'log_name'”或“PURGE BINARY LOGS BEFORE ”
通用查询日志(General Query Log)
通用查询日志通过“general_log”服务器选项开启,该日志能够记录全部操作的进程ID、每种连接的类型和时间、所有表上的全部执行语句。(在从服务器基于行格式二进制日志存储的更新操作除外)
注意,通用查询日志的增长速度非常快,因为它在短期内收集并记录该期间内的全部活动,并且开销巨大,使用时需要注意。
慢查询日志(Slow Query Log)
用户使用慢查询日志定位查询过慢的语句,用于调优。通过服务器选项“slow_query_log启用”,日志记录执行时长超过阈值的语句,阈值默认为10秒,用户可以通过“long_query_time”选项修改阈值,单位为微秒。该日志还可以通过启用“log_queries_not_using_indexs”记录没有使用索引的长语句。默认情况下,管理语句不会记录到慢查询日志,用户可以开启“log_slow_admin_statements”选项启用记录。注意,从主服务器复制过来的语句不会出现在从服务器的慢查询日志中。
慢查询日志提供了服务器选项用于过滤记录的事件。“min_examined_row_limit”选项用于指定语句检查的最低行数。“log_throttle_queries_not_using_indexes”选项用于指定60秒内没有使用索引语句的数量,当日志记录这些查询后,将汇总数量与合计时间。
用户通过“mysqldumpslow”客户端能够汇总查看慢查询日志的内容,例如,
代码语言:javascript复制mysqldumpslow -g 'update `mem_inventory`.`MysqlServer` /var/lib/mysql/hostname-slow.log
“-g”选项用于提供查找的内容,结果仅显示与查询内容匹配的汇总信息。
日志轮换及刷新
日志会消耗大量的磁盘空间,用户需要定期备份、删除旧的日志。删除日志时需要注意,特别是使用二进制日志进行复制时。此外,备份后需要刷新日志,用户可以执行“FLUSH LOGS”语句或使用“mysqldadmin flust-logs”。刷新日志可以创建新的二进制日志、关闭并再开启错误日志,通用查询日志,及慢查询日志。注意,刷新日志前需要将当前的日志改名保存。例如,
代码语言:javascript复制cd /var/lib/mysql
mv server.log server.bk
mv mysql-slow.log mysql-slow.bk
mysqladmin flush-logs
以上内容是关于MySQL的日志介绍,感谢关注“MySQL解决方案工程师”!