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 ...