MySQL“僵尸” – 表:是否安全地删除information_schema中的一行?

这是一个关于MySQL“僵尸”表的后续表,不能删除我在模式mysql中要求的一个stream氓表。

长话短说:

  • 我无意中写了一个文件general.log到MySQL的datadir
  • 稍后删除它
  • mysqldump开始抱怨缺less有关表general_log的信息
  • 不能放桌子
  • 不能重新创build表并删除它,

现在我在information_schema中find了一行:

mysql> select * from INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME = 'general_log'; +---------------+--------------+-------------+------------+--------+---------+------------+------------+----------------+-------------+-----------------+--------------+-----------+----------------+-------------+-------------+------------+-----------------+----------+----------------+---------------+ | TABLE_CATALOG | TABLE_SCHEMA | TABLE_NAME | TABLE_TYPE | ENGINE | VERSION | ROW_FORMAT | TABLE_ROWS | AVG_ROW_LENGTH | DATA_LENGTH | MAX_DATA_LENGTH | INDEX_LENGTH | DATA_FREE | AUTO_INCREMENT | CREATE_TIME | UPDATE_TIME | CHECK_TIME | TABLE_COLLATION | CHECKSUM | CREATE_OPTIONS | TABLE_COMMENT | +---------------+--------------+-------------+------------+--------+---------+------------+------------+----------------+-------------+-----------------+--------------+-----------+----------------+-------------+-------------+------------+-----------------+----------+----------------+---------------+ | NULL | mysql | general_log | BASE TABLE | CSV | 10 | Dynamic | 2 | 0 | 0 | 0 | 0 | 0 | NULL | NULL | NULL | NULL | utf8_general_ci | NULL | | General log | +---------------+--------------+-------------+------------+--------+---------+------------+------------+----------------+-------------+-----------------+--------------+-----------+----------------+-------------+-------------+------------+-----------------+----------+----------------+---------------+ 1 row in set (0.00 sec) 

我想删除那一行。

那会安全吗?
其他表中是否有更多的信息?

这不是你称之为的僵尸表。

当安装mysql时,包含mysql.general_log表。

它使用CSV存储引擎

代表它的两个文件是

  • /var/lib/mysql/mysql/general_log.frm
  • /var/lib/mysql/mysql/general_log.CSV

您可以select在该表中启用常规日志logging。 就个人而言,我绝不会把它用作CSV表格。 我会将其转换为MyISAM并将其编入索引。 然后激活它,以便我可以按date时间查询表并在时间范围内查找SQL命令和用户。

我在DBA StackExchange中有很多文章,关于如何设置和使用它。 这里有几个:

  • Dec 27, 2011 : 如何做MySQL用户帐户
  • Jan 08, 2012 : 如何启用MySQL通用日志?
  • Feb 11, 2012 : MySQL通用日志

重点:这不是一张幻影桌子。 它是真实的。 只需在mysql客户端运行:

 SHOW CREATE TTABLE mysql.general_log\G 

或者在操作系统中

 ls -l /var/lib/mysql/mysql/general_log.* 

现在,mysqldump正在抱怨这个表,有可能你必须删除/var/lib/mysql/mysql/general_log.CSV文件,而只保留其他文件/var/lib/mysql/mysql/general_log.frm 。 有两个解决scheme:

解决scheme#1:再次创buildCSV文件

 echo -n > /var/lib/mysql/mysql/general_log.CSV chown mysql:mysql /var/lib/mysql/mysql/general_log.CSV 

解决scheme#2:删除.frm文件

 rm -f /var/lib/mysql/mysql/general_log.frm 

CAVEAT:删除/var/lib/mysql/mysql/general_log.frm ,在执行此操作之前,您无法创build常规日志表:

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

如果你永远不打算使用通用日志作为表,那么删除它不应该是一个问题。