“Impossible de générer le processus principal de mysql: impossible à exécuter: aucun fichier ou répertoire de ce type”

56

Je suis un débutant sur le terrain MySQL alors supportez-moi.

Je viens de terminer la mise à niveau de 11.10 à 12.04.

Tout semblait fonctionner sans problème et tous mes logiciels et paramètres fonctionnaient bien. En dehors de MySQL.

Quand j'essaye:

sudo start mysql

Je reçois une erreur:

start: Job failed to start

Où puis-je éventuellement diagnostiquer le problème? Et (espérons-le) - comment résoudre ce problème?

(J'ai désactivé le démarrage automatique en suivant les conseils ici si cela est important)


Mise à jour 1:

Les deux sorties de:

cat /var/log/mysql.err 
cat /var/log/mysql.log

sont vides.

Sortie de dmesg | grep mysql:

[ 1401.785141] type=1400 audit(1335619832.181:25): apparmor="STATUS" operation="profile_replace" name="/usr/sbin/mysqld" pid=16165 comm="apparmor_parser"
[ 1401.791089] init: Failed to spawn mysql main process: unable to execute: No such file or directory

Mise à jour 2:

Comme indiqué par AWinter ci-dessous, il semblait que MySQL avait disparu automatiquement après la mise à jour et devait être réinstallé.

radek
la source

Réponses:

48

Vérifiez que le paquet mysql-server-5.1 a été désinstallé, il semble qu'il pourrait persister après la mise à niveau. J'ai eu la même erreur et j'ai dû purger le serveur MySQL 5.1 et 5.5, puis le réinstaller.

Commencez par faire une sauvegarde de votre répertoire / var / lib / mysql / pour votre sécurité.

sudo cp -R /var/lib/mysql/ ~/mysql

Procédez ensuite à la purge de MySQL (cela supprimera php5-mysql et phpmyadmin ainsi que plusieurs autres bibliothèques, soyez donc prêt à réinstaller certains éléments après cela.

sudo apt-get purge mysql-server-5.1 mysql-common

Supprimez le dossier / etc / mysql / et son contenu

sudo rm /etc/mysql/ -R

Ensuite, vérifiez que vos anciens fichiers de base de données sont toujours dans / var / lib / mysql / s'ils ne le sont pas, puis recopiez-les dans le dossier puis chown root: root

(ne les lancez que si les fichiers ne sont plus là)

sudo mkdir /var/lib/mysql/
sudo chown root:root /var/lib/mysql/ -R
sudo cd ~/mysql/
sudo cp * /var/lib/mysql/ -R

Ensuite, installez le serveur mysql

sudo apt-get install mysql-server

Enfin, réinstallez tous les paquets manquants tels que phpmyadmin et php5-mysql.

AWinter
la source
1
Excellent. Travaillé comme un charme. Tout fonctionne à nouveau. Une remarque: je n'ai pas eu à supprimer ce répertoire sudo rm /etc/mysql/ -R- il n'était tout simplement pas présent dans mon cas. Quoi qu'il en soit - heureusement, c'était juste une installation locale pour tester Wordpress .. Je me demande bien ce qui se passerait sur un vrai serveur o_O
radek
apt-get --reinstall install mysql-server-xx a fait le travail pour moi.
Yashima
Cela a fonctionné pour moi, mais j'aurais probablement dû le faire apt-get updateavant, car il a supprimé le pigeonnier et php5-mysql. Je ne pouvais les réinstaller qu'après la mise à jour. Une fois que tout était fait, tout fonctionnait à nouveau correctement.
AntonChanning
J'ai -bash: cd: /var/lib/mysql/: Permission deniedet utiliser sudo -ine fonctionne même pas.
Charlotte
@ LittleBigBot J'ai apporté une modification qui devrait résoudre ce problème.
AWinter
15
sudo dpkg-reconfigure mysql-server-5.5
Kevin C. Smith
la source
Pas une réponse très amicale, mais cela a fonctionné pour moi :-)
Joseph
1
N'a pas travaillé pour moi: [
ThomasReggi
12

J'avais ce même problème et pour moi, c'était que les fichiers de log InnoDB étaient d'une taille différente de celle attendue par mysql et échouaient silencieusement lors de la mise à niveau.

J'avais un fichier de configuration personnalisé qui avait été effacé lors de la mise à niveau vers 12.04 et qui définissait la taille du fichier journal sur autre chose que la configuration par défaut.

Vous devez supprimer les fichiers: / var / lib / mysql / ib_logfile *

Une fois les fichiers supprimés, mysql peut maintenant démarrer et créer de nouveaux fichiers journaux de la taille par défaut.

Corey Aufang
la source
Bingo Dans notre cas, un développeur avait modifié certains paramètres de configuration pour innodb (et ni lui ni moi ne savions que cela pourrait causer un problème). Cela empêchait mysql de démarrer. La suppression de ces fichiers de configuration a permis à MySQL de démarrer.
gaoshan88
Bingo - a modifié le paramètre de configuration pour innodb_log_file_size.
tweak2
9

La plupart des erreurs apparaîtront en démarrant le serveur en mode détaillé et en regardant le résultat:

sudo mysqld --verbose
Ian Mackinnon
la source
7

J'ai eu le même problème, mais aucune des réponses ci-dessus ne m'a aidé. Donc, comme dernier espoir, j'ai essayé de libérer de l'espace disque. Je supprime simplement les fichiers journaux inutiles de / var / log, ce qui libère de l’espace 2,5G. Ensuite, MySQL a démarré normalement.

Œil
la source
Oui, c'était aussi mon problème. mysql ne démarrait pas au démarrage, comme cela avait été le cas auparavant. Ultérieurement, les informations système qui sont restituées au terminal. "Utilisation de /: 95.1%" Il n'y avait donc pas assez d'espace libre pour démarrer mysql (et d'autres processus). Je devais faire un peu de nettoyage de fichiers, et mysql a démarré sans problème.
Screenack
C'était mon cas. Le nettoyage du disque et Mysql commencent à fonctionner.
Sergey Romanov
5

