Подтвердить что ты не робот

MySql - я сбросил таблицу general_log

Включено ведение журнала

Я включил logging используя:

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" не существует

Вопросы

  • Как снова создать mysql.general_log?
  • Как очистить mysql.general_log безопасно и безболезненно?
4b9b3361

Ответ 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'

Ответ 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;

Ответ 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'