MySQL "Zombie" -table, não pode excluir

2

Eu tenho dois servidores MySQL, executando a replicação mestre / escravo.
Em um ponto eu tive que escrever um general.log enorme sobre o escravo.

Eu tive a gloriosa ideia de escrevê-lo para o datadir do MySQL. Zombe de mim.
Mais tarde, removi esse arquivo.
Agora o MySQL insiste em ter uma tabela mysql.general_log que nunca foi uma tabela, mas um logfile. Eu descobri porque meu cron-mysqldump envia reclamações:

#> 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)

Então eu tentei isso manualmente:

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

e tentou derrubar a mesa:

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

Também tentei:

#> mysqlcheck --repair mysql

sem sucesso.

seguindo este link eu encontrei algo sobre arquivos ib *. Então eu fiz

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

Agora o mysqldump reclamou de outra tabela ausente. É apenas um arquivo .frm sem acompanhar MYD e MYI. Revertido alterações.

resultado do teste 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)

Eu tentei reinicializar o banco de dados e usei um dump da outra instância do MySQL, que não mostra esse erro:

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

Resultado: algum pequeno erro, não consigo lembrar.
agora eu uso o mysqldump "limpo" novamente:

#> 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, o bug está no mysqldump. grep grep grep ...

Resultado do segundo teste do 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)

depois disso eu percebi que eu não tinha deixado cair a mesa:

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)

Estou começando a pensar que o DB é feito para ...

    
por chief_wrench 16.06.2013 / 16:59

1 resposta

3

Existe um bug relatado aqui com o mysqldump que pode estar causando isso. Crie a definição da tabela e tente novamente o seu despejo:

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';
    
por 16.06.2013 / 18:21

Tags