Cela arrive parfois et bien qu'il y ait deux problèmes différents qui pourraient empêcher mysql de démarrer, j'écrirai ici quelques-uns des problèmes les plus courants que je connaisse:

NOTE - En expliquant la plupart des problèmes courants, je suppose que vous avez déjà essayé de supprimer et d'installer ou de réinstaller simplement le service mysql de la manière suivante:

Pour installer - sudo apt-get install mysql-server mysql-client
Supprimer - sudo apt-get remove mysql-server mysql-client
Purger (Supprimer les fichiers + Configuration) - sudo apt-get purge mysql-server mysql-client
Réinstaller -sudo apt-get install --reinstall mysql-server mysql-client

  1. my.cnfle fichier n'est pas dans le répertoire par défaut. Il devrait être (par défaut) situé dans /etc/my.cnfou /etc/mysql/my.cnf.

  2. Espace insuffisant sur le disque dur où se trouvent les fichiers de données mysql. Si les bases de données deviennent trop volumineuses et occupent 100% du disque dur, le service échouera.

  3. Après la mise à niveau, vérifiez que le my.cnffichier est au bon endroit. Selon la manière dont vous avez mis à niveau ou à partir de la version à partir de laquelle vous avez effectué la mise à niveau, il se peut que ce soit /etc/my.cnfou /etc/mysql/my.cnftel que mentionné précédemment. Rappelez-vous également que le fichier peut également être nommé mysql.confet pas seulement my.cnf. Cela se produit dans les cas où vous avez téléchargé le binaire depuis mysql.com .

  4. Faire un dmesgpour voir ce que le service mysql est jeté comme un message d'erreur aide, car il donne l'erreur de chargement. Cela pourrait aussi expliquer pourquoi cela se produit. Si vous tapez dmesgseul dans le terminal, il vous montrera le monde. Ce que nous voulons, c'est l'info sur mysql, alors faites quelque chose comme ceci: dmesg | grep mysqlcela vous enverra toutes les lignes qui contiennent mysql.

  5. Vérifiez que le fichier my.cnfou mysql.confest correct. Dans 12.04, MySQL est la version 5.5, dans 11.10, il s'agit de la version 5.1. Il pourrait y avoir quelques changements dans le fichier de configuration (je n’ai pas vraiment vérifié cela) et cela peut sembler idiot, mais cela peut certainement vous causer des ennuis.

  6. Les erreurs liées aux problèmes de socket sont normalement la faute du fichier my.cnfou du mysql.conffichier pointant au mauvais endroit, elles s’afficheront normalement comme suit:

    Impossible de se connecter au serveur MySQL local via le socket '/var/run/mysqld/mysqld.sock'

    L’autre source de ce problème est liée au mysqlfichier en /etc/init.dce sens qu’il pointe vers le mauvais dossier car il utilise peut-être un script plus ancien que celui requis pour le mysql réel sur le système (il n’a peut-être pas été mis à jour correctement, il n’a pas écrasé). le fichier de configuration, etc.). Il suffit donc de modifier l’un de ces deux fichiers et de voir s’ils pointent ailleurs, puis de simplement sudo service mysql restartvérifier si cela fonctionne.

  7. Pour avoir un meilleur aperçu des sorties spécifiques à l'erreur de mysql, procédez comme suit:

    cat /var/log/mysql.err- Vous montrera les erreurs mysql. Je le ferais comme ça cat /var/log/mysql.err | lesssi vous voyez trop d’informations lessdéfiler car cela vous aidera à faire défiler la sortie de cat.

    Il en va de même cat /var/log/mysql.logsi vous voyez l'erreur, il peut être utile de l'insérer dans la question ou de le commenter, ce qui aidera à répondre plus rapidement à cette question.

  8. Si vous rencontrez des problèmes de connexion et que le service en cours d'exécution est utilisé, essayez de voir si le pare-feu du serveur autorise les connexions via le port 3306 (connexions entrantes). Ensuite, vérifiez si le routeur (s’il ya lieu) n’a pas bloqué le port 3306. Effectuez un test de réseau pour voir d’où provient le problème lié au port attribué à mysql.

Si tout va bien, pour tester si le service mysql fonctionne, tapez service mysql status

En dernier recours. Si vous utilisez mysql mais que vous ne pouvez pas vous connecter, essayez ceci:

  1. Arrêtez le serveur MySQL:

    sudo /etc/init.d/mysql stop ou sudo service mysql stop

  2. Démarrer le mysqldservice manuellement avec une configuration manuelle

    sudo mysqld --skip-grant-tables &

    (N'oubliez pas d'ajouter le & sinon, vous devrez ouvrir un autre terminal. Le & envoie le processus en arrière-plan et vous pouvez tuer si vous utilisez le même terminal).

  3. Connectez-vous à la base de données mysql en tant que racine

    mysql -u root mysql

  4. Tapez le texte suivant en remplaçant MyPASSWORD par votre nouveau mot de passe

    UPDATE user SET Password=PASSWORD('MyPASSWORD') WHERE User='root';
    FLUSH PRIVILEGES;
    EXIT;

Cela devrait être suffisant pour vous connecter à nouveau à votre service Mysql en tant que root. J'espère que ça aide.

Luis Alvarado
la source
Merci pour vos commentaires rapides. Le fichier my.cnf est /etc/mysql/my.cnfdans mon cas. Est-ce l'emplacement correct? dmesgme donne une quantité de sortie qui dépasse ma compréhension: / j’avais effectivement installé la 5.1 - cela a-t-il des conséquences?
Radek
1
Ne vous inquiétez pas de l'emplacement si vous trouvez le fichier. Permettez-moi de mettre à jour la réponse pour donner un meilleur aperçu de la sortie mysql dans dmesg.
Luis Alvarado
4

J'ai eu le même problème après la mise à niveau vers Ubuntu Server 12.04 LTS, en cours d'exécution

sudo apt-get install mysql-server 

était suffisant pour le réparer, bien qu'il se soit plaint d'une ancienne base de données de spotweb. J'ai corrigé cela en supprimant spotweb:

sudo apt-get purge spotweb

et reconfigurer mysql:

sudo dpkg-reconfigure mysql-server-5.5
RedPixel
la source
4

J'ajouterai ceci au cas où quelqu'un serait confronté à des problèmes similaires. J'ai essayé toute la désinstallation et la réinstallation en vain. La clé pour trouver la solution était que Upstart place ses journaux d'erreurs dans ce dossier.

/ var / log / upstart /

pour mysql

/var/log/upstart/mysql.log

quand j'ai ouvert il y avait ce message

Erreur de l'analyseur AppArmor pour /etc/apparmor.d/usr.sbin.mysqld dans /etc/apparmor.d/tunables/global à la ligne 15: impossible d'ouvrir 'ajustables / home'

Quand j’ai cherché dans le dossier /etc/apparmor.d/tunables/ , il me manquait le fichier personnel, j’en ai créé un

gedit /etc/apparmor.d/tunables/home et copié le contenu depuis un autre ordinateur contenant ces lignes non commentées

@ {HOME} = @ {HOMEDIRS} / * / / root /

@ {HOMEDIRS} = / home /

quelqu'un fait face à un problème similaire ici

https://bugs.launchpad.net/ubuntu/+source/mysql-5.5/+bug/982303

puis après cela, j'ai pu redémarrer le service

pt123
la source
2

Dans mon cas, c'était beaucoup plus facile que certaines réponses ici. J'ai trouvé le bogue lié au tableau de bord et le correctif était celui mentionné dans le commentaire 9:

sudo touch /etc/apparmor.d/local/usr.sbin.mysqld
sudo service apparmor restart
Manfred Moser
la source
1

Après la mise à niveau, j'ai constaté que mysql-server / mysql-server-5.5 n'était pas installé, ni 5.1. J'ai renommé my.cnf en my.cnf_old et j'ai essayé d'installer mysql-serven. Lors de l'installation, un message d'erreur indiquant que le mot de passe root n'a pas pu être défini est affiché. Après cela, j'ai vérifié mes configs, apparmor et ainsi de suite. Tout semblait aller bien. Ma prochaine tentative a été de reconfigurer mysql-server mais il s'est plaint que le paquet n'ait pas été installé complètement. J'ai donc décidé de désinstaller et, pendant cette opération, le paquet est corrigé et maintenant, il fonctionne. Je ne sais pas pourquoi parce que je n'ai rien changé.

utilisateur54914
la source
1

J'avais des problèmes similaires, mais j'ai rapidement été retrouvé chez apparmor, ce dont je me souvenais bien m'avait déjà parlé auparavant.

Si vous apportez des modifications à ces paramètres et que votre système utilise apparmor, vous devrez peut-être également ajuster /etc/apparmor.d/usr.sbin.mysqld. Par exemple. ces lignes ont été ajoutées (pour permettre un lien symbolique vers le fichier my.cnf et pour permettre au fichier lié par un lien symbolique d'être lu, vraisemblablement):

/ usr / sbin / mysqld {... /etc/mysql/*.cnf lr, /path/to/symlinked/my.cnf r, ...}

Simon Nuttall
la source
1

Dans mon cas, j'ai essayé d'installer MySQL sur une nouvelle installation d'Ubuntu 12.04, mais je ne comprenais pas pourquoi cela m'avait causé une erreur lors de la définition du mot de passe de l'utilisateur 'root'. J'ai essayé toutes les solutions ci-dessus, mais rien à faire.

Ensuite, j'ai décidé de tout effacer / supprimer, j'ai désinstallé le serveur MySQL et supprimé tous ses dossiers (/ etc / mysql / et / var / lib / mysql /), finalement grâce à une sorte de hasard, cela n'a pas donné d'erreur la réinstallation et j'ai pu définir le mot de passe et démarrer l'instance du serveur.

Alexian
la source
0

Dans le terminal, vous pouvez l'installer à nouveau et le faire exécuter my.cnf, vous pouvez taper:

sudo apt-get install mysql-server-5.1
sudo apt-get --reconfigure mysql-server-5.1
sudo apt-get update
sudo start mysql my.cnf

cela pourrait fonctionner de cette façon.

Michael
la source
0

Je ne parviens pas à ajouter que performance_schemasous [mysqld]en /etc/mysql/my.confcause cet échec. Suppression de cette ligne et mysql a pu redémarrer.

Edit: Il s'avère qu'un gigaoctet de RAM ne suffit pas pour démarrer mysqld avec performance_schema activé. Je suis passé à 3 concerts et cela a bien fonctionné.

ThorSummoner
la source