MySql - 我删除了general_log表

mmd*_*bas 15 mysql mysql-error-1146

记录已启用

我启用日志记录使用:

SET GLOBAL log_output = 'TABLE';
SET GLOBAL general_log = 'ON';
Run Code Online (Sandbox Code Playgroud)

所有执行的查询都记录到mysql.general_log表中.没事.

尝试清除表格

然后表变大了,我想删除表中的所有记录.我执行了:

DELETE FROM general_log
Run Code Online (Sandbox Code Playgroud)

但这导致了一个错误,表示我无法锁定日志表.所以,我在禁用日志记录后删除了表格:

SET GLOBAL general_log = 'OFF';
DROP TABLE general_log;
Run Code Online (Sandbox Code Playgroud)

我希望再次启用日志记录会创建表,但我无法启用它.当我执行这个:

SET GLOBAL general_log = 'ON';
Run Code Online (Sandbox Code Playgroud)

它给出了这个错误:

表'mysql.general_log'不存在

问题

  1. 如何重新创作mysql.general_log
  2. 如何以mysql.general_log无痛的方式安全地清除?

pQd*_*pQd 19

重新创建:

USE mysql;

CREATE TABLE IF NOT EXISTS `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';
Run Code Online (Sandbox Code Playgroud)

清除表格:

TRUNCATE table mysql.general_log;
Run Code Online (Sandbox Code Playgroud)


m45*_*73r 5

1:

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
)
COMMENT='General log'
COLLATE='utf8_general_ci'
ENGINE=CSV;
Run Code Online (Sandbox Code Playgroud)

2:

TRUNCATE mysql.general_log;
Run Code Online (Sandbox Code Playgroud)


gla*_*ill 5

这是更新的版本,2012年的答案不再起作用:

CREATE TABLE mysql.general_log (
  `event_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  `user_host` mediumtext NOT NULL,
  `thread_id` bigint(21) unsigned 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'
Run Code Online (Sandbox Code Playgroud)


DrK*_*Key 5

MySQL 5.7.18

我已经放弃了 mysql.general_log桌子,但其他答案对我没有帮助。

然后,我注意到有关表结构的错误,因为它在 MySQL 5.7.18,所以我更改了一些字段,现在它可以工作了。

如果有人需要它:

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(21) unsigned NOT NULL,
  `server_id` int(10) unsigned NOT NULL,
  `command_type` varchar(64) NOT NULL,
  `argument` mediumblob
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COMMENT='General log'
Run Code Online (Sandbox Code Playgroud)