常规日志查询

常规查询日志是mysqld在做什么的常规记录 。当客户端连接或断开连接时,服务器会将信息写入此日志,并记录从客户端收到的每个SQL语句。当您怀疑客户端中的错误并想确切地知道客户端发送到mysqld的内容时,常规查询日志可能非常有用。

每一行表示客户端何时连接,当然也包括所用的连接类型, connection_typeTCP/IP(没有 SSL 建立 TCP/IP 连接),SSL/TLS(用 SSL 建立 TCP/IP 连接),Socket(Unix socket 文件连接),Named Pipe(Windows 命名管道连接),或Shared Memory(Windows 共享 memory 连接)之一。

mysqld按照接收语句的顺序将语句写入查询日志,这可能与它们执行的顺序不同。此日志记录顺序与二进制日志相反,二进制日志的执行顺序是在语句执行之后但释放任何锁之前。此外,查询日志可能包含仅选择数据的语句,而这些语句从未写入二进制日志。

在应答主服务器上使用基于语句的二进制日志记录时,其从属服务器接收的语句将写入每个从属服务器的查询日志中。如果客户端使用mysqlbinlog实用程序读取事件并将其传递到服务器,则将语句写入主服务器的查询日志 。

但是,当使用基于行的二进制日志记录时时,更新将作为行更改而不是 SQL语句发送,因此当binlog_formatROW时,这些语句永远不会写入查询 log。当此变量设置为MIXED时,也可能不会将给定更新写入查询 log,具体取决于所使用的语句。有关详细信息,请参阅第 16.2.1.1 节,“Statement-Based 和 Row-Based 复制的优点和缺点”

默认情况下,常规查询日志处于禁用状态。要明确指定初始常规查询日志状态,请使用 --general_log[={0|1}]。不带参数或参数为1时, --general_log启用日志。参数为0时,此选项禁用日志。要指定日志文件名,请使用--generallog_file=filename。要指定 log 目标,请使用log_output系统变量

Note

If you specify the TABLE log destination, see Log Tables and “Too many open files” Errors.

如果您没有为常规查询日志文件指定名称,则默认名称为 host_name.log。除非指定了绝对路径名以指定其他目录,否则服务器将在数据目录中创建文件。

要在运行时禁用或启用常规查询日志或更改日志文件名,请使用全局 变量general_log和 general_log_file系统变量。设置general_log为0(或OFF)禁用日志,设置为1(或ON)启用日志 。设置 general_log_file以指定日志文件的名称。如果日志文件已经打开,则将其关闭并打开新文件。

启用常规查询日志后,服务器会将输出写入log_output系统变量指定的任何目标 。如果启用日志,服务器将打开日志文件并向其中写入启动消息。但是,除非FILE选择了日志目标,否则不会进一步记录查询日志。如果目标是 NONE,则即使启用了常规日志,服务器也不会写入查询。如果log_output不是file,即使设置了日志文件地址,也不会写入日志信息。

服务器重新启动和 log 刷新不会导致生成新的常规查询 log 文件(尽管刷新关闭并重新打开它)。要重命名文件并创建一个新文件,请使用以下命令:

shell> mv host_name.log host_name-old.log
shell> mysqladmin flush-logs
shell> mv host_name-old.log backup-directory

 在 Windows 上,使用rename而不是mv

您还可以通过禁用 log 在运行时重命名常规查询 log 文件:

SET GLOBAL general_log = 'OFF';

禁用 log 后,在外部重命名 log 文件(比如从命令行)。然后再次启用 log:

SET GLOBAL general_log = 'ON';

 此方法适用于任何平台,不需要重新启动服务器。

要禁用或启用当前会话的常规查询日志记录,请将会话sql_log_off变量设置 为 ONOFF。(这假定常规查询日志本身已启用。)

服务器将重写写在一般查询日志中的语句中的密码,以使它们不会以纯文本形式出现。通过使用--log-raw选项启动服务器,可以抑制常规查询日志的密码重写 。此选项对于诊断目的可能有用,以查看服务器接收到的语句的确切文本,但出于安全原因,不建议将其用于生产。另见Section 6.1.2.3, “Passwords and Logging”.

密码重写的含义是,无法解析的语句(例如由于语法错误)不会写入通用查询日志,因为无法知道它们没有密码。需要记录所有语句(包括错误语句)的用例应使用该 --log-raw选项,请牢记这也绕过了密码重写。

密码重写只会应输入纯文本密码进行重写,对于希望得到密码哈希值的语句语法,将不会进行重写。如果为此类语法错误地提供了纯文本密码,则会将密码记录为给定,而不进行重写。例如,由于期望输入密码哈希值,因此记录了如下所示的语句:

CREATE USER 'user1'@'localhost' IDENTIFIED BY PASSWORD 'not-so-secret';

所述log_timestamps系统变量控制在写入到通用查询日志文件消息的时间戳的时区(以及慢查询日志文件和错误日志)。它不影响写入日志表的常规查询日志和慢速查询日志消息的时区,但是CONVERT_TZ()通过设置会话time_zone系统变量或通过设置会话系统变量,可以将从这些表中检索的行从本地系统时区转换为任何所需时区 。

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值