mysql server has gone away что делать

Проблемы с базой данных

Недоступность базы данных

Подключитесь к серверу по SSH и выполните следующие проверки.

1. Проверьте, запущена ли служба MySQL:

Пример вывода для запущенной службы:

mysql server has gone away что делать. Смотреть фото mysql server has gone away что делать. Смотреть картинку mysql server has gone away что делать. Картинка про mysql server has gone away что делать. Фото mysql server has gone away что делать

Если в выводе отсутствует слово running, служба не запущена. В этом случае необходимо попытаться ее запустить:

После проверьте работу сайта.

Если проблема сохраняется, переходите к следующей проверке.

2. Проверьте состояние дискового пространства.

В первую очередь выполните команду ниже, чтобы просмотреть общий и занятый объем на диске:

Важно, чтобы доступное пространство было именно на основном разделе. Если пространство исчерпано, необходимо расширить диск или освободить место на нем. Для работы с дисковым пространством рекомендуем использовать утилиты ncdu или du.

Если на диске достаточно свободного места, но проблема сохраняется, проверьте состояние inodes.

Свяжитесь с нами, если вам не удается решить проблему самостоятельно.

Повреждены таблицы БД (Table is marked as crashed)

Если на сервере установлен phpMyAdmin, можно выполнить восстановление с его помощью. Для этого перейдите в интерфейс PMA и кликните на нужную базу данных в меню слева. Отметьте в списке те таблицы, которые нужно восстановить (то есть таблицы, имена которых фигурируют в ошибках). В самом низу страницы нажмите на выпадающее меню «С отмеченными» и выберите вариант «Восстановить».

Можно обойтись и без phpMyAdmin, выполнив необходимые действия при подключении по SSH.

Для восстановления одной таблицы выполните команду:

Для восстановления всех таблиц в базе используйте:

Вы также можете выполнить проверку всех таблиц в базе с помощью команды:

Ошибка 2006: MySQL server has gone away

Ошибка MySQL server has gone away означает, что сервер закрыл соединение, что происходит, как правило, в двух случаях: превышение таймаута ожидания или получение сервером слишком большого пакета.

В обоих случаях для решения проблемы потребуется внести правки в конфигурационный файл MySQL. Это можно сделать при подключении к серверу по SSH или с помощью веб-консоли в панели управления.

Конфигурационный файл может располагаться по различным путям, например:

Чтобы определить, в какой файл необходимо вносить изменения, можно использовать команду вида:

С ее помощью можно выяснить, в каких файлах прописан интересующий нас параметр, и изменить в них его значение.

Таймаут

Откройте конфигурационный файл с помощью редактора (укажите корректный путь к файлу):

Измените значение параметра wait_timeout на более высокое. Значение указывается в секундах, т.е. чтобы увеличить время ожидания, например, до 10 минут, необходимо указать 600:

После перезапустите службу MySQL:

Размер пакетов

Откройте файл конфигурации (укажите корректный путь к файлу):

Измените значение параметра max_allowed_packet на более высокое (значение указывается в мегабайтах):

И перезапустите службу:

Ошибка 1040: Too many connections

Появление ошибки «Too many connections» говорит о том, что исчерпан лимит подключений к базе данных. Как правило, проблема либо в медленных запросах, которые выполняются слишком долго (в этом случае требуется оптимизация кода), либо в числе одновременных подключений. В этом случае можно попробовать решить проблему увеличением лимита подключений (параметр max_connections ) в конфигурационном файле MySQL.

В пункте выше было описано, как определить расположение файла my.cnf.

После откройте файл в редакторе, указав корректный путь:

И замените значение параметра на более высокое, например:

После перезапустите службу:

Ошибка 1292: Incorrect date value

При попытке добавить данные в таблицу MySQL без указания даты может выдаваться ошибка:

Из-за этой ошибки может нарушаться работа импорта в 1С.

Для решения проблемы необходимо:

1. Открыть файл /etc/mysql/my.cnf:

2. В строке, начинающейся с sql-mode=, удалить следующие значения:

3. Выполнить перезагрузку mysql-сервера:

Примечание:

Если строка вида sql-mode= отсутствует, необходимо:

1. В файл /etc/mysql/my.cnf после параметра [mysqld] добавить строку:

2. Выполнить перезагрузку mysql-сервера:

