MySQL的 - 我扔下general_log表(MySql - I dropped general

2019-07-31 08:06发布

启用日志记录

我启用日志记录使用 :

SET GLOBAL log_output = 'TABLE';
SET GLOBAL general_log = 'ON';

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

试图清除表

那么该表变大,我想从表中删除所有记录。 我执行:

DELETE FROM general_log

但是,这引起,说我不能锁定日志表中的错误。 于是,我放弃了表禁用日志记录后:

SET GLOBAL general_log = 'OFF';
DROP TABLE general_log;

我希望再次启用日志记录将创建表,但我无法启用它。 当我执行此:

SET GLOBAL general_log = 'ON';

它给出了这样的错误:

表“mysql.general_log”不存在

问题

  1. 如何创建mysql.general_log一遍吗?
  2. 如何清除mysql.general_log安全和无痛的方式?

Answer 1:

重新创建:

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';

清除表:

TRUNCATE table mysql.general_log;


Answer 2:

对于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;

对于2:

TRUNCATE mysql.general_log;


Answer 3:

这是更新的版本,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'


Answer 4:

好吧,有第一手的经验,这是什么工作对我来说,如果你的表得到由任何原因损坏,使用MySQL 5.6.11工作

use mysql;
SET GLOBAL general_log = 'OFF';

DROP TABLE general_log;

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` bigint(21) unsigned NOT NULL,  -- Be careful with this one.
  `server_id` int(10) unsigned NOT NULL,
  `command_type` varchar(64) NOT NULL,
  `argument` mediumtext NOT NULL
);

SET GLOBAL general_log = 'ON';

SET GLOBAL log_output = 'TABLE';

select * from mysql.general_log
order by event_time desc;


Answer 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'


文章来源: MySql - I dropped general_log table