Назад | Перейти на главную страницу

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

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

БД - Percona MySQL 5.5.35.

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

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

Я уверен, что проблема связана с сокетом, так как я не могу указать сокет в разделе 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 нужно настроить, мой сервер не запускается из-за ошибки «невозможно подключиться».

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

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

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

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

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

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

Т.е. в разделе вашего клиента введите:

host=127.0.0.1

и / или

protocol=tcp