无法打开 MySQL 通用查询日志

无法打开 MySQL 通用查询日志

我正在尝试弄清楚如何打开/关闭 MySQL 5.1.48 通用查询日志,而无需重新启动服务器(目前在生产中不提供此选项)。在我的测试环境中,它不起作用。

根据,我应该可以说:

set global general_log = 'OFF';

确实有效:通用查询日志中不再添加查询。但是当我这样做时:

set global general_log = 'ON';

它抱怨说:

ERROR 1146 (42S02): Table 'mysql.general_log' doesn't exist

(确实没有),并且日志添加了一个标准启动头(“mysqld,版本:5.1.48...”),然后没有其他内容。

我是否可以转到具有相同平台/版本的另一个 MySQL 数据库,复制它show create table mysql.general_log;并在此处运行?这样安全吗,还是这是更深层次问题的征兆?当我打开常规查询日志时,我是否应该这样做?我在手册中没有看到任何关于此的内容。

答案1

全局 general_log 变量用于打开或关闭(默认关闭)当前选定的日志记录目标。如果未指定,则记录到 mysql.general_log 表:

如果省略 --log-output 或未指定值,则默认为 FILE。(对于 MySQL 5.1.6 至 5.1.20,默认日志记录目标是 TABLE。)

为了打开文件日志,您必须重新启动 MySQL 并指定--log-output=FILE(或 my.cnf 等效项)

对于记录到表,以下几点值得注意:

对于新安装的 MySQL 5.1.6 或更高版本,日志表在安装过程中与其他系统表一起创建。如果将 MySQL 从 5.1.6 之前的版本升级到 MySQL 5.1.6 或更高版本,则必须在升级后升级系统表以确保日志表存在。请参见第 4.4.8 节“mysql_upgrade — 检查 MySQL 升级表”。

第 4.4.8 节MySQL 手册中说:

mysql_upgrade 检查所有数据库中的所有表是否与 MySQL Server 的当前版本不兼容。mysql_upgrade 还会升级系统表,以便您可以利用可能已添加的新权限或功能。

值得阅读手册的该部分以确保您的系统表全部正确且为正确的版本。

噢,我再强调一遍:

在执行此类操作之前,请备份数据库

答案2

我已经创建了那张缺失的表格并为我工作。

use mysql;

CREATE TABLE `general_log` (
  `event_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  `user_host` mediumtext NOT NULL,
  `thread_id` int(11) NOT NULL,
  `server_id` int(10) unsigned NOT NULL,
  `command_type` varchar(64) NOT NULL,
  `argument` mediumtext NOT NULL
) ENGINE=CSV DEFAULT CHARSET=utf8 COMMENT='General log' 

相关内容