5.2 mysql服务器日志
---------------------
mysql的几种日志类型:
1、错误日志:启动、运行、停止mysqld时遇到的问题
2、普通查询日志:建立客户端连接和从客户端接收的语句
3、二进制日志:改变数据的日志(也用于[主从]复制)
4、中继日志:主从复制的时候,主服务器将自己的二进制日志发送给从服务器,就叫中继日志
5、慢查询日志:执行时间超过 long_query_time 的查询
6、DDL日志(元数据日志):DDL语句执行的元数据选项
默认情况下,除了在windows上的错误日志,所有日志是不开启的;
默认情况下,服务器将日志写到mysql的数据目录;
我们可以通过刷新日志来让服务器关闭和重新打开日志文件;
使用FLUSH LOGS语句,执行带flush-logs或者refresh参数的mysqladmin命令,执行带--flush-logs或--master-data选项的mysqldump命令都会导致日志刷新;
当二进制日志的大小达到max_binlog_size这个系统变量的时候,也会刷新;
普通查询日志和慢查询日志可以在运行时控制;可以开启或关闭日志;可以改变日志文件名;
可以告诉服务器将普通查询日志和二进制日志写到日志表或者日志文件,或者二者兼之;
中继日志仅仅使用于主从复制;
++++++++++++++++++++
5.2.1 选择普通查询日志和慢查询日志的output destinations
++++++++++++++++++++
对于普通查询日志和慢查询日志的输出,mysql提供了灵活的控制;
可以输出到日志文件或者general_log和slow_log表(文件和表这2中输出目的地可以同时选择);
启动的时候控制日志:
--log-output选项指定了日志输出目的地;语法是--log-output=[value,...]
1、如果给出这个选项的时候给了值,这个值应该是一个或者多个逗号分隔的列表:对于表,TABLE;对于文件:FILE;
这个值也可以是NONE,这样,日志既不写到表里边,也不写到文件里边;如果指定了NONE这个值,它的优先级是最高的;
2、如果--log-output 选项省略了,默认的日志输出位置是文件;
系统变量general_log控制着普通查询日志的输出;
如果在启动的时候指定了,general_log使用可选的参数1或者0去控制是否开启普通查询日志;
如果想使用自定义的日志文件,设置general_log_file这个系统变量;
(和普通查询日志类似,慢查询日志使用的控制日志输出的变量是slow_query_log和slow_query_log_file;)
如果日志开启了,服务器将把启动信息写进去;但是,除非选定了日志文件的位置,否则,更进一步的查询日志不会写进文件;
(只指定是否开启日志不行,还得指定文件,不然日志是不会被记录的;)
举个例子:
1、如果想要将普通查询日志同时写到文件和表里边,使用--log-output=TABLE,FILE来同时选择这个两个输出目的地,同时还要使用--query_log去开启普通查询日志;
2、如果只是想将普通查询日志或者慢查询日志写到表里边,使用--log-output=TABLE将表作为日志输出目的地,同时还要使用--general_log或--slow_query_log来开启这个2种日志;
3、如果只是想将慢查询日志写到文件,使用--log-output=FILE将文件作为日志输出目的地,同时还要使用--slow_query_log来开启慢查询日志;
在这种情况下,因为默认的日志输出目的地就是文件,所以--log-output可省略;
运行时控制日志:
全局变量log_output表明了当前日志的输出目的地,可以在运行时修改这个变量来控制日志输出位置;
全局变量general_log和slow_query_log表明了普通查询日志和慢查询日志是否开启(ON OFF),可以在运行时修改这个2个变量来控制是否开启这2中日志;
全局变量general_log_file和slow_query_log_file展示了普通查询日志和慢查询日志文件,可以在服务器开启或运行的时候设置这2个变量来改变日志文件;
如果想要开启或者关闭当前连接的普通查询日志,可以设置会话变量sql_log_off为ON 或 OFF;
使用表来记录日志有下面几个好处:
1、日志实体有一个标准的格式;可以使用下面的语句查看当前的日志表的结构:
SHOW CREATEA TABLE mysql.general_log;
SHOW CREATEA TABLE mysql.slow_log;
2、通过SQL语句可以访问日志内容;这就使得我们可以查询满足特定规则的日志;
3、可以在任何能够访问当前服务器的客户端访问日志,而不用登陆当前服务器通过文件系统查看日志;
日志表实现有下面几个特点:
1、通常来说,日志表的目的是给用户提供一个接口来监测服务器的运行时异常;
2、CREATE TABLE, ALTER TABLE, DROP TABLE 对于日志表来说是合法的操作;对于ALTER TABLE 和DROP TABLE操作,日志表不能处于使用状态;
3、默认情况下,日志表使用CSV存储引擎,这个存储引擎将数据写成逗号分隔的格式;对于能够访问日志数据的.CSV文件的用户来说,这种文件可以很容易被导入到其他程序;
The log tables can be altered to use the MyISAM storage engine. You cannot use ALTER TABLE to alter a log table that is in use. The log must be disabled first.
No engines other than CSV or MyISAM are legal for the log tables.
如果我们想ALTER 表或 DROP 表,我们首先要关闭日志,下面以普通查询日志为例:
SET @old_log_state = @@global.general_log;
SET GLOBAL general_log = 'OFF';
ALTER TABLE mysql.general_log ENGINE = MyISAM;
SET GLOBAL general_log = @old_log_state;
TRUNCATE TABLE操作对于日志表来说是合法的;
RENAME TABLE 操作对于日志表来说也是合法的:
USE mysql;
DROP TABLE IF EXISTS general_log2;
CREATE TABLE general_log2 LIKE general_log;
RENAME TABLE general_log TO general_log_backup, general_log2 TO general_log;
CHECK TABLE 合法
LOCK TABLES 非法
INSERT DELETE UPDATE 不能在日志表上使用;只对服务器自身允许;
FLUSH TABLES WITH READ LOCK 和变量 read_only 对日志表没效果;
这些日志写在日志表,没有写到二进制日志,因此不能复制到从服务器;
想要刷新日志表或日志文件,使用FLUSH TABLES 和 FLUSH LOGS;
日志表不能分区;
mysqldump 将重建日志表的语句保存了下来,所以可以从dump文件中恢复,但是日志表的数据没有保存;
++++++++++++++++++++
++++++++++++++++++++
++++++++++++++++++++
++++++++++++++++++++
++++++++++++++++++++
普通查询日志和慢查询日志
最新推荐文章于 2025-06-30 20:11:00 发布