У меня проблема, которая вызывает очень долгое "время в базе данных" в моем приложении.
БД - 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