MySQL general_log

常常遇到这样的问题:数据库访问量很大,想要从SQL方面进行优化。往往开发同学会问:能看到哪些SQL执行比较频繁吗?回道:不能哦,只能看到当前正在运行的SQL和慢日志里记录的SQL。

常常遇到这样的问题:数据库访问量很大,想要从SQL方面进行优化。往往开发同学会问:能看到哪些SQL执行比较频繁吗?回道:不能哦,只能看到当前正在运行的SQL和慢日志里记录的SQL。

因为为了性能考虑,一般general log不会开启。slow log可以定位一些有性能问题的sql,而general log会记录所有的SQL。

mysql5.0版本,如果要开启slow log、general log,需要重启,从MySQL5.1.6版开始,general query log和slow query log开始支持写到文件或者数据库表两种方式,并且日志的开启,输出方式的修改,都可以在Global级别动态修改。

[email protected](none) 09:40:33>select version();
+————+
| version()  |
+————+
| 5.1.37-log |
+————+
1 row in set (0.02 sec)

设置日志输出方式为文件(如果设置log_output=table的话,则日志结果会记录到名为gengera_log的表中,这表的默认引擎都是CSV):

[email protected](none) 09:41:11>set global log_output=file;
Query OK, 0 rows affected (0.00 sec)

设置general log的日志文件路径:

[email protected](none) 09:45:06>set global general_log_file=‘/tmp/general.log‘;
Query OK, 0 rows affected (0.00 sec)

 开启general log:

[email protected](none) 09:45:22>set global general_log=on;
Query OK, 0 rows affected (0.02 sec)

过一段时间后,关闭general log:

[email protected](none) 09:45:31>set global general_log=off;
Query OK, 0 rows affected (0.02 sec)

查看tmp/general.log的信息,可以大致看到哪些sql查询/更新/删除/插入比较频繁了。比如有些表不是经常变化的,查询量又很大,就完全可以cache;对主备延迟要求不高的表,读可以放到备库;等等

时间: 2024-10-12 07:19:52

MySQL general_log的相关文章

清理 Mysql general_log

方法1: SET GLOBAL general_log = 'OFF'; RENAME TABLE mysql.general_log TO mysql.general_log2; DELETE FROM mysql.general_log2; 注意:当DELETE FROM mysql.general_log2执行删除表数据时,发现操作系统的数据文件还是存在的,需要手动删除该数据文件,再继续下面数据操作步骤 OPTIMIZE TABLE general_log2; RENAME TABLE m

搭建4.xdebug+mysql general_log

1.先把tgz的包在本地解压,把里面的tar包传到 centos的/root目录,使用tar -xvf 解压tar包,解压出了xdebug-2.2.4.package.xml, 2.进入xdebug,执行phpize 3.不报错的话 执行./configure --enable-xdebug 4.make && make install 6.vi /etc/php.ini,后面加入     [Xdebug]     zend_extension ="/usr/lib/php/mo

Windows下MySQL 5.6.19 general_log的设置

MySQL 5.6.19的general_log默认是关闭的,应该说MySQL的general_log默认是关闭的,不分具体版本和平台 一.从配置文件中启用general_log Windows下mysql的配置文件为my.ini,所在路径之前有介绍过:linux下好像是my.cnf. 用记事本打开my.ini,找到 #General and Slow logging. log-output=NONE general-log=0 general_log_file=”计算机名称.log” 把上面的

mysql开启general_log记录sql执行记录

方法一:更改my.cnf配置文件 vi /usr/local/kkmail/config/mysql/my.cnf 将下面两行注释取消掉,然后重启mysql #general_log = 1 #general_log_file = /tmp/kkmail_mysql.log # 设置general log保存路径# 好像只能设置保存到 /tmp 或 /var 文件夹下. 方法二:在mysql命令控制台操作 # 需要root用户才有访问此文件的权限 mysql> show global varia

MySQL 死锁与日志二三事

最近线上 MySQL 接连发生了几起数据异常,都是在凌晨爆发,由于业务场景属于典型的数据仓库型应用,白天压力较小无法复现.甚至有些异常还比较诡异,最后 root cause 分析颇费周折.那实际业务当中咱们如何能快速的定位线上 MySQL 问题,修复异常呢?下文我会根据两个实际 case,分享下相关的经验与方法. 1.Case1:部分数据更新失败 某天渠道同学反馈某报表极个别渠道数据为 0,大部分渠道数据正常.这个数据是由一个统计程序每天凌晨例行更新的,按理来说,要么全部正常,要么全部失败,那会

MySQL 日志

MySQL 日志 ================================================================================ 概述: ================================================================================ MySQL的日志分类: ★查询日志:general_log ★慢查询日志:log_slow_queries ★错误日志:log_error, log_

mysql二进制安装,升级,多实例部署

目标 理解线上部署考虑的因素 学会编译安装以及二进制安装mysql 学会升级mysql 学会多实例部署mysql数据库 学会合理部署mysql线上库 考虑因素: 版本选择,5.1,5.5还是5.6? 分支选择,官方社区版?percona server?mariadb? 推荐官方版,简单易上手 安装方式,包安装?二进制包安装?源码安装? 线上推荐二进制包安装 路径配置,参数配置(尽量模板化,标准化) 一个实例多个库,or多个实例单个库? 二进制安装mysql 下载软件安装包 解压放到指定目录(比如

MySQL使用Xtrabackup进行增量热备

增量热备是基于全备的,需要先进行一次全备 1.全备: #innobackupex --defaults-file=/etc/my.cnf --user=backup --password=123456 --host=127.0.0.1 --port=3306 /mysqlback/hotback 2.在库中修改数据 mysql> insert into test(name) values ('test5'),('test6'),('test7'),('test8'); Query OK, 4 r

MySQL升级

MySQL的升级相对来说还是比较简单的. 它支持两种方式的升级: 原地升级(In-place Upgrade) 关闭数据库,替换旧的二进制文件,重启数据库,执行mysql_upgrade 逻辑升级(Logical Upgrade) 用mysqldump导出数据,安装新的数据库版本,将数据导入到新的数据库中,执行mysql_upgrade 但是MySQL版本众多,不仅有各种大版本,譬如5.1,5.5,5.6,5.7,同一个大版本中也会有各种小版本. 那么官方支持怎么的升级路径呢? 1. 同一个大版