web-dev-qa-db-fra.com

Problème de configuration de socket MySQL dans my.cnf

J'ai un problème qui cause très long "temps dans la base de données" dans ma demande.

Le DB est Percona MySQL 5.5.35.

L'application fonctionne parfaitement et peut lire/écrire de la base de données tout à fait. La question est que j'ai des temps de réponse extraordinairement longs de la DB qui ne sont certainement pas le temps passé à exécuter les requêtes, qui sont tous simples et mis en cache.

Par exemple, je vais obtenir au hasard des temps de réponse entrez dans plusieurs secondes et d'autres fois, cela prend quelques millisecondes. Il existe une configuration lente des journaux de requête et aucune question n'est lente, ce sont tous des inserts simples de données minuscules et d'environ 80% des lectures, l'ensemble de la DB n'est que de 20 Mo, c'est un forum Internet.

New Relic app graph showing huge spikes in DB connect time

Je suis certain que le problème est bas dans la prise, car je ne peux pas avoir le socket spécifié dans la section mysqld de my.cnf. Si je le fais, j'ai une erreur lors du redémarrage de la base de données disant:

ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock' (2)

Donc, par exemple, voici la copie en direct et de travail de my.cnf, avec des portions non pertinentes supprimées:

[mysql]

# CLIENT #
port                           = 3306
socket                         = /var/lib/mysql/mysql.sock


[mysqld]

# General #
default-storage-engine         = InnoDB

# Database replication #
server-id=1895149
log-bin=mysql-bin
log-error=mysql-bin.err
binlog_do_db=reefbase1

# MyISAM #
key-buffer-size                = 32M
myisam-recover                 = FORCE,BACKUP

Remarquez que le port et la prise ne sont pas spécifiés dans la section MySQLD?

Si je change ceci en:

[mysql]

# CLIENT #
port                           = 3306
socket                         = /var/lib/mysql/mysql.sock


[mysqld]

port                           = 3306
socket                         = /var/lib/mysql/mysql.sock

# General #
default-storage-engine         = InnoDB

# Database replication #
server-id=1895149
log-bin=mysql-bin
log-error=mysql-bin.err
binlog_do_db=reefbase1

# MyISAM #
key-buffer-size                = 32M
myisam-recover                 = FORCE,BACKUP

Quel est la façon dont je vois encore et encore, my.cnf à configurer, mon serveur ne parvient pas à démarrer avec l'erreur "Impossible de se connecter".

Tout conseil serait très apprécié.

3
i-CONICA

Le premier point à retenir ici est de nombreux clients MySQL (y compris PHP) par défaut à UNIX Socket Style Communication si le client est configuré pour utiliser localhost. Si votre serveur ne configure pas correctement cette prise, les clients peuvent alors tenter de se connecter à la prise et à l'échec.

Le reste est résumé de notre discussion dans les commentaires.

Dans tous les cas, car votre serveur n'a pas été configuré pour créer une prise, le client a été signalé un emplacement inhabituel pour un système Ubuntu, je pense que vous devriez essayer de changer d'abord à l'emplacement de Debian/Ubuntu standard pour PID et Socket. des dossiers. Lequel est /var/run/mysqld/mysqld.sock, ou plus récemment /run/mysqld/mysqld.sock.

L'autre emplacement devrait théoriquement fonctionner, bien que je devine que quelque chose ne soit pas tout à fait écrit aussi loin que les autorisations ou quelque chose comme ça.

4
Zoredache

Mon problème était légèrement différent, mais cette question a montré une recherche. Et se connecter sur TCP au lieu de sockets fixe mon problème. Cela aide également les autres.

C'est à dire. Dans votre section client mette:

Host=127.0.0.1

et/ou

protocol=tcp
0
kqw