日志表的优点和特征
使用表进行日志输出具有以下优点:
•日志条目具有标准格式。要显示日志表的当前结构,请使用以下语句: mysql> SHOW CREATE TABLE mysql.general_log; mysql> SHOW CREATE TABLE mysql.slow_log;
CREATE TABLE `general_log` ( `event_time` timestamp(6) NOT NULL DEFAULT CURRENT_TIMESTAMP(6) ON UPDATE CURRENT_TIMESTAMP(6), `user_host` mediumtext NOT NULL, `thread_id` bigint unsigned NOT NULL, `server_id` int unsigned NOT NULL, `command_type` varchar(64) NOT NULL, `argument` mediumblob NOT NULL
CREATE TABLE `slow_log` ( `start_time` timestamp(6) NOT NULL DEFAULT CURRENT_TIMESTAMP(6) ON UPDATE CURRENT_TIMESTAMP(6), `user_host` mediumtext NOT NULL, `query_time` time(6) NOT NULL, `lock_time` time(6) NOT NULL, `rows_sent` int NOT NULL, `rows_examined` int NOT NULL, `db` varchar(512) NOT NULL, `last_insert_id` int NOT NULL, `insert_id` int NOT NULL, `server_id` int unsigned NOT NULL, `sql_text` mediumblob NOT NULL, `thread_id` bigint unsigned NOT NULL
日志表实现 具有以下特征:
•通常,日志表的主要目的是为用户提供一个界面,以观察服务器的运行时执行情况,而不干扰服务器的运行时执行情况。
•CREATE TABLE,ALTER TABLE和DROP TABLE是对日志表的有效操作。对于ALTER TABLE和DROP TABLE,日志表无法使用,必须禁用。
•默认情况下,日志表使用CSV存储引擎,该存储引擎以逗号分隔的值格式写入数据。对于有权访问包含日志表数据的.CSV文件的用户,这些文件很容易导入到其他程序中,例如可以处理CSV输入的电子表格。
可以更改日志表以使用MyISAM存储引擎。您不能使用ALTER TABLE更改正在使用的日志表。必须先禁用日志。除CSV或MyISAM之外,没有其他引擎可用于日志表。 Log Tables and “Too many open files” Errors.
如果您选择TABLE作为日志目标,并且日志表使用CSV存储引擎,则可能会发现在运行时重复禁用和启用常规查询日志或慢速查询日志会导致.CSV文件的许多打开文件描述符,可能会导致“打开的文件太多”错误。
要变通解决此问题,执行FLUSH TABLES或确保open_files_limit的值大于table_open_cache_instances的值。
•要禁用日志记录以便您可以更改(或删除)日志表,可以使用以下策略。该示例使用常规查询日志。慢查询日志的过程与此类似,但是使用了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是对日志表的有效操作。您可以使用以下策略自动重命名日志表(例如,执行日志轮换): 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;