15

ロギングが有効

次を使用してロギングを有効にしました:

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安全かつ痛みのない方法でクリアする方法は?
4

6 に答える 6

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

テーブルをクリア:

TRUNCATE table mysql.general_log;
于 2012-09-03T11:38:45.870 に答える
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;

2.の場合:

TRUNCATE mysql.general_log;
于 2012-09-03T11:39:54.130 に答える
3

わかりました、直接の経験から、これは私にとってうまくいったことです。テーブルが何らかの理由で破損した場合、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;
于 2016-02-12T20:52:59.927 に答える