【问题标题】:I dropped general_log table, how do I create it again?我删除了 general_log 表,如何再次创建它?
【发布时间】:2012-09-03 11:36:26
【问题描述】:

启用日志记录

我启用了日志记录using

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

【问题讨论】:

  • +1 因为没有说“我的同事执行了DROP TABLE

标签: mysql mysql-error-1146


【解决方案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;

【讨论】:

    【解决方案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;
    

    【讨论】:

    • 感谢您的回答。不幸的是,尽管答案几乎完全相同,但只能接受一个答案。我接受了第一个答案。
    【解决方案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'
    

    【讨论】:

    • 区别在于...thread_id 列的大小。你应该提到这一点。
    【解决方案4】:

    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'
    

    【讨论】:

      【解决方案5】:

      好的,有第一手经验,这对我有用,如果您的表因任何原因损坏,请使用 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;
      

      【讨论】:

        【解决方案6】:

        在 MySQL 8.0.17 中重新创建表:

        use mysql;
        CREATE TABLE general_log(
        event_time timestamp(6) NOT NULL ,
        user_host mediumtext NOT NULL,
        thread_id bigint(21) unsigned NOT NULL,
        server_id int unsigned NOT NULL,
        command_type varchar(64) NOT NULL,
        argument mediumblob NOT NULL
        ) ENGINE=CSV DEFAULT CHARSET=utf8 COMMENT='General log';
        

        【讨论】:

          猜你喜欢
          • 2012-03-19
          • 2014-07-13
          • 1970-01-01
          • 1970-01-01
          • 2022-11-28
          • 1970-01-01
          • 2018-07-11
          • 2015-11-22
          • 1970-01-01
          相关资源
          最近更新 更多