MySQL 服务器有几种日志可以帮助你找出正在发生的活动。日志类别和说明如下表所示:

日志类型

写入日志的信息

错误日志

在启动,运行或停止mysqld时遇到的问题

一般查询日志

建立Client链接和接受的执行语句

二进制日志

改变数据的语句(也用于Replication)

中继日志

从Master服务器接收的数据更改

慢查询日志

查询花费了超过 long_query_time秒时间的执行语句

DDL日志(元数据日志)

由DDL语句执行元数据操作

一、慢查询日志和一般日志

可以在运行的服务中修改一般日志和慢查询日志的配置。

一般日志和慢查询日志可以存储在文件中或者存储在MySQL库的general_log和slow_log表中。

二、中继日志

仅仅用于MySQL主从配置中,Slave服务从Master服务读取数据库修改的二进制日志数据的信息存储。

三、日志文件刷新

1、当在会话中执行FLUSH LOGS语句,会强制关闭并重新打开日志文件。

2、当二进制日志大于max_binlog_size 设置时,会自动刷新日志。

四、一般日志和慢查询日志的输出位置控制

如果启动了MySQL服务的一般日志和慢查询日志,MySQL服务器可以灵活地控制日志的输出位置。

–log-output 参数应该设置为一个或多个单词(逗号分开)

table

记录到表

file(default)

记录到文件

None

不记录到表或者文件

五、管理一般日志和慢日志

全局log_output系统变量指示当前的日志记录目标。它可以在运行时修改以更改目标。

全局变量general_log和 slow_query_log变量指示常规查询日志和慢查询日志是启用(ON)还是禁用(OFF)。您可以在运行时设置这些变量以控制是否启用日志。

全局 变量general_log_file 和slow_query_log_file变量指示一般查询日志和慢速查询日志文件的名称。您可以在服务器启动时或运行时设置这些变量以更改日志文件的名称。

要禁用或启用当前连接的常规查询记录,请将会话sql_log_off变量设置 为 ON或OFF。

六、记录日志的数据表说明

一般来说,日志表的主要目的是为用户提供一个接口,以观察服务器的运行时执行情况,而不是干扰其运行时执行。

CREATE TABLE, ALTER TABLE并且 DROP TABLE是日志表上的有效操作。对于ALTER TABLE 和DROP TABLE,日志表不能被使用,并且必须被禁用,如后面所述。

默认情况下,日志表使用CSV 以逗号分隔值格式写入数据的存储引擎。对于有权访问 .CSV包含日志表数据的文件的用户,这些文件很容易导入其他程序,例如可处理CSV输入的电子表格。

日志表可以更改为使用 MyISAM存储引擎。您不能使用它 ALTER TABLE来更改正在使用的日志表。日志必须先禁用。除日志表以外CSV或 没有其他引擎MyISAM合法的日志表。

要禁用日志记录以便可以更改(或删除)日志表,可以使用以下策略。该示例使用通用查询日志; 慢查询日志的过程类似,但使用slow_log表和 slow_query_log系统变量。

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是日志表上的有效操作。您可以使用以下策略以原子方式重命名日志表(例如,执行日志循环):

使用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的转储包括报表中重新创建这些表,以便它们不会重新加载转储文件后失踪。日志表内容不会被转储。