2

Я пытаюсь выяснить, как включить / выключить общий журнал запросов MySQL 5.1.48, без перезапуска сервера (сейчас это не вариант в производстве). В моей тестовой среде это не работает.

В соответствии с этим я должен быть в состоянии сказать:

set global general_log = 'OFF';

который работает: в общий журнал запросов больше не добавляются запросы. Но, когда я делаю:

set global general_log = 'ON';

он жалуется, что:

ERROR 1146 (42S02): Table 'mysql.general_log' doesn't exist

(правда, это не так), и в журнал добавляется стандартный заголовок запуска («mysqld, версия: 5.1.48 ...»), а затем ничего больше.

Могу ли я просто перейти к другой базе данных MySQL с той же платформой / версией, скопировать ее show create table mysql.general_log; и запустить его здесь? Это безопасно или это симптом более глубоких проблем? И я должен сделать это, когда я включаю общий журнал запросов? Я ничего не вижу в руководстве.

2 ответа2

6

Глобальная переменная 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».

Раздел 4.4.8 руководства MySQL гласит:

mysql_upgrade проверяет все таблицы во всех базах данных на несовместимость с текущей версией MySQL Server. mysql_upgrade также обновляет системные таблицы, чтобы вы могли воспользоваться новыми привилегиями или возможностями, которые могли быть добавлены.

Стоит прочитать эту часть руководства, чтобы убедиться, что все системные таблицы верны и имеют правильную версию.

О, и я не могу подчеркнуть это достаточно раз:

Сделайте резервную копию ваших баз данных, прежде чем делать что-то подобное

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
) ENGINE=CSV DEFAULT CHARSET=utf8 COMMENT='General log' 

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .