GNU/Linux >> Tutoriels Linux >  >> Linux

Cause de l'erreur :nom de table ou de base de données non valide (ancien ?) 'perdu+trouvé'

Il me semble que votre datadir est dans un système de fichiers qui lui est propre.

Les systèmes de fichiers ext, comme la plupart des FS sous Unix, ont à leur racine un répertoire appelé lost+found . Il existe afin de permettre aux fichiers qui se détachent (c'est-à-dire qu'ils ont du contenu, mais pas d'entrée de répertoire associée) d'être rattachés quelque part lorsqu'un système de fichiers incohérent est fscké (voir, par exemple, https://unix.stackexchange.com/ questions/18154/what-is-the-purpose-of-the-lostfound-folder-in-linux-and-unix pour plus de détails). Cet objectif est important dans la reprise après sinistre, vous ne devez donc pas supprimer le répertoire.

Votre problème survient lorsque le point de montage, sur lequel le système de fichiers contenant ce répertoire est monté, est entièrement confié à une application qui s'attend à ce que tout ce qui se trouve dans ce point de montage lui appartienne. MySQL étant l'un d'entre eux, il tente d'interpréter le lost+found répertoire comme étant quelque chose lié à la base de données, et (pas déraisonnablement) échoue.

Votre meilleur pari n'est jamais de dédier un FS entier à une application, mais plutôt de monter le FS sur un point de montage non spécifique à l'application, par exemple /data1 , créez un sous-répertoire sous celui-ci, par exemple /data1/mysql , et reconfigurez l'application pour utiliser ce répertoire comme répertoire de données.


MadHatter a bien expliqué l'erreur. Mais depuis lors, les temps ont changé et maintenant MySQL (depuis 5.6.3) a la possibilité d'ignorer ce répertoire. Ajoutez simplement cette déclaration dans votre /etc/mysql/my.cnf fichier :

ignore-db-dir=lost+found

Après le redémarrage de MySQL, vous pouvez le vérifier avec la commande :

show global variables like 'ignore_db_dirs';

Si vous souhaitez ignorer plusieurs répertoires, vous devez spécifier l'option pour chacun d'eux séparément.

Source :http://www.chriscalender.com/ignoring-the-lostfound-directory-in-your-datadir/


L'emplacement de my.cnf sous CentOS 7.2 si vous utilisez MariaDB est dans

/etc/my.cnf

Vous pouvez redémarrer le service avec

systemctl restart mariadb.service

ignore-db-dir doit être placé dans la section [mysqld] et non dans la section [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

Linux
  1. Comment entrer dans un répertoire dont le nom n'est qu'un moins ?

  2. Linux - La barre oblique (/) fait-elle partie du nom du répertoire racine Linux ?

  3. Emplacement par défaut de la base de données PostgreSQL sous Linux

  4. Erreur mysql datetime DEFAULT CURRENT_TIMESTAMP

  5. La relecture de la table de partition a échoué avec l'erreur 22 :argument invalide

Comment renommer le nom de la base de données MySQL sous Linux

Erreur Shell-init lors de la récupération du répertoire actuel [Réparer]

Comment changer le nom du site Web dans WordPress

Rsync copie le répertoire actuel avec le nom

Que se passe-t-il si je supprime perdu+trouvé

Est-il possible de cacher les objets perdus+trouvés ?