MySQL 通用查询日志(General Query Log)

通用查询日志记录了所有用户的连接开始时间和截止时间,以及发给 MySQL 数据库服务器的所有 SQL 指令。

业务场景:
当我们的数据发生异常时,开启通用查询日志,还原操作时的具体场景,可以帮助我们准确定位问题。

场景1:12 月 1 日下午,门店的收银台销售了 5 件化妆品,但是由于网络故障,流水没有及时上传到总部。12 月 1 日晚上 11:59,总部的历史库存被保存下来,但是因为没有收到门店的流水,所以没有消减库存。12 月 2 日上午,门店的网络恢复了,流水得以上传总部,这个时候,对应化妆品的库存才被消减掉。

场景解决方案:
控制通用查询日志的系统变量。通过这些变量,你会清楚怎么控制通用查询日志的开启和关闭,以及保存日志的文件是哪个。

mysql> SHOW VARIABLES LIKE '%general%';
+------------------+---------------+
| Variable_name | Value |
+------------------+---------------+
| general_log | OFF | -- 通用查询日志处于关闭状态
| general_log_file | GJTECH-PC.log | -- 通用查询日志文件的名称是GJTECH-PC.log
+------------------+---------------+
2 rows in set, 1 warning (0.00 sec)

系统变量 general_log 的值是 OFF,表示通用查询日志处于关闭状态。在 MySQL 中,这个参数的默认值是关闭的。因为一旦开启记录通用查询日志,MySQL 会记录所有的连接起止和相关的 SQL 操作,这样会消耗系统资源并且占用磁盘空间。我们可以通过手动修改变量的值,在需要的时候开启日志。

通用查询日志文件的名称是 GJTECH-PC.log。这样我们就知道在哪里可以查看通用查询日志的内容了。

开启查询日志:

mysql> SET GLOBAL general_log = 'ON';
Query OK, 0 rows affected (0.00 sec)
mysql> SET @@global.general_log_file = 'H:\mytest.log';
Query OK, 0 rows affected (0.02 sec)

查看通用日志:

2021-04-05T06:39:53.621980Z 28 Connect zhangsan@localhost on using SSL/TLS   -- 账号zhangsan从本地登录
2021-04-05T06:39:53.622085Z 28 Connect Access denied for user 'zhangsan'@'localhost' (using password: NO)  -- 没有使用密码,连接被拒绝了
2021-04-05T06:40:02.522303Z 29 Connect zhangsan@localhost on using SSL/TLS
2021-04-05T06:40:02.522913Z 29 Query select @@version_comment limit 1
2021-04-05T06:40:14.211511Z 29 Query SELECT *
FROM demo.invcount                         -- 查询数据表demo.invcount内容
2021-04-05T06:40:37.647625Z 29 Query UPDATE demo.invcount
SET plquant = - 5                          -- 更新数据表demo.invcount
WHERE itemnumber = 1
2021-04-05T06:41:15.047067Z 29 Query SELECT *
FROM demo.goodsmaster                      -- 查询数据表demo.goodsmaster

删除通用日志:

第一步:将开启的通用日志设置为关闭;
第二步:直接到保存日志的文件夹下把文件移走或删除;
第三步:开启通用日志设置;

未经允许不得转载:任鹏个人博客 » MySQL 通用查询日志(General Query Log)

赞 (0) 打赏

评论 0

取消
  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

微信扫一扫打赏