Проблема конфигурации MySQL Socket в my.cnf

У меня есть проблема, которая приводит к очень долгому "времени в базе данных" в моем приложении.

БД Percona MySQL 5.5.35.

Приложение работает отлично, и может читать / писать из базы данных просто отлично. Проблема в том, что у меня необычайно большое время отклика БД, которое определенно не тратится на выполнение запросов, которые просты и кэшированы.

Например, я случайно получу время отклика в несколько секунд, а в других случаях это займет всего несколько миллисекунд. Существует медленная настройка журналов запросов, и никакие запросы не являются медленными, все они представляют собой простые вставки крошечных данных и около 80% операций чтения, вся БД занимает всего 20 МБ, это интернет-форум.

Новый график приложения Relic, показывающий огромные всплески времени подключения к БД

Я уверен, что проблема заключается в сокете, так как я не могу указать сокет, указанный в разделе mysqld my.cnf. Если я это сделаю, я получаю ошибку при перезапуске базы данных, говоря:

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

Так, например, вот действующая рабочая копия my.cnf с удаленными несущественными частями:

[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

Заметьте, что порт и сокет не указаны в разделе mysqld?

Если я изменю это на:

[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

Вот как я вижу снова и снова, my.cnf должен быть настроен, мой сервер не запускается с ошибкой "невозможно подключиться".

Любой совет будет очень признателен.

2 ответа

Решение

Первое, что следует помнить, это то, что многие клиенты mysql (включая php) по умолчанию будут использовать Unix-стиль общения, если клиент настроен на использование localhost. Если ваш сервер неправильно настраивает этот сокет, возможно, клиенты пытаются подключиться к этому сокету и отказывают.

Остальное суммировано из нашего обсуждения в комментариях.

В любом случае, так как ваш сервер не был настроен на создание сокета, а клиент указывал местоположение, которое является необычным для системы Ubuntu, я думаю, вам следует попробовать изменить его, чтобы он указывал на стандартное расположение Debian/Ubuntu для pid и сокета файлы. Который /var/run/mysqld/mysqld.sockили совсем недавно /run/mysqld/mysqld.sock,

Другое местоположение должно теоретически работать, хотя я предполагаю, что что-то не совсем так, как пишут, в отношении разрешений или чего-то еще.

Моя проблема была немного другой, но этот вопрос обнаружился в поиске. И подключение по TCP вместо сокетов устранило мою проблему. Это также помогает другим.

Т.е. в ваш клиентский раздел положите:

host=127.0.0.1

и / или

protocol=tcp
Другие вопросы по тегам