J'essaie de me connecter à ma base de données MySQL avec le terminal sur mon Apple (avec PHP).
Hier, cela a bien fonctionné, et maintenant, l’erreur dans le titre s’apparaît soudainement.
Le script fonctionne lorsque j'utilise mon navigateur pour l'exécuter (XAMPP est installé), mais Terminal refuse de se connecter à la base de données.
Voici le fichier que j'inclus pour me connecter (le script fonctionne quand je n'inclus pas cela, mais ensuite il ne se connecte pas à la base de données):
<?php
mysql_connect("localhost", "root", "") or die(mysql_error());
mysql_select_db("FNB1C_data") or die(mysql_error());
?>
Cela devrait fonctionner, car cela fonctionne avec mon navigateur.
La commande que j'utilise au terminal est php scriptname.php
.
Pour une raison quelconque, mysql sur OS X obtient un peu faux les emplacements du fichier de socket requis, mais heureusement, la solution est aussi simple que de configurer un lien symbolique.
Vous pouvez avoir un socket (apparaissant comme un fichier de longueur nulle) sous le nom /tmp/mysql.sock
ou /var/mysql/mysql.sock
, mais une ou plusieurs applications le recherchent à un autre emplacement. Découvrez avec cette commande:
ls -l /tmp/mysql.sock /var/mysql/mysql.sock
Plutôt que de déplacer le socket, éditez les fichiers de configuration et devez vous rappeler de garder les fichiers édités locaux et éloignés des serveurs où les chemins sont corrects, créez simplement un lien symbolique afin que votre Mac trouve le socket requis, même lorsqu'il cherche au mauvais endroit !
Si vous avez /tmp/mysql.sock
mais pas /var/mysql/mysql.sock
alors ...
cd /var
Sudo mkdir mysql
Sudo chmod 755 mysql
cd mysql
Sudo ln -s /tmp/mysql.sock mysql.sock
Si vous avez /var/mysql/mysql.sock
mais pas /tmp/mysql.sock
alors ...
cd /tmp
ln -s /var/mysql/mysql.sock mysql.sock
Vous aurez besoin d’autorisations pour créer le répertoire et le lien. Vous devez donc préfixer Sudo si nécessaire.
J'ai aussi eu cette erreur, mais je ne pouvais le réparer que par la suggestion ici .
Pour résumer, utilisez:
127.0.0.1
Au lieu de:
localhost
La raison en est que "localhost" est un nom spécial pour le pilote MySQL lui permettant d’utiliser le socket UNIX pour se connecter à MySQL au lieu du socket TCP.
J'avais le même problème et voici comment je l'ai corrigé:
J'ai eu ça et ça n'a pas marché:
$con = mysql_connect('localhost', 'root', '1234');
Je l'ai fait et ça a marché:
$con = mysql_connect(':/Applications/MAMP/tmp/mysql/mysql.sock', 'root', '1234');
Au lieu d'utiliser le serveur mysql, je me suis connecté directement au socket Unix. Travaillé pour moi.
Le socket MySQL se trouve généralement dans /tmp/mysql.sock
ou /var/mysql/mysql.sock
, mais probablement PHP semble au mauvais endroit.
Vérifiez où se trouve votre prise avec:
Sudo /usr/libexec/locate.updatedb
Lorsque le updatedb est terminé:
locate mysql.sock
Puis localisez votre php.ini:
php -i | grep php.ini
cela produira quelque chose comme:
Configuration File (php.ini) Path => /opt/local/etc/php54
Loaded Configuration File => /opt/local/etc/php54/php.ini
Editez votre php.ini
Sudo vim /opt/local/etc/php54/php.ini
Changer les lignes:
pdo_mysql.default_socket=/tmp/mysql.sock
mysql.default_socket=/tmp/mysql.sock
mysqli.default_socket = /tmp/mysql.sock
où /tmp/mysql.sock est le chemin de votre socket.
Enregistrez vos modifications et quittez ESC + SHIFT: x
Redémarrer Apache
Sudo apachectl stop
Sudo apachectl start
Je suis sur XAMPP sur Mac OS X, et La solution de Brian Lowe ci-dessus a fonctionné avec une légère modification.
Le fichier mysql.sock se trouve actuellement dans le dossier "/ Applications/xampp/xamppfiles/var/mysql /". Il fallait donc le lier à la fois dans/tmp et/var/mysql. Je n'ai pas vérifié lequel est utilisé par la ligne de commande PHP, mais cela a résolu le problème, alors je suis heureux :-)
Sudo su
ln -s /Applications/xampp/xamppfiles/var/mysql/mysql.sock /tmp/mysql.sock
mkdir /var/mysql
ln -s /Applications/xampp/xamppfiles/var/mysql/mysql.sock /var/mysql/mysql.sock
Mac OS X EL Capitan + MAMP Pro Faites ceci
cd /var
Sudo mkdir mysql
Sudo chmod 755 mysql
cd mysql
Sudo ln -s /Applications/MAMP/tmp/mysql/mysql.sock mysql.sock
Alors fais ça
cd /tmp
Sudo ln -s /Applications/MAMP/tmp/mysql/mysql.sock mysql.sock
J'espère que cela vous fait gagner du temps.
La raison en est que php ne peut pas trouver le chemin correct de mysql.sock
.
Veuillez vous assurer que votre mysql est en cours d'exécution en premier.
Ensuite, veuillez confirmer quel chemin est le mysql.sock
situé, par exemple /tmp/mysql.sock
puis ajoutez cette chaîne de chemin à php.ini:
Enfin, redémarrez Apache.
Lorsque vous faites face au problème suivant:
Erreur de projection PHP "Avertissement: mysql_connect () http: //function.mysql-connect : 2002 Aucun fichier ou répertoire de ce type (essaye de se connecter via unix: ///tmp/mysql.sock)"
Définissez la valeur "mysql.default_socket" dans votre /etc/php.ini
sur
"mysql.default_socket = /var/mysql/mysql.sock".
Puis redémarrez le service Web dans l'administrateur du serveur
Correction de l'erreur de socket 2002 imminente - qui lie où MySQL place le socket et où OSX le pense, MySQL le place dans/tmp et OSX le recherche dans/var/mysql le socket est un type de fichier qui permet au client mysql/communication serveur.
Sudo mkdir /var/mysql
puis
Sudo ln -s /tmp/mysql.sock /var/mysql/mysql.sock
source: http://coolestguidesontheplanet.com/get-Apache-mysql-php-phpmyadmin-working-osx-10-10-yosemite/
j'avais le même problème
[PDOException] SQLSTATE [HY000] [2002] Aucun fichier ou répertoire de ce type
[ErrorException] Avertissement: PDO :: __ construct (): [2002] Aucun fichier ou répertoire de ce type (essayant de se connecter via unix: ///var/mysql/mysql.sock) dans… htdocs /Symfony/vendor/doctrine-dbal/lib/Doctrine/DBAL/Driver/PDOConnection.php
La solution consiste donc à créer un lien symbolique vers le fichier chaussette, résolvant ainsi le problème. Procédez comme suit pour le résoudre:
$ Sud mkdir/private/var/mysql/
$ Sudo ln -s /Applications/MAMP/tmp/mysql/mysql.sock /private/var/mysql/mysql.sock
Une autre solution consiste à corriger l’emplacement du socket dans le fichier de configuration php.ini comme ceci:
pdo_mysql.default_socket=/tmp/mysql.sock
Bien sûr, le lien symbolique fonctionne aussi, alors c'est une question de préférence que vous changez.
Lorsque vous installez php53-mysql en utilisant le port, il renvoie le message suivant, qui constitue la solution à ce problème:
To use mysqlnd with a local MySQL server, edit /opt/local/etc/php53/php.ini
and set mysql.default_socket, mysqli.default_socket and
pdo_mysql.default_socket to the path to your MySQL server's socket file.
For mysql5, use /opt/local/var/run/mysql5/mysqld.sock
For mysql51, use /opt/local/var/run/mysql51/mysqld.sock
For mysql55, use /opt/local/var/run/mysql55/mysqld.sock
For mariadb, use /opt/local/var/run/mariadb/mysqld.sock
For percona, use /opt/local/var/run/percona/mysqld.sock
J'ai les mêmes erreurs. Mysql s'exécutait en tant qu'application autonome avant de démarrer phpMyAdmin.
Je viens d’arrêter mysql Puis Sudo/Applications/XAMPP/xamppfiles/xampp arrête Sudo/Applications/XAMPP/xamppfiles/xampp
Ça a bien fonctionné
Puisque vous pouvez utiliser MAMP, changez votre port sur le 3306 par défaut ou utilisez 127.0.0.1 dans le fichier database.php.
$db['default'] = array(
'dsn' => '',
'hostname' => 'localhost',// leave it for port 3306
'username' => 'yourUserhere',
'password' => 'yourPassword',
'database' => 'yourDatabase',
'dbdriver' => 'mysqli',
'dbprefix' => '',
'pconnect' => FALSE,
'db_debug' => (ENVIRONMENT !== 'production'),
'cache_on' => FALSE,
'cachedir' => '',
'char_set' => 'utf8',
'dbcollat' => 'utf8_general_ci',
'swap_pre' => '',
'encrypt' => FALSE,
'compress' => FALSE,
'stricton' => FALSE,
'failover' => array(),
'save_queries' => TRUE
);
Ou avec les paramètres par défaut:
$db['default'] = array(
'dsn' => '',
'hostname' => '127.0.0.1:8889',// leave it for port 8889
'username' => 'yourUserhere',
'password' => 'yourPassword',
'database' => 'yourDatabase',
'dbdriver' => 'mysqli',
'dbprefix' => '',
'pconnect' => FALSE,
'db_debug' => (ENVIRONMENT !== 'production'),
'cache_on' => FALSE,
'cachedir' => '',
'char_set' => 'utf8',
'dbcollat' => 'utf8_general_ci',
'swap_pre' => '',
'encrypt' => FALSE,
'compress' => FALSE,
'stricton' => FALSE,
'failover' => array(),
'save_queries' => TRUE
);
Je viens d'avoir ce problème, mais il n'est apparu que lors du chargement de certaines pages (d'autres pages ont bien fonctionné). Il s’est avéré que j’appelais MySQL après avoir fermé la connexion avec mysql_close()
. Donc, comme @brucenan a dit: assurez-vous que MySQL est en marche lorsque vous l'appelez.
Vous pouvez le faire en aliasant simplement le MAMP php sur le terminal Apple:
alias phpmamp='/Applications/MAMP/bin/php/php7.0.0/bin/php'
Exemple: > phpmamp - v
Maintenant, vous pouvez exécuter quelque chose comme: > phpmamp scriptname.php
Remarque: Ceci ne sera appliqué qu'à la session de terminal en cours.
Le client mySQL tente par défaut de se connecter via un fichier local appelé socket au lieu de se connecter à l'adresse de bouclage (127.0.0.1) pour localhost.
L'emplacement par défaut de ce fichier de socket, du moins sous OSX, est /tmp/mysql.sock
.
SOLUTION RAPIDE ET MOINS ÉLÉGANTE
Créez un lien symbolique pour que le système d'exploitation trouve le bon socket.
ln -s /Applications/MAMP/tmp/mysql/mysql.sock /tmp
Bonne solution
Modifiez le chemin d'accès au socket défini dans le fichier startMysql.sh
dans /Applications/MAMP/bin
.