Causa do erro: tabela inválida (antiga?) ou nome do banco de dados 'lost + found'

6

Meu log do MySQL mostra erros duplicados:

141223  5:47:21 [ERROR] Invalid (old?) table or database name 'lost+found'

Eu tenho um banco de dados chamado #mysql50#lost+found , mas não consigo excluí-lo.

mysql> show databases;
+---------------------+
| Database            |
+---------------------+
| information_schema  |
| maindatabas         |
| maindatabas_help    |
| maindatabas_tracker |
| gitlabhq_production |
| locations           |
| #mysql50#lost+found |
| mysql               |
| osticket            |
| performance_schema  |
+---------------------+
10 rows in set (0.00 sec)

mysql> DROP DATABASE '#mysql50#lost+found';
ERROR 1008 (HY000): Can't drop database '#mysql50#lost+found'; database doesn't exist
mysql>

Estou operando Versão do servidor: 5.5.40 Distribuído pelo Projeto da Comunidade IUS no Centos 6.

Por O MySQL está executando MUITO lento no CentOS 6x (não 5x) , meu datadir está no ext3 com a opção barrier = 0.

O que está causando esse erro e como ele pode ser eliminado?

    
por user1032531 23.12.2014 / 15:08

4 respostas

11

Parece-me que o seu datadir está num sistema de ficheiros próprio.

Os sistemas de arquivos ext, como a maioria dos FS sob o Unix, têm em sua raiz um diretório chamado lost+found . Ele existe para permitir que os arquivos que são desconectados (ou seja, têm conteúdo, mas nenhuma entrada de diretório associado) sejam reconectados em algum lugar quando um sistema de arquivos inconsistente é analisado (veja, por exemplo, link para mais detalhes). Essa finalidade é importante na recuperação de desastres, portanto, você não deve excluir o diretório.

Seu problema surge quando o ponto de montagem, no qual o sistema de arquivos que contém esse diretório é montado, é fornecido inteiramente para um aplicativo que espera que tudo nesse ponto de montagem pertença a ele. Sendo o MySQL um desses, ele tenta interpretar o diretório lost+found como algo relacionado ao db, e (não sem motivo) falha.

Sua melhor aposta é nunca dedicar um FS inteiro a um aplicativo, mas montar o FS em algum ponto de montagem não específico do aplicativo, por exemplo, /data1 , criar um subdiretório abaixo, por exemplo, /data1/mysql e reconfigure o aplicativo para usar esse diretório como seu datadir.

    
por 23.12.2014 / 15:17
5

MadHatter explicou bem o erro. Mas desde então os tempos mudaram e agora o MySQL (desde desde 5.6.3 ) tem uma opção para ignorar este diretório. Basta adicionar essa afirmação ao seu arquivo /etc/mysql/my.cnf :

ignore-db-dir=lost+found

Após o MySQL reiniciar você pode verificar com o comando:

show global variables like 'ignore_db_dirs';

Se você deseja ignorar vários diretórios, é necessário especificar a opção para cada um deles separadamente.

Fonte: link

    
por 20.06.2016 / 20:42
3

Localização do my.cnf no CentOS 7.2 se você estiver usando o MariaDB em

/etc/my.cnf

Você pode reiniciar o serviço com

systemctl restart mariadb.service

ignore-db-dir deve ser colocado sob a seção [mysqld] e não sob [mysqld_safe].

[mysqld]
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock

ignore-db-dir=lost+found

# Disabling symbolic-links is recommended to prevent assorted security risks
symbolic-links=0
# Settings user and group are ignored when systemd is used.
# If you need to run mysqld under a different user or group,
# customize your systemd unit file for mariadb according to the
# instructions in http://fedoraproject.org/wiki/Systemd

[mysqld_safe]
log-error=/var/log/mariadb/mariadb.log
pid-file=/var/run/mariadb/mariadb.pid
#
# include all files from the config directory
#
!includedir /etc/my.cnf.d
    
por 15.12.2016 / 09:43
1

Como o nosso MySQL ainda não entende ignore_db_dirs , Eu fiz

# chmod 0 lost+found

que resolveu o problema (isto).

    
por 22.09.2016 / 09:34

Tags