web-dev-qa-db-fra.com

Avertissement: mysqli_real_connect (): (HY000/2002): Aucun fichier ou répertoire de ce type dans /private/tmp/wordpress/wp-includes/wp-db.php à la ligne 1452

J'essaie de lancer PHPUnit pour désinstaller un plugin WordPress, mais l'erreur dans le titre continue de s'afficher.

J'ai utilisé WP-CLI pour configurer les unittests, mais WP-CLI renvoie également une erreur similaire lorsque je tente de l'exécuter.

J'utilise MAMP pour exécuter la base de données.

J'ai configuré WP-CLI et PHPUnit en tant que phars, alias dans ~/.bash-profile, et exécutés avec le "php" par défaut fourni par OS X. Changer cela, et exécuter WP-CLI et PHPUnit avec la dernière version de PHP fournie par MAMP, corrigea WP-CLI (elle fonctionnait et se connectait parfaitement à la base de données), mais PHPUnit renvoyait toujours la même erreur.

J'ai essayé de modifier le fichier wp-config.php et de définir l'hôte sur ": /path/to/mamp/mysql.socket", "localhost: /path/to/mamp/mysql.socket" et "127.0.0.1 ", ce qui n'a pas aidé.

Je suis totalement coincé et je ne sais pas quoi faire ensuite.

5
SomeNorwegianGuy

Je viens de rencontrer cette erreur - avez-vous vérifié le schéma existant que votre wp-config.php spécifie?

Dans mon cas, j'avais carrément oublié de le créer, le correctif était donc aussi simple qu'un CREATE DATABASE wordpress.

J'ai également rencontré cette erreur lorsque l'hôte de base de données wp-config.php est incorrect (essayez d'échanger les variables localhost et 127.0.0.1).

12
Doug Thompson

Tout d’abord, assurez-vous que MySql fonctionne réellement. Il ne créera pas de fichier de socket si le processus n'a pas démarré.

netstat -tulpn | grep mysql

ou

ps -e | grep mysql

Si MySql est en cours d'exécution, modifier l'hôte de la base de données de localhost à 127.0.0.1 dans wp-config.php fonctionne, mais il ne s'agit que d'une solution de contournement.

Lorsque vous spécifiez localhost, la fonction mysqli_real_connect() tente de se connecter à votre base de données via un socket Unix qu’elle ne peut pas trouver (d’où l’erreur "aucun fichier de ce type".) Lorsque vous spécifiez 127.0.0.1, elle tente de se connecter à votre base de données à l’aide du paramètre par défaut TCP port (généralement 3306) qui fonctionne.

Cela ne résout pas le problème que PHP ne sait pas où trouver votre socket MySql. Vous devez configurer les options suivantes dans votre php.ini. L'emplacement du socket varie en fonction de votre système d'exploitation, mais vous pouvez généralement le trouver en exécutant locate mysql.sock. Voici les paramètres qui fonctionnent pour moi sur CentOS 6.8.

php.ini

pdo_mysql.default_socket = /var/lib/mysql/mysql.sock
mysqli.default_socket = /var/lib/mysql/mysql.sock

D'autres systèmes utilisent couramment /tmp/mysqld.sock. Vous pouvez vérifier l'emplacement configuré en consultant le fichier de configuration MySql my.cfg.

Une fois que vous avez configuré PHP pour qu'il pointe vers l'emplacement de socket approprié, redémarrez Apache/nginx afin qu'il enregistre les nouveaux paramètres.

Maintenant, vous pouvez utiliser localhost comme prévu.

5
Nilpo

Allez simplement dans votre phpMyAdmin, cliquez sur votre base de données et copiez l'ip où le service est exécuté et remplacez-le sur votre fichier wp-config.php: 

/ ** Nom d'hôte MySQL */ Define ('DB_Host', 'localhost');

/ ** Nom d'hôte MySQL */ Define ('DB_Host', 'ip_where_is_running_mysqlserver');

Remplace Localhost par ip du serveur MySQL en cours d'exécution

0
Gilson Jelembi

Cela m'a fait confondre mais j'ai finalement résolu.

Mon port MySQL est 3308, je remplace donc "127.0.0.1" par "localhost: 3308" dans 

$cfg['Servers'][$i]['Host'].

Ça marche!

En plus, je mets 

$cfg['Servers'][$i]['controluser'] = '';

$cfg['Servers'][$i]['controlpass'] = '';

Et...

$cfg['Servers'][$i]['auth_type'] = 'cookie';

Mais je pense que le plus important est que le port a changé.

0
Vicar