MySQL有很多种日志,这一篇文章里主要介绍一般查询日志。General Query Log,一般查询日志是用来记录MySQL服务器做了哪些事情,当客户端连接至MySQL服务器时,日志会记录来自客户端的查询语句。通常使用一般查询日志来确定错误来自哪个客户端。
日志的内容会包括客户端的连接类型,例如:TCP/IP,SSL(经过加密的TCP/IP),SOCKET(UNIX socket 文件通信)等等。需要注意的一点,日志里面的内容是按照从客户端接收的语句顺序记录,而不是按照实际执行的顺序记录,这一点与二进制日志有很大的不同。
二进制日志的格式对一般查询日志的影响。当二进制日志采用不同格式时,会对一般查询日志产生影响。当日志采用基于语句的格式(STATEMENT)时,主从复制的情况下,从机会记录所有接收的执行语句。并且,当连接主机的客户端使用了mysqlbinlog工具对日志里面的事件进行读取,该语句也会计入主机的一般查询日志。当日志采用基于数据行的格式(ROW)时,更新操作会发送实际的数据行进行,而不是使用查询语句,因此,一般查询日志里不会记录该部分的查询语句。同理,当日志采用混合格式(MIX)时,会有部分语句无法记录到一般查询日志。
默认情况下,一般查询日志是关闭的,可以通过设置general_log 进行开启和关闭。并通过general_log_file指定日志文件的名称。另外也可以通过设置log_output来指定日志是写入文件还是系统表。
关于安全性。有人可能会问:“记录查询语句会不会把密码也记录到日志里面?”,如果查询语句里包括明文的密码,记录到一般查询日志里面时密码经过重写,不是真实的密码。如果开启了 --log-raw 选项,则会在日志里面显示真实的密码,因此请确保仅在必要的时刻开启该选项。
以上内容是关于MySQL的一般查询日志的介绍,更多详细内容请访问:“https://dev.mysql.com/doc/refman/8.0/en/query-log.html”
感谢您关注“MySQL解决方案工程师”!