2010-11-22 23 views
4

Mise à jour: J'ai arrêté le processus mysql qui était en cours d'exécution et qui causait de la confusion. Maintenant, je pense que je n'ai que la version la plus récente (5.1.40) en cours d'exécution. MAIS, cela pointe vers le mauvais fichier de données. Il pointe vers un fichier de données d'installation par défaut et je voudrais qu'il pointe vers le fichier de données existant dans /var/mysql. Voici une partie de /etc/my.cnfMySQL hell ... impossible de se connecter à la base de données /tmp/mysql.sock

# The following options will be passed to all MySQL clients 
[client] 
#password = your_password 
port  = 3306 
socket  = /var/mysql/mysql.sock 

# Here follows entries for some specific programs 

# The MySQL server 
[mysqld] 
port  = 3306 
socket  = /var/mysql/mysql.sock 

Ceci pointe vers l'ancien mysql.sock. Je n'arrive pas à trouver dans l'arborescence de l'installation MySQL plus récente?!? à moins que ce soit quelque part obscure.

Quelqu'un a-t-il besoin d'aide? Fondamentalement, j'ai installé un nouveau MySQL et maintenant besoin de cette nouvelle version à lancer avec mes données existantes. Et régler cette chose mysql.sock ....


Je suis récemment mis à jour MySQL sous Mac OS X Server et ai un enfer d'un temps de connexion à partir d'un application rails. ou toujours à partir de la ligne de commande d'ailleurs.

Je suis sûr que cela est une erreur évidente de ma part, mais je n'avoir une expérience de ligne de commande modérée pour que quelqu'un l'espoir peut aider ...

aussi lié est mes rails application ne peut plus se connecter. A défaut de se connecter via /tmp/mysql.sock mais je ne sais pas pourquoi il est à la recherche là-bas parce qu'il n'y a pas mysql.sock dans/tmp et je ne sais pas ce que/où il devrait être ....

Edit: ajouter les résultats de mysql_config --sockets

$ mysql_config --sockets 
Usage: /usr/local/mysql/bin/mysql_config [OPTIONS] 
Options: 
     --cflags   [-I/usr/local/mysql/include -g -Os -arch ppc -fno-common -D_P1003_1B_VISIBLE -DSIGNAL_WITH_VIO_CLOSE -DSIGNALS_DONT_BREAK_READ -DIGNORE_SIGHUP_SIGQUIT -DDONT_DECLARE_CXA_PURE_VIRTUAL] 
     --include  [-I/usr/local/mysql/include] 
     --libs   [-arch ppc -L/usr/local/mysql/lib -lmysqlclient -lz -lm  -lmygcc] 
     --libs_r   [-arch ppc -L/usr/local/mysql/lib -lmysqlclient_r -lz -lm  -lmygcc] 
     --plugindir  [/usr/local/mysql/lib/plugin] 
     --socket   [/tmp/mysql.sock] 
     --port   [0] 
     --version  [5.1.40] 
     --libmysqld-libs [-arch ppc -L/usr/local/mysql/lib -lmysqld -ldl -lz -lm  -lmygcc] 

Edit2 qui mysql_config

$ which mysql_config 
/usr/local/mysql/bin/mysql_config 
+0

Pour ne pas être un idiot complet, mais je dois le demander ... êtes-vous sûr que vous avez lancé 'mysql.server start' depuis la ligne de commande? – Alex

+0

ne me surestime jamais ;-) Je vais vérifier ... ok. La commande retourne avec: '-bash: mysql.server: commande non trouvée'. Je peux me connecter à la 'vieille' base de données .. et il y a un processus mysqld donc je * suppose * l'un d'entre eux fonctionne – Meltemi

Répondre

2

Vous essayez d'utiliser différentes prises pour le serveur et le client. Votre Rails essaie de se connecter à /tmp/mysql.sock, MySQL écoute /var/mysql/mysql.sock.

Normalement, la configuration MySQL est stockée dans /etc/my.cnf, mais dans votre ps votre sortie, je vois que le chemin du socket est donné en paramètre. Cela dépend donc vraiment des spécificités de votre système.

Quoi qu'il en soit, regardez dans /etc/my.cnf et votre base de données.yml et assurez-vous que mysql.sock apparaît au même chemin dans les deux fichiers.

+0

ok. je suis ignorant. comment puis-je résoudre ce problème? – Meltemi

+0

alors, comment puis-je trouver quelle socket utiliser? Puis-je les lister? Je suppose que je veux me connecter à celui associé à la nouvelle version de MySQL. – Meltemi

+1

Et le plus récent installé sous/usr/local/mysql? Il me semble que vous n'utilisez pas cette instance. – cababunga

1

Vous ne savez pas si cela résoudra complètement votre problème (vous devrez peut-être corriger le chemin du socket comme suggéré par cababunga), mais essayez 127.0.0.1 pour contourner la connexion socket et établir un TCP.

+0

pourriez-vous s'il vous plaît me donner un exemple de ce que vous voulez dire? Je ne suis vraiment pas un maître de la ligne de commande. J'en sais assez pour me déplacer ... et avoir des ennuis (évidemment) mais je ne suis pas sûr de ce que vous entendez par '127.0.0.1' que je connais seulement comme IP de l'hôte local. – Meltemi

+0

@Meltemi Je veux dire en spécifiant 'host: 127.0.0.1' dans le fichier yml –

1

La fonction real_connect dans le module Ruby MySQL prend en fait un tas de paramètres:

real_connect(host,user,password,db,port,socket,flags)

Celui que vous devez changer est le paramètre "socket". Dans mes applications Python sur Mac OS X, je dois définir ce paramètre de socket sur /var/mysql/mysql.sock.

Alors remarquez, ce n'est pas l'hôte que vous devez changer, c'est le socket actuel. Y a-t-il un paramètre socket: que vous pouvez utiliser dans votre configuration?

Alors, voici ce que vous pouvez faire ...

Exécutez la commande mysql_config --socket sur votre ligne de commande dans un terminal sous OS X et il devrait vous retourner la valeur de la « prise », vous devez utiliser (probablement /var/mysql/mysql.sock).

ensuite dans votre fichier database.yml, assurez-vous d'ajouter la ligne:

socket: /var/mysql/mysql.sock

J'ai couru la plupart du temps dans ce via Python sur OS X et le fixe de la même façon, mais je Je vais deviner que Ruby vous donnera le même problème.

+0

merci pour l'aide! donc 'mysql_config --socket' retourne avec'/tmp/mysql.sock'. Mais il n'y a pas de "mysql.sock" dans mon répertoire '/ tmp'? – Meltemi

+0

MySQL était-il opérationnel lorsque vous avez effectué la vérification? Je crois que le dossier ne sera pas là sauf si c'est. Vous pouvez également essayer ceci: 'mysql -e \" afficher des variables comme 'socket' \ "' et chercher le paramètre 'socket' (ne pas oublier d'ajouter un nom d'utilisateur/mot de passe si vous en avez besoin) –

+0

ok. maintenant j'ai réussi à arrêter le * vieux * MySQL et obtenir la version la plus récente en cours d'exécution! Je suis maintenant capable de récupérer quelque chose à partir de 'mysql_config --socket' (voir ci-dessus)/Mais encore une fois il dit que le socket est'/tmp/mysql.sock' mais il n'y a pas de fichier de ce nom dans/tmp?!? Donc pas sûr de ce qui se passe. – Meltemi