目录
mysql System Schema (mysql系统库)
日志
日志简介
mysql服务器在运行的过程中会接受到各种请求,执行各种sql语句,记录各种数据,这些操作都会被记录为一个事件,以日志的形式保存到对应的日志文件中

1.默认情况下,除 Windows 上的错误⽇志外,不启⽤任何⽇志,Linux下默认开启错误⽇志和⼆进制⽇志2.在服务器运⾏期间可以控制⼀般查询和慢查询⽇志的禁⽤与开启,也可以更改⽇志⽂件名3.⼀般查询⽇志和慢查询⽇志记录可以写⼊⽇志表、⽇志⽂件或两者同时写⼊4. 默认情况下,所有启⽤的⽇志将写⼊数据⽬录,可以通过刷新⽇志强制服务器关闭并重新打开⽇志 ⽂件5. 通过 FLUSH LOGS 语句刷新⽇志来强制服务器关闭并重新打开⽇志⽂件,也可以使⽤mysqladmin的 flush-logs 或 refresh 参数,或mysqldump 的 --flush-logs 或 --master-data 选项6.中继⽇志仅⽤于主从复制过程中的从服务器
⼀般查询⽇志和慢查询⽇志的输出形式
(1)log_output 系统变量指定⽇志输出的形式,但并不会真正的启⽤⽇志。 log_output 可以有三个值,分别是: TABLE (表)、 FILE (⽂件)、 NONE (不输出),可以同时指定多个值,并⽤逗号隔开,未指定值时默认是 FILE ,如果列表中存在 NONE 则其他的不⽣效,也就是说 NONE 的优先级最⾼。
(2)通过设置 general_log 系统变量的值来控制⼀般查询⽇志的 开启 1 与 禁⽤ 0 ,如果要为⽇志指定⾃定义的绝对路径或⽂件名可以使⽤ general_log_file 系统变量(3) 通过设置 slow_query_log 系统变量的值来控制慢查询⽇志的 开启 1 与 禁⽤ 0 ,如果要为⽇志指定⾃定义的绝对路径或⽂件名可以使⽤ slow_query_log_file 系统变量(4)一般查询日志记录了所有的查询语句,慢查询日志只记录查询时间超时的查询语句,即慢查询日志是一般查询日志的子集
示例1:将⼀般查询⽇志写⼊⽇志表和⽇志⽂件
查询默认的路径
示例2:仅将⼀般查询⽇志和慢查询⽇志写⼊⽇志表
示例3:仅将慢查询⽇志写⼊⽇志⽂件
示例4:将⼀般查询⽇志和慢查询⽇志写⼊⽇志⽂件,并指定⾃定义的⽇志路径
示例5:将⼀般查询⽇志和慢查询⽇志写⼊⽇志⽂件和日志表,并指定⾃定义的⽇志文件名
重启mysql服务,再查询一下确认修改的内容
2.运⾏时的⽇志控制
(1)在运⾏时修改 log_output 的值,以更改⽇志的输出形式,通过语句控制:
语法:SET [GLOBAL|SESSION] variable_name=value
如:SET GLOBAL log_output=[FILE, TABLE, NONE]
(2)general_log[={0|1}] 和 slow_query_log[={0|1}] 可以表⽰启⽤和禁⽤⼀
般查询⽇志和慢查询⽇志
(3)general_log_file 和 slow_query_log_file 表⽰通⽤查询⽇志和慢查询⽇志⽂件名称
(4)只对当前会话禁⽤或启⽤⼀般查询⽇志记录,将 SESSION 作⽤域的 sql_log_off 变量设置
为 ON 或 OFF。即 SET SESSION sql_log_off =ON | OFF
3.使⽤⽇志表优点
(1) 可以通过 SQL 语句的条件查询过滤⽇志内容(使用where 条件),从⽽选择满⾜特定条件的⽇志记录。⽐如,某个客⼾端的⽇志;
(2)可以通过客⼾端程序连接到服务器并查询表中的⽇志信息,⽆需登录服务器主机访问⽂件系统
(3)⽇志记录具有标准格式,可看⽇志表的结构,可以使⽤以下语句:
SHOW CREATE TABLE mysql.general_log; # ⼀般查询⽇志SHOW CREATE TABLE mysql.slow_log; # 慢查询⽇志
⼀般查询⽇志
General query log - ⼀般查询⽇志,记录客⼾端连接或断开连接的信息,也会记录从客⼾端接收的每个SQL语句。如果开启将会产⽣⼤量的内容,⾮常耗费服务器资源,所以默认为关闭(不开启),要启⽤⼀般查询⽇志可以使⽤: -- general_log[={0|1}]
默认⽇志⽂件名为 host_name.log ,可以使⽤ general_log_file=file_name 修改;
记当客⼾端连接的⽇志⾏,使⽤ connection_type 来指⽰⽤于建⽴连接的协议。 TCP/IP 表⽰不使⽤SSL建⽴的TCP/IP连接、 SSL/TLS 表⽰使⽤SSL建⽴的TCP/IP连接、 Socket 表⽰Unix套接字⽂件连接、 Named Pipe 表⽰Windows命名管道连接、 Shared Memory 表⽰Windows共享内存连接
Mysqld按照接收到SQL语句的顺序将语句写⼊查询⽇志,这个顺序可能与语句执⾏的顺序不同
查看 General query log 一般查询日志这个表的建表字段
执行的命令为: mysql> SHOW CREATE TABLE mysql.general_log;
示例:
(1)查看是否开启一般查询日志及输出形式
mysql> show variables like 'log_output';
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| log_output | FILE |
+---------------+-------+
mysql> show variables like 'general_log';
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| general_log | OFF |
+---------------+-------+
(2)通过SQL语句查询日志
在argument中存的就是记录的SQL语句,但直接看的话是看不懂的,需要使用CAST()函数把编码后的内容转换为可读的字符类型,CAST函数的语法为: CAST(要转换的内容 AS 目标数据类型)