无法开启 MySQL 通用查询日志

Ken*_*Ken 2 mysql logging

我试图弄清楚如何打开/关闭 MySQL 5.1.48 常规查询日志,而无需重新启动服务器(现在不是生产中的选项)。在我的测试环境中,它不起作用。

根据这个,我应该可以说:

set global general_log = 'OFF';
Run Code Online (Sandbox Code Playgroud)

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

set global general_log = 'ON';
Run Code Online (Sandbox Code Playgroud)

它抱怨说:

ERROR 1146 (42S02): Table 'mysql.general_log' doesn't exist
Run Code Online (Sandbox Code Playgroud)

(真的,它没有),并且日志添加了一个标准的启动头(“mysqld,版本:5.1.48...”),然后没有别的。

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

Maj*_*nko 6

全局 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 升级表”。

MySQL 手册的第 4.4.8 节说:

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

值得通读手册的那部分,以确保您的系统表全部正确且版本正确。

哦,我不能多次强调这一点:

在做这样的事情之前备份你的数据库