MySQL tabela “zombie”: É seguro remover uma linha em information_schema?

1

este é um follow-up em MySQL "Zombie" -table, não pode excluir onde eu perguntei sobre uma tabela desonestos em esquema mysql.

Longa história curta:

  • Eu acidentalmente escrevi um arquivo general.log para o datadir do MySQL
  • Removido mais tarde
  • mysqldump começa a reclamar sobre a falta de informações sobre a tabela general_log
  • não posso largar a mesa
  • não pode recriar a tabela e excluí-la,

Agora encontrei uma linha em information_schema:

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)

Eu quero excluir essa linha.

Isso seria seguro?
Há mais informações em outras tabelas relacionadas a essa entrada?

    
por chief_wrench 17.06.2013 / 14:29

1 resposta

1

Isso não é uma tabela de zumbis como você chama.

Quando o mysql foi instalado, a tabela mysql.general_log foi incluída.

Ele usa o mecanismo de armazenamento CSV .

Os dois arquivos que representam são

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

Você tem a opção de ativar o registro geral nessa tabela. Pessoalmente, eu nunca usaria isso como uma tabela CSV. Eu iria convertê-lo para MyISAM e indexá-lo. Em seguida, ative-o para que eu possa consultar a tabela por data e hora e localize comandos SQL e usuários em intervalos de tempo.

Eu tenho muitas postagens no DBA StackExchange sobre como configurá-lo e usá-lo. Aqui estão alguns:

PARA ÊNFASE: Essa não é uma tabela fantasma. É real. Basta executar no cliente mysql:

SHOW CREATE TTABLE mysql.general_log\G

ou isso no sistema operacional

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

Agora, o mysqldump está reclamando sobre essa tabela, é provável que você tenha que deletar o arquivo /var/lib/mysql/mysql/general_log.CSV e deixado o outro arquivo /var/lib/mysql/mysql/general_log.frm sozinho. Existem duas soluções:

SOLUÇÃO # 1: Crie o arquivo CSV novamente

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

SOLUÇÃO # 2: Excluir o arquivo .frm

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

CAVEAT: Depois de excluir /var/lib/mysql/mysql/general_log.frm , não é possível criar uma tabela de log geral até que você faça isso:

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

Se você nunca pretende usar o log geral como tabela, excluí-lo não deve ser um problema.

    
por 17.06.2013 / 22:16

Tags