Назад | Перейти на главную страницу

MySQL «Zombie» -таблица, не может удалить

У меня есть два сервера MySQL, на которых выполняется репликация главный / подчиненный.
В какой-то момент мне пришлось написать огромный журнал general.log на ведомом устройстве.

Мне пришла в голову замечательная идея записать это в каталог данных MySQL. Издеваться надо мной.
Позже я удалил этот файл.
Теперь 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 пожаловался на другую отсутствующую таблицу. Это просто файл .frm без поддержки MYD и MYI. Отмененные изменения.

результат теста 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

Результат: небольшая ошибка, не помню.
теперь я снова использую "чистый" 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 voila, ошибка в mysqldump. grep grep grep ....

Результат второго теста alex_sfs:

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, который может вызвать это. Создайте определение таблицы, а затем повторите попытку дампа:

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