Источник

Ошибка 2006: MySQL server has gone away

Эта ошибка означает, что MySQL сервер запущен, но он отказывает вам в соединении. Это может произойти по нескольким причинам. Самых основных и часто встречающихся причин три: сервер перегружен, и у вас истекло время ожидания ответа, ваш клиент отправил слишком большой пакет или сервер был не до конца проинициализирован.

В этой небольшой статье мы рассмотрим более подробно, почему возникает ошибка 2006: MySQL server has gone away, а также — как её исправить.

Как исправить MySQL server has gone away

Такую ошибку вы можете увидеть во время подключения к базе данных с помощью PHP, консольного клиента или, например, в PhpMyAdmin:

mysql server has gone away что делать. Смотреть фото mysql server has gone away что делать. Смотреть картинку mysql server has gone away что делать. Картинка про mysql server has gone away что делать. Фото mysql server has gone away что делать

1. Истекло время ожидания

Как я уже писал выше, одной из причин может быть таймаут ожидания соединения. Возможно, сервер баз данных перегружен и не успевает обрабатывать все соединения. Вы можете подключиться к серверу с помощью консольного клиента, если вам это удастся, и попытаться выполнить какой-либо запрос, чтобы понять, действительно ли запросы выполняются слишком долго. Если это так, можно оптимизировать производительность MySQL с помощью скрипта MySQLTuner.

В большинстве случаев надо увеличить размер пула движка InnoDB с помощью параметра innodb_buffer_pool_size. Какое значение лучше поставить, можно узнать с помощью указанного выше скрипта. Например, 800 мегабайт:

sudo vi /etc/mysql/my.cnf

mysql server has gone away что делать. Смотреть фото mysql server has gone away что делать. Смотреть картинку mysql server has gone away что делать. Картинка про mysql server has gone away что делать. Фото mysql server has gone away что делать

Есть и другой путь решения этой проблемы. Если такая скорость обработки запросов считается нормальной, можно увеличить время ожидания ответа от сервера. Для этого измените значение параметра wait_timeout. Это время в секундах, на протяжении которого надо ждать ответа от сервера. Например:

mysql server has gone away что делать. Смотреть фото mysql server has gone away что делать. Смотреть картинку mysql server has gone away что делать. Картинка про mysql server has gone away что делать. Фото mysql server has gone away что делать

После любых изменений не забудьте перезапустить MySQL сервер:

sudo systemctl restart mysql

sudo systemctl restart mariadb

2. Слишком большой пакет

Если ваш клиент MySQL создаёт слишком большие пакеты с запросами к серверу, это тоже может стать причиной такой ошибки. Максимально доступный размер пакета можно увеличить с помощью параметра max_allowed_packet. Например:

sudo vi /etc/mysql/my.cnf

Обратите внимание, что если вы из своей программы отправляете большие пакеты, то, скорее всего, вы делаете что-то не так. Не надо генерировать запросы к MySQL с помощью циклов for. SQL — это отдельный язык программирования, который многое может сделать сам, без необходимости писать очень длинные запросы.

3. Сервер неверно проинициализирован

Такая проблема может возникать при разворачивании контейнера MySQL или MariaDB в Docker. Дело в том, что на первоначальную инициализацию контейнера нужно много времени: около нескольких минут. Если вы не дадите контейнеру завершить инициализацию, а остановите его и потом снова запустите, то база данных будет всегда возвращать такую ошибку.

Вам нужно полностью удалить данные контейнера с базой данных. Например, с помощью docker-compose:

docker rm mysql-container

Здесь mysql-container — это имя контейнера с базой данных. А затем надо удалить хранилище (volume) с некорректно проинициализированной базой. Сначала посмотрите список всех хранилищ:

mysql server has gone away что делать. Смотреть фото mysql server has gone away что делать. Смотреть картинку mysql server has gone away что делать. Картинка про mysql server has gone away что делать. Фото mysql server has gone away что делать

Затем удалите нужное:

docker volume rm имя_хранилища

После этого можете снова запускать инициализацию приложения, только на этот раз дождитесь, пока сервер баз данных сообщит, что он готов, и вы сможете к нему подключиться.

Выводы

