0

0

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

黄舟

黄舟

发布时间:2017-02-13 11:11:50

|

1304人浏览过

|

来源于php中文网

原创

    同大多数关系型数据库一样,日志文件是mysql数据库的重要组成部分。mysql有几种不同的日志文件,通常包括错误日志文件,二进制日志,通用日志,慢查询日志,等等。这些日志可以帮助我们定位mysqld内部发生的事件,数据库性能故障,记录数据的变更历史,用户恢复数据库等等。本文主要描述通用查询日志。

 

CRMEB Min开源商城
CRMEB Min开源商城

CRMEB Min是CRMEB品牌全新推出的一款轻量级、高性能、前后端分离的开源电商系统,完善的后台权限管理、会员管理、订单管理、产品管理、客服系统、CMS管理、多端管理、页面DIY、数据统计、系统配置、组合数据管理、日志管理、数据库管理,一键开通短信、产品采集、物流查询等接口,系统采用TP6+Mysql+Uniapp+iView+Redis+workerman+form-builder等最流行热

下载

1、MySQL日志文件系统的组成
   a、错误日志:记录启动、运行或停止mysqld时出现的问题。
   b、通用日志:记录建立的客户端连接和执行的语句。
   c、更新日志:记录更改数据的语句。该日志在MySQL 5.1中已不再使用。
   d、二进制日志:记录所有更改数据的语句。还用于复制。
   e、慢查询日志:记录所有执行时间超过long_query_time秒的所有查询或不使用索引的查询。
   f、Innodb日志:innodb redo log
   
   缺省情况下,所有日志创建于mysqld数据目录中。
   可以通过刷新日志,来强制mysqld来关闭和重新打开日志文件(或者在某些情况下切换到一个新的日志)。
   当你执行一个FLUSH LOGS语句或执行mysqladmin flush-logs或mysqladmin refresh时,则日志被老化。
   对于存在MySQL复制的情形下,从复制服务器将维护更多日志文件,被称为接替日志。

 

2、通用查询日志
   通用查询日志可以存放到一个文本文件或者表中,所有连接和语句被记录到该日志文件或表,缺省未开启该日志。
   通过--log[=file_name]或-l [file_name]选项启动它。如果没有给定file_name的值, 默认名是host_name.log。
   mysqld按照它接收的顺序记录语句到查询日志。这可能与执行的顺序不同。
   不同于更新日志和二进制日志,它们在查询执行后,但是任何一个锁释放之前记录日志。
   查询日志包含所有语句,而二进制日志不包含只查询数据的语句。
   服务器重新启动和日志刷新不会产生新的一般查询日志文件。

 

3、通用查询日志的系统变量
   log_output=[none|file|table|file,table]  #通用查询日志输出格式
   general_log=[on|off]                     #是否启用通用查询日志
   general_log_file[=filename]              #通用查询日志位置及名字

 

4、通用查询日志的备份 
   在Linux或Unix中,你可以通过下面的命令重新命名文件
   并创建一个新文件:
   shell> mv hostname.log hostname-old.log
   shell> mysqladmin flush-logs
   shell> cp hostname-old.log to-backup-directory
   shell> rm hostname-old.log
   在Windows中,服务器打开日志文件期间不能重新命名日志文件。必须先停止服务器然后重新命名日志文件。然后重启服务器来创建新日志文件。

 

5、演示通用查询日志的使用

a、启用通用查询日志
--演示环境
root@localhost[(none)]> show variables like '%version%';
+-------------------------+------------------------------+
| Variable_name           | Value                        |
+-------------------------+------------------------------+
| innodb_version          | 5.5.39                       |
| protocol_version        | 10                           |
| slave_type_conversions  |                              |
| version                 | 5.5.39-log                   |
| version_comment         | MySQL Community Server (GPL) |
| version_compile_machine | x86_64                       |
| version_compile_os      | Linux                        |
+-------------------------+------------------------------+

--查看系统变量
root@localhost[(none)]> show variables like '%general%';
+------------------+----------------------------+
| Variable_name    | Value                      |
+------------------+----------------------------+
| general_log      | OFF                        |
| general_log_file | /var/lib/mysql/suse11b.log |
+------------------+----------------------------+

--查看当前的通用日志,显示无日志文件
root@localhost[(none)]> system ls /var/lib/mysql/suse11b.log 
ls: cannot access /var/lib/mysql/suse11b.log: No such file or directory
--设置变量general_log以开启通用查询日志
root@localhost[(none)]> set @@global.general_log=1;
Query OK, 0 rows affected (0.00 sec)

--再次查看通用日志文件已存在
root@localhost[(none)]> system ls /var/lib/mysql/suse11b.log 
/var/lib/mysql/suse11b.log
root@localhost[(none)]> select * from tempdb.tb1;  --执行查询
+------+------+
| id   | val  |
+------+------+
|    1 | jack |
+------+------+

--查看通用日志文件内容
root@localhost[(none)]> system more /var/lib/mysql/suse11b.log
/usr/sbin/mysqld, Version: 5.5.39-log (MySQL Community Server (GPL)). started with:
Tcp port: 3306  Unix socket: /var/lib/mysql/mysql.sock
Time                 Id Command    Argument
141003 16:18:12     4 Query     show variables like '%general%'
141003 16:18:55     4 Query     select * from tempdb.tb1


b、更改通用查询日志位置
root@localhost[(none)]> exit
Bye
suse11b:~ # service mysql stop
Shutting down MySQL...                                          done
suse11b:~ # mysqld --general_log_file=/tmp/suse11b.log --user=mysql &
[1] 47009
suse11b:~ # ps -ef|grep mysql|grep -v grep
mysql    47009 44514  1 16:22 pts/0    00:00:00 mysqld --general_log_file=/tmp/suse11b.log --user=mysql
root     47053 44514  0 16:22 pts/0    00:00:00 grep mysql
suse11b:~ # mysql
root@localhost[(none)]> system ls /tmp/suse11b.log
ls: cannot access /tmp/suse11b.log: No such file or directory
root@localhost[(none)]> show variables like '%gener%';
+------------------+------------------+
| Variable_name    | Value            |
+------------------+------------------+
| general_log      | OFF              |
| general_log_file | /tmp/suse11b.log |
+------------------+------------------+

root@localhost[(none)]> set global general_log=on;
Query OK, 0 rows affected (0.01 sec)

--此时从系统变量看出,通用日志已经到/tmp目录下
root@localhost[(none)]> show variables like '%gener%';
+------------------+------------------+
| Variable_name    | Value            |
+------------------+------------------+
| general_log      | ON               |
| general_log_file | /tmp/suse11b.log |
+------------------+------------------+

--发布查询
root@localhost[(none)]> select count(*) from tempdb.tb1;
+----------+
| count(*) |
+----------+
|        1 |
+----------+

--查看通用日志文件内容
root@localhost[(none)]> system more /tmp/suse11b.log
mysqld, Version: 5.5.39-log (MySQL Community Server (GPL)). started with:
Tcp port: 3306  Unix socket: /var/lib/mysql/mysql.sock
Time                 Id Command    Argument
141003 16:30:03     1 Query     show variables like '%gener%'
141003 16:30:09     1 Query     select count(*) from tempdb.tb1


c、通用查询日志输出方式
--可以输出为文件,表以及不输出,即TABLE,FILE,NONE
--系统变量log_output
root@localhost[(none)]> show variables like 'log_output';
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| log_output    | FILE  |
+---------------+-------+

--下面修改为输出为表方式
root@localhost[(none)]> set global log_output='TABLE';
Query OK, 0 rows affected (0.00 sec)

root@localhost[(none)]> show variables like 'log_output';
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| log_output    | TABLE |
+---------------+-------+

--发布查询
root@localhost[(none)]> select * from tempdb.tb1;
+------+------+
| id   | val  |
+------+------+
|    1 | jack |
+------+------+

--Author: Leshami
--Blog  : http://www.php.cn/

root@localhost[(none)]> system more /tmp/suse11b.log
mysqld, Version: 5.5.39-log (MySQL Community Server (GPL)). started with:
Tcp port: 3306  Unix socket: /var/lib/mysql/mysql.sock
Time                 Id Command    Argument
141003 16:30:03     1 Query     show variables like '%gener%'
141003 16:30:09     1 Query     select count(*) from tempdb.tb1
141003 16:31:00     1 Query     show variables like 'log_output'
141003 17:00:48     1 Query     set global log_output='TABLE'  #通用查询日志输出到文件仅仅记录到全局变量的修改

--mysql.general_log记录了通用查询日志的信息
root@localhost[(none)]> desc mysql.general_log;
+--------------+------------------+------+-----+-------------------+-----------------------------+
| Field        | Type             | Null | Key | Default           | Extra                       |
+--------------+------------------+------+-----+-------------------+-----------------------------+
| event_time   | timestamp        | NO   |     | CURRENT_TIMESTAMP | on update CURRENT_TIMESTAMP |
| user_host    | mediumtext       | NO   |     | NULL              |                             |
| thread_id    | int(11)          | NO   |     | NULL              |                             |
| server_id    | int(10) unsigned | NO   |     | NULL              |                             |
| command_type | varchar(64)      | NO   |     | NULL              |                             |
| argument     | mediumtext       | NO   |     | NULL              |                             |
+--------------+------------------+------+-----+-------------------+-----------------------------+

--从通用查询日志表里查看通用查询日志的内容
root@localhost[(none)]> select thread_id,command_type,argument from mysql.general_log; 
+-----------+--------------+---------------------------------------------------------------+
| thread_id | command_type | argument                                                      |
+-----------+--------------+---------------------------------------------------------------+
|         1 | Query        | show variables like 'log_output'                              |
|         1 | Query        | select * from tempdb.tb1                                      |
|         1 | Query        | desc mysql.general_log                                        |
|         1 | Query        | select thread_id,command_type,argument from mysql.general_log |
+-----------+--------------+---------------------------------------------------------------+

root@localhost[(none)]> show variables like 'log_output';
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| log_output    | TABLE |
+---------------+-------+

--使用FILE,TABLE 2者混合输出通用日志
root@localhost[(none)]> set global log_output='file,table';
Query OK, 0 rows affected (0.00 sec)

root@localhost[(none)]> select @@global.log_output;
+---------------------+
| @@global.log_output |
+---------------------+
| FILE,TABLE          |
+---------------------+

root@localhost[(none)]> insert into tempdb.tb1 values(2,'robinson');
Query OK, 1 row affected (0.06 sec)

root@localhost[(none)]> commit;
Query OK, 0 rows affected (0.01 sec)

--验证结果,表和文件里边存在通用的日志记录
root@localhost[(none)]> system tail /tmp/suse11b.log|grep robinson
141003 17:41:54     2 Query     insert into tempdb.tb1 values(2,'robinson')
root@localhost[(none)]> select thread_id,command_type,argument from mysql.general_log
    -> where argument like '%robinson%';
+-----------+--------------+------------------------------------------------------------------------+
| thread_id | command_type | argument                                                               |
+-----------+--------------+------------------------------------------------------------------------+
|         2 | Query        | insert into tempdb.tb1 values(2,'robinson')                            |
|         2 | Query        | select thread_id,command_type,argument from mysql.general_log          |
|           |              |    where argument like ''robinson''                                    | 
+-----------+--------------+------------------------------------------------------------------------+


d、关闭通用查询日志
--可以通过设置系统变量general_log来关闭通用查询日志,此时日志输出设置为FILE,TABLE
root@localhost[(none)]> show variables like 'log_output';
+---------------+------------+
| Variable_name | Value      |
+---------------+------------+
| log_output    | FILE,TABLE |
+---------------+------------+

root@localhost[(none)]> set global general_log=off;
Query OK, 0 rows affected (0.01 sec)

root@localhost[(none)]> show variables like '%gener%';
+------------------+------------------+
| Variable_name    | Value            |
+------------------+------------------+
| general_log      | OFF              |
| general_log_file | /tmp/suse11b.log |
+------------------+------------------+

root@localhost[(none)]> delete from tempdb.tb1 where id=2;
Query OK, 1 row affected (0.12 sec)

root@localhost[(none)]> commit;
Query OK, 0 rows affected (0.00 sec)

root@localhost[(none)]> system tail -n 1 /tmp/suse11b.log
141003 17:45:13     2 Query     set global general_log=off

root@localhost[(none)]> select thread_id,command_type,argument from mysql.general_log
    -> where argument like '%delete%';
Empty set (0.00 sec)

--从上面的演示可知,尽管我们设置了log_output为FILE,TABLE,但general_log为OFF,通用日志无任何记录产生

root@localhost[(none)]> set global log_output=none;
Query OK, 0 rows affected (0.00 sec)

root@localhost[(none)]> set global general_log=1;
Query OK, 0 rows affected (0.00 sec)

root@localhost[(none)]> truncate table tempdb.tb1;
Query OK, 0 rows affected (0.01 sec)

root@localhost[(none)]> system tail -n 1 /tmp/suse11b.log
Time                 Id Command    Argument

--通过上面的演示,在log_output=none,general_log=on的清下下无任何通用日志输出。

 

鹏城DBA总群

以上就是MySQL 通用查询日志(General Query Log)的内容,更多相关内容请关注PHP中文网(www.php.cn)!

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

通义千问
通义千问

阿里巴巴推出的全能AI助手

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
go语言 注释编码
go语言 注释编码

本专题整合了go语言注释、注释规范等等内容,阅读专题下面的文章了解更多详细内容。

2

2026.01.31

go语言 math包
go语言 math包

本专题整合了go语言math包相关内容,阅读专题下面的文章了解更多详细内容。

1

2026.01.31

go语言输入函数
go语言输入函数

本专题整合了go语言输入相关教程内容,阅读专题下面的文章了解更多详细内容。

1

2026.01.31

golang 循环遍历
golang 循环遍历

本专题整合了golang循环遍历相关教程,阅读专题下面的文章了解更多详细内容。

0

2026.01.31

Golang人工智能合集
Golang人工智能合集

本专题整合了Golang人工智能相关内容,阅读专题下面的文章了解更多详细内容。

1

2026.01.31

2026赚钱平台入口大全
2026赚钱平台入口大全

2026年最新赚钱平台入口汇总,涵盖任务众包、内容创作、电商运营、技能变现等多类正规渠道,助你轻松开启副业增收之路。阅读专题下面的文章了解更多详细内容。

76

2026.01.31

高干文在线阅读网站大全
高干文在线阅读网站大全

汇集热门1v1高干文免费阅读资源,涵盖都市言情、京味大院、军旅高干等经典题材,情节紧凑、人物鲜明。阅读专题下面的文章了解更多详细内容。

73

2026.01.31

无需付费的漫画app大全
无需付费的漫画app大全

想找真正免费又无套路的漫画App?本合集精选多款永久免费、资源丰富、无广告干扰的优质漫画应用,涵盖国漫、日漫、韩漫及经典老番,满足各类阅读需求。阅读专题下面的文章了解更多详细内容。

67

2026.01.31

漫画免费在线观看地址大全
漫画免费在线观看地址大全

想找免费又资源丰富的漫画网站?本合集精选2025-2026年热门平台,涵盖国漫、日漫、韩漫等多类型作品,支持高清流畅阅读与离线缓存。阅读专题下面的文章了解更多详细内容。

19

2026.01.31

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
MySQL 教程
MySQL 教程

共48课时 | 2万人学习

MySQL 初学入门(mosh老师)
MySQL 初学入门(mosh老师)

共3课时 | 0.3万人学习

简单聊聊mysql8与网络通信
简单聊聊mysql8与网络通信

共1课时 | 820人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号