Lost connection to MySQL server during query как решить раз и навсегда?
Lost connection to MySQL server during query как решить раз и навсегда? Я уже неделю проверяю все возможные варианты, все до одного места. Весь my.cnf перековырял уже max_allowed_packet увеличивал в 2-4 раза (это чаще всего советуют) query_cache_limit и query_cache_size тоже по разному ставил значения. В общем, я в my.cnf всё в 2 раза увеличивал
Кто реально сталкивался с этой проблемой, пожалуйста, подскажите
query_cache_size лучше поставить в 0 и отключить кеш запросов, потому что если ядер больше одного, то случается дедлок из-за конкуренции в кеше (подробности в гугле, но можно просто отключить кеш).
Ну а увеличить таймаут можно поставив большой wait_timeout (и interactive_timeout), но без веских причин это лучше не делать, чтобы не сделать самим себе дос.
Настройками кеша эту проблему точно не исправить. Тут может быть несколько причин:
1) если клиент и сервер — на разных машинах, то перегруженность сетевого соединения между ними (или еще какие-то проблемы с ним)
2) нехватка оперативной памяти
3) недостаточный объем thread stack, если запросы очень сложные
4) ошибки в файловой системе, в которой лежат файлы базы данных
Еще могу посоветовать сделать вот что: скачать скрипт mysqltuner и посмотреть его выдачу, иногда это позволяет гораздо быстрее понять проблему. Если клиент и сервер на одной машине, то можно попробовать переключиться с соединения по TCP/IP на Unix socket или наоборот.
Здравствуйте, спасибо за ответ. Мне кажется, что это из-за нехватки оперативки. Смотрите, у меня 24 гб памяти и не так давно я использовал почти 100% у меня в htop было всего 11 гб занято а в free -h было 12 гб кэша. Я почистил кэш и он через пару часов опять сколько же весил. Потом я поставил крон на очистку кэша каждые 30 минут. Может из-за этого я получаю эти ошибки?
Здесь причинами может быть все что угодно, может не хватка ресурсов, смотрите error.log
может быть проблема в запросах, включите slow_query_log и смотрите slow запросы, при не правильной настройки my.cnf и не правильных запросах можно сожрать все ресурсы и тп.
Если есть возможность в этот момент подключится смотри show processlist какой запрос висит если нет вообще подключится то включите general query log, обычно там все запросы перед выполнением логируется и вы можете узнать после какого запроса у вас проблемы начались.