我试图弄清楚如何打开/关闭 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;并在此处运行吗?这是安全的,还是这是更深层次问题的征兆?当我打开一般查询日志时,我应该这样做吗?我在手册中没有看到任何相关内容。
全局 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 还会升级系统表,以便您可以利用可能已添加的新权限或功能。
值得通读手册的那部分,以确保您的系统表全部正确且版本正确。
哦,我不能多次强调这一点:
在做这样的事情之前备份你的数据库