日志系列一之通用查询日志(general query log)

一、通用查询日志

用来记录用户的所有操作 ,包括启动和关闭MySQL服务、所有用户的连接开始时间和截止时间、发给 MySQL 数据库服务器的所有 SQL 指令等。当我们的数据发生异常时,查看通用查询日志,还原操作时的具体场景,可以帮助我们准确定位问题。

问题场景

在电商系统中,购买商品并且使用微信支付完成后,却发现支付中心的记录并没有新增,此时用户再次使用支付宝支付,就会出现重复支付的问题。但是当天去数据库中查询数据的时候,就会发现只有一条记录存在,那么此时给到的现象就是只有一条支付记录,但是用户却支付了两次。

对系统进行了仔细检查,没有发现数据问题,因为用户编号和订单编号以及第三方流水号都是对的,可是用户确实支付了两次,这个时候,我们想到检查通用查询日志,看看当天到底发生了什么。

查询后,发现用户使用微信支付完以后,出现网络故障,支付中心没有及时收到微信的支付的回调信息通知,导致当时没有写入数据。用户又使用支付宝支付,此时记录更新到支付中心。晚上微信的回调通知来了,但是支付中心已经存在支付宝的记录,所以覆盖了原始记录。

二、开启通用查询日志

1、通用查询日志默认是关闭的

SHOW VARIABLES LIKE '%general%';

1、永久性方式

修改my.cnf或者my.ini配置文件来设置。在[mysqld]组下加入log选项,并重启MySQL服务。格式如下

[mysqld]
general_log=ON
general_log_file=[path[filename]] #日志文件所在目录路径,filename为日志文件名

如果不指定目录和文件名,通用查询日志将默认存储在MySQL数据目录中的hostname.log文件中,hostname表示主机名

2、临时性方式

SET GLOBAL general_log=on; # 开启通用查询日志

SET GLOBAL general_log_file=’path/filename’; # 设置日志文件保存位置

三、查看日志

在通用查询日志里面,我们可以清楚地看到,什么时候开启了新的客户端登陆数据库,登录之后做了什么 SQL 操作,针对的是哪个数据表等信息 

四、停止日志

1、永久性方式

修改 my.cnf 或者 my.ini 文件,把[mysqld]组下的 general_log 值设置为 OFF 或者把general_log一项注释掉。修改保存后,再 重启MySQL服务 ,即可生效

[mysqld]
general_log=OFF

或者

[mysqld]
#general_log=ON

2、临时性方式

SET GLOBAL general_log=off;

五、删除\刷新日志

如果数据的使用非常频繁,那么通用查询日志会占用服务器非常大的磁盘空间。数据管理员可以删除很长时间之前的查询日志,以保证MySQL服务器上的硬盘空间

1、删除日志

通用查询日志的目录默认为MySQL数据目录。在该目录下手动删除通用查询日志

2、刷新日志

刷新MySQL数据目录,发现创建了新的日志文件。前提一定要开启通用日志

mysqladmin -uroot -p flush-logs

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值