MySQL“僵尸”表,不能删除

我有两个MySQL服务器,运行主/从复制。
有一次,我不得不在slave上写下很大的general.log。

我有一个光荣的想法写到MySQL的datadir。 嘲笑我。
后来我删除了这个文件。
现在MySQL坚持有一个表mysql.general_log从来不是一个表,而是一个日志文件。 我发现,因为我的cron-mysqldump发送投诉:

#> mysqldump mysql > /home/mysqldump/mysqldump.sql Error: Couldn't read status information for table general_log () mysqldump: Couldn't execute 'show create table `general_log`': Table 'mysql.general_log' doesn't exist (1146) 

所以我试了一下:

 mysql> show create table mysql.general_log; ERROR 1146 (42S02): Table 'mysql.general_log' doesn't exist 

并试图放弃表格:

 mysql> drop table general_log; ERROR 1051 (42S02): Unknown table 'general_log' 

还试过:

 #> mysqlcheck --repair mysql 

无济于事。

在这个链接之后我发现了关于ib *文件的一些东西 所以我做了

 #> service mysqld stop #> mv mysql/data/ib* mysql.off/data/ #> service mysqld start #> 

现在mysqldump抱怨另一个缺less的表。 这只是一个没有附带MYD和MYI的.frm文件。 还原的更改。

testing结果alex_sf postetd:

 mysql> SET GLOBAL general_log = 'OFF'; Query OK, 0 rows affected (0.00 sec) mysql> use mysql; Reading table information for completion of table and column names You can turn off this feature to get a quicker startup with -A Database changed 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'; Query OK, 0 rows affected (0.02 sec) mysql> DROP TABLE general_log; Query OK, 0 rows affected (0.00 sec) mysql> exit Bye [root@server ~]# mysqldump mysql > /home/mysqldump/mysqldump.sql Error: Couldn't read status information for table general_log () mysqldump: Couldn't execute 'show create table `general_log`': Table 'mysql.general_log' doesn't exist (1146) 

我试图重新初始化数据库,并使用另一个MySQL实例的转储,但不显示此错误:

 #> mysql_install_db #> service mysqld start #> /usr/bin/mysql_secure_installation #> mysqldump mysql > /home/mysqldump/mysqldump.sql 

结果:一些小错误,不记得了。
现在我再次使用“clean”mysqldump:

 #> mysql < /home/mysqldump/mysqldump.master.sql #> mysqldump mysql > /home/mysqldump/mysqldump.sql Error: Couldn't read status information for table general_log () mysqldump: Couldn't execute 'show create table `general_log`': Table 'mysql.general_log' doesn't exist (1146) 

Et瞧,错误是在mysqldump。 grep grep grep ….

alex_sfs第二次testing的结果:

 mysql> use mysql; Reading table information for completion of table and column names You can turn off this feature to get a quicker startup with -A Database changed 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'; Query OK, 0 rows affected (0.00 sec) mysql> exit Bye [root@ns235265 mysql]# mysqldump mysql > /home/mysqldump/mysqldump.sql Error: Couldn't read status information for table slow_log () mysqldump: Couldn't execute 'show create table `slow_log`': Table 'mysql.slow_log' doesn't exist (1146) 

之后,我意识到我没有把桌子扔掉:

 mysql> DROP TABLE general_log; Query OK, 0 rows affected (0.00 sec) mysql> exit Bye [root@server ~]# mysqldump mysql > /home/mysqldump/mysqldump.sql Error: Couldn't read status information for table general_log () mysqldump: Couldn't execute 'show create table `general_log`': Table 'mysql.general_log' doesn't exist (1146) 

我开始认为数据库已经完成了…

这里有一个mysqldump报告的错误,可能会导致这个问题。 创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';