启用日志记录
我启用日志记录使用 :
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
安全和无痛的方式?
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