5.4.1 选择general log和slow query log的输出目标

对于要写入general log和slow query log的日志,mysql对输出目标提供了灵活的控制。日志条目的输出目标可能日志文件或者mysql系统数据库内的general_log和slow_log表。输出到表,文件,或者都可以选择。

 在服务器启动时的日志控制
 运行时的日志控制
 日志表的优点和特性

服务器启动时的日志控制
log_output系统变量指定了日志输出的目标。设置该变量并不会启动日志,日志必须另外单独启动。
 如果启动时没有指定log_output,则默认日志输出目标为FILE
 如果启动时指定了log_output,则它的值是一个或多个逗号分隔的列表,值可以为TABLE(输出到表),FILE(输出到文件),NONE。如果存在NONE,则它的优先级高于其他。
对于选定的日志目标,general_log系统变量控制输出到general log中。如果在服务器启动时指定它,general_log可选的参数为0或1来启动或者禁用该日志。为了指定文件名而不是日志输出的默认文件,请设置general_log_file变量。类似的,对于特定的输出目标,slow_query_log系统变量控制输出到slow query log并且设置slow_query_log_file可以指定日志记录的文件名。如果启用了任一日志,则服务器将打开相应的日志文件并向其中写入启动消息。 但是,除非选择了FILE日志目标,否则不会把后续的查询记录到文件。
例如:
 为了把general log条目写入到日志表和日志文件,可以使用–log_output=TABLE,FILE来选择两个输出目标,用–general_log来启用general log
 为了把general log和slow query log只写到日志表,请使用–log_output=TABLE来选择表作为日志输出目标,用–general_log和–slow_query_log来启用两个日志
 为了把slow query log只写入文件,请使用–log_output=FILE来选择文件作为日志输出目标,–slow_query_log来启用slow query log。此场景下,因为默认日志输出目标为FILE,那么可以忽略log_output的设置。
运行时的日志控制
与日志表和文件相关的系统变量可以在运行时控制日志记录:
 log_output变量指示了当前日志目标。可以在运行时通过修改它来改变目标。
 general_log和slow_query_log变量指示了general log和slow query log是否启用。你可以在运行时设置这些变量来控制日志是否启用
 general_log_file和slow_query_log_file变量指示了general log和slow query log的日志文件名。你可以在服务器启动或运行时设置这些变量来改变日志文件的名字。
 为了禁用或启用当前session的general log,请设置sql_log_off变量为ON或OFF(假设general log本身是启用的)
日志表的优点和特性
日志输出使用表有以下优点:
 日志条目有标准的格式。为显示日志表的当前结构,请使用这些语句:
SHOW CREATE TABLE mysql.general_log;
SHOW CREATE TABLE mysql.slow_log;
 日志内容可通过sql语句访问。这使得只选择满足特定条件的日志条目成为了可能。例如,选择和特定客户相关的日志内容(这对于识别来自该客户端的有问题的查询很有用), 使用日志表比使用日志文件更容易做到这一点。
 可以通过能够连接到服务器并发出查询的任意客户端远程访问日志(如果客户端具有适当的日志表特权的话)。不必登录到服务器主机并直接访问文件系统。
日志表的实现有以下特点:
 一般的,日志表的主要目的是为用户提供一个观察服务器运行的接口,而不会干扰其运行时的执行。
 CREATE TABLE,ALTER TABLE和DROP TABLE是对日志表的有效操作。 对于ALTER TABLE和DROP TABLE,日志表无法使用,必须禁用,如下所述。
 默认情况下,日志表使用CSV存储引擎,该引擎以逗号分隔的值格式写入数据。对于那些可以访问存放日志表数据的文件的用户,这些文件很容易导入到其他程序,例如可以处理CSV输入的电子表格。
日志表可以改变为使用MyISAM存储引擎。你不能使用ALTER_TABLE来改变正在使用的日志表。该日志必须首先被禁用。除了CSV或MyISAM之外,没有其他引擎可用于日志表。
日志表和”打开文件过多”错误。如果你使用表作为日志目标和日志表使用了CSV存储引擎,你可能会发现在运行时重复禁用和启用general log和slow query log会导致很多.CSV文件的文件描述符,可能会造成”打开文件过多错误”。为解决该问题,请执行FLUSH_TABLES或者保证open_files_limit的值大于tabke_open_cache_instances的值。
 为禁用记录以便你能alter(或drop)一个日志表,你可以使用以下策略。例子使用了general log。对于slow query log的流程于此类似,但使用的是slow_log表和slow_query_log系统变量。
SET @old_log_state = @@GLOBAL.general_log;
SET GLOBAL general_log = ‘OFF’;
ALTER TABLE mysql.general_log ENGINE = MyISAM;
ET 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转储包含了用于重新创建这些表的语句,以便在重新加载转储文件后不会丢失这些表。 日志表的内容不转储。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值