В этой небольшой статье мы рассмотрели, что значит ошибка MySQL Server has gone away, а также как её исправить на сервере или в контейнере Docker. Вы знаете ещё другие причины и решения этой проблемы? Пишите в комментариях!

Источник

Как исправить ошибку MySQL Server Has Gone Away

Ошибка MySQL Server Has Gone Away (error 2006) может возникнуть в двух случаях:

mysql server has gone away что делать. Смотреть фото mysql server has gone away что делать. Смотреть картинку mysql server has gone away что делать. Картинка про mysql server has gone away что делать. Фото mysql server has gone away что делать

Решение с внесением изменений в файл /etc/mysql/my.cnf.

ВАРИАНТ 1 — Таймаут соединения С БД

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

Лучше всего выяснить почему такие запросы имеют место и оптимизировать их, но для того чтобы получить мгновенный результат нужно увеличить значение параметра wait_timeout. Значение задается в секундах и не может быть более 28800.

wait_timeout = 1000

После внесения любых изменений в конфигурационный файл перезапускаем MySQL

ВАРИАНТ 2 — СЛИШКОМ Большой пакет

Несколько другая ситуация имеет место когда сервер отклоняет пакет из-за его слишком большого размера (или в случае если сервер не может распознать пакет по той или иной причине). В логи при этом пишутся точно такие же сообщения.

Решение в этом случае практически такое же — необходимо скорректировать значение одной переменной в конфигурационном файле.

[mysqld]
max_allowed_packet = 96M

В примере задан максимальный размер пакета, который сервер не будет отвергать — 96 Мб. Устанавливать слишком большие значения не стоит.

Источник

MySQL Server Has Gone Away — как пофиксить

mysql server has gone away что делать. Смотреть фото mysql server has gone away что делать. Смотреть картинку mysql server has gone away что делать. Картинка про mysql server has gone away что делать. Фото mysql server has gone away что делать mysql server has gone away что делать. Смотреть фото mysql server has gone away что делать. Смотреть картинку mysql server has gone away что делать. Картинка про mysql server has gone away что делать. Фото mysql server has gone away что делать mysql server has gone away что делать. Смотреть фото mysql server has gone away что делать. Смотреть картинку mysql server has gone away что делать. Картинка про mysql server has gone away что делать. Фото mysql server has gone away что делать

Ошибка MySQL Server Has Gone Away (error 2006) может возникнуть в двух случаях.

Таймаут соединения

Открытие файла настроек MySQL

Затем установить тайм-аут ожидания:
wait_timeout = 600

Время ожидания в секундах, можно установить вплоть до 28800 с (8 часов)

Не забудьте перезагрузить базу:
sudo /etc/init.d/mysql restart

Перезагрузка базы данных MySQL

Иногда, при выполнении длительных запланированных задач, также может появиться ошибка MySQL Server Has Gone Away все из-за того же таймаута соединения. При этом лимит времени не получится существенно увеличить (максимум до нескольких часов), так как это может привести к заполнению буфера ожидающими соединениями.

Поэтому лучше проверить соединение и, при необходимости, переподключиться.

Подключение БД и переподключение при необходимости

Большой или некорректный пакет

Вторая распространенная проблема: сервер получает большой или некорректный пакет и отклоняет его. В этом случае сервер считает, что проблема на стороне клиента и закрывает соединение. Так что для решения нужно увеличить лимит на максимальный размер пакета все в том же файле конфигурации:

Увеличение лимита размера входящего пакета, в МБ

Также не забудьте перезагрузить базу данных.

Самое главное

После того, как устраните ошибку MySQL Server Has Gone Away, поиграйтесь с параметрами wait_timeout и max_allowed_packet для получения оптимальных лимитов.

Этот текст был написан несколько лет назад. С тех пор упомянутые здесь инструменты и софт могли получить обновления. Пожалуйста, проверяйте их актуальность.

Что такое индексы в Mysql и как их использовать для оптимизации запросов

Как исправить ошибку доступа к базе 1045 Access denied for user

Основные понятия о шардинге и репликации

Настройка Master-Master репликации на MySQL за 6 шагов

Примеры ad-hoc запросов и технологии для их исполнения

Анализ медленных запросов (профилирование) в MySQL с помощью Percona Toolkit

Типы и способы применения репликации на примере MySQL

Как создать и использовать составной индекс в Mysql

Настройка Master-Slave репликации на MySQL за 6 простых шагов

Синтаксис и оптимизация Mysql LIMIT

Правильная настройка Mysql под нагрузки и не только. Обновлено.

Как исправить ошибку 405 Not Allowed в Nginx

Причины и методы исправления ошибки Gateway Timeout, Nginx

Запрос для определения версии Mysql: SELECT version()

Check-unused-keys для определения неиспользуемых индексов в базе данных

3 примера установки индексов в JOIN запросах

Анализ медленных запросов с помощью EXPLAIN

Что значит и как это починить

Описание, рекомендации и значение параметра query_cache_size

Быстрый подсчет уникальных значений за разные периоды времени

Использование партиций для ускорения сложных удалений

Правила выбора типов данных для максимальной производительности в Mysql

Как пофиксить ошибку «110: connection timed out» while reading response header from upstream

Источник

Ошибка 2006: MySQL Server has gone away

Ошибка 2006 под названием MySQL Sever has gone away означает отказ сервера в соединении даже при условии, что он запущен. Известно всего три причины, почему ошибка появляется. Первая причина – сервер перегружен. Время ожидания истекло. Вторая причина – клиент отправил слишком больной пакет. Третья – сервер не был до конца проинициализирован. Дальше подробно рассмотрим, по каким причинам появляется ошибка и как с ней бороться.

Как исправить ошибку

Обычно ошибка появляется при попытке подключиться к базе данных при помощи PHP, консольного клиента, а также в случае использования PhpMyAdmin:

mysql server has gone away что делать. Смотреть фото mysql server has gone away что делать. Смотреть картинку mysql server has gone away что делать. Картинка про mysql server has gone away что делать. Фото mysql server has gone away что делать

Давайте дальше рассмотрим каждую ситуацию в отдельности.

Истекло время ожидания

Как было сказано в начале статьи, одна из возможных причин – истечение времени ожидания. Может быть так, что сервер был перегружен и не справляется с нагрузкой – обработкой всех соединений. Чтобы понять, насколько долго выполняются серверные запросы, можно воспользоваться любым консольным клиентом и подключиться к серверу. Если вам удастся это сделать, выполните любой запрос. Если на обработку запросов уходит слишком много времени, оптимизировать MySQL можно при помощи специального скрипта MySQLTuner. Обычно увеличивается размер пула движка InnoDB путем установки параметра innodb_buffer_pool_size. Оптимальное значение определяется при помои приведенного выше скрипта.

Если это 800 мегабайт (может быть и другой размер), прописываем:

mysql server has gone away что делать. Смотреть фото mysql server has gone away что делать. Смотреть картинку mysql server has gone away что делать. Картинка про mysql server has gone away что делать. Фото mysql server has gone away что делать

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

mysql server has gone away что делать. Смотреть фото mysql server has gone away что делать. Смотреть картинку mysql server has gone away что делать. Картинка про mysql server has gone away что делать. Фото mysql server has gone away что делать

Внося изменения, не забываем дальше перезагрузить сервер:

$ sudo systemctl restart mariadb

Слишком большой пакет

Когда клиент пользователя создает слишком большое количество пакетов, сервер выдаст именно эту ошибку. Доступный размер пакета (максимальное значение) можно увеличить с помощью параметра max_allowed_packet.

Отдельно обратите внимание на клиент, ведь если он посылает много запросов, то вы явно что-то делает не так. Как минимум не стоит генерировать запросы к MySQL с помощью циклов for.

Сервер неверно проинициализирован

Если вы решите развернуть MySQL или MariaDB в Docker, то будьте готовы столкнуться с подобной ошибкой. Первоначальная инициализация контейнера требует чуть больше свободного времени. Если не дать контейнеру завершить инициализацию, сперва остановив его и запустив, то база данных будет всегда возвращать такую ошибку. Решение – нужно полностью удалить данные контейнера с базой данных.

Дальше надо удалить хранилище (volume) с некорректно проинициализированной базой. Но в начале просмотрите список всех хранилищ:

mysql server has gone away что делать. Смотреть фото mysql server has gone away что делать. Смотреть картинку mysql server has gone away что делать. Картинка про mysql server has gone away что делать. Фото mysql server has gone away что делать

$ docker volume rm имя_хранилища

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

Источник

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *