Ошибка MySQL 2006: сервер mysql ушел

Я запускаю сервер в своем офисе для обработки некоторых файлов и отправки результатов на удаленный сервер MySQL.

Обработка файлов занимает некоторое время, и процесс замирает на полпути со следующей ошибкой:

2006, MySQL server has gone away

Я слышал о настройке MySQL, wait_timeout, но мне нужно изменить это на сервере в моем офисе или на удаленном сервере MySQL?

Ответ 1

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

Обратитесь к PHP: mysqli_ping для получения информации об этом.

Ответ 2

Я сталкивался с этим несколько раз, и обычно я обнаружил, что ответом является очень низкая настройка по умолчанию max_allowed_packet.

/etc/my.cnf этого значения в /etc/my.cnf[mysqld]) до 8 или 16M обычно исправляет это. (Значение по умолчанию в MySql 5.7 - 4194304, что составляет 4 МБ.)

[mysqld]
max_allowed_packet=16M

Примечание: просто создайте строку, если она не существует

Примечание: это может быть установлено на вашем сервере во время его работы.

Используйте set global max_allowed_packet=104857600. Это устанавливает его на 100 МБ.

Ответ 3

У меня была та же проблема, но изменение max_allowed_packet в файле my.ini/my.cnf в [mysqld] сделало трюк.

добавить строку

max_allowed_packet = 500M

теперь restart the MySQL service, как только вы закончите.

Ответ 4

Я использовал следующую команду в командной строке MySQL для восстановления базы данных MySQL размером более 7 ГБ, и она работает.

set global max_allowed_packet=268435456;

Ответ 5

Ошибка: 2006 (CR_SERVER_GONE_ERROR)

Сообщение: сервер MySQL ушел

Как правило, вы можете повторно подключиться, а затем снова выполнить запрос для решения этой проблемы - попробуйте 3-4 раза, прежде чем полностью отказаться.

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

Если у вас есть запрос, вызывающий таймаут, вы можете установить эту переменную, выполнив:

SET @@GLOBAL.wait_timeout=300;
SET @@LOCAL.wait_timeout=300;  -- OR current session only

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

Дополнительная информация о том, как бороться с проблемами подключения Mysql.

EDIT: две другие настройки, которые вы, возможно, захотите использовать, - net_write_timeout и net_read_timeout.

Ответ 6

В MAMP (non-pro version) я добавил

--max_allowed_packet=268435456

to ...\MAMP\bin\startMysql.sh

Кредиты и более подробная информация здесь

Ответ 7

Эта ошибка возникает из-за истечения срока действия wait_timeout.

Просто перейдите на сервер mysql, проверьте его wait_timeout:

mysql > SHOW VARIABLES LIKE 'wait_timeout'

mysql > set global wait_timeout = 600 # 10 минут или максимальное время ожидания вам нужно

http://sggoyal.blogspot.in/2015/01/2006-mysql-server-has-gone-away.html

Ответ 8

Я получал ту же ошибку на моем сервере DigitalOcean Ubuntu.

Я попытался изменить параметры max_allowed_packet и wait_timeout, но ни один из них не исправил его.

Оказывается, мой сервер вышел из ОЗУ. Я добавил файл 1GB swap и это исправило мою проблему.

Проверьте свою память с помощью free -h, чтобы узнать, что вызывает ее.

Ответ 9

В Windows эти парни, использующие xampp, должны использовать этот путь xampp/mysql/bin/my.ini и изменить max_allowed_packet (в разделе [mysqld]) на ваш размер выбора. например

max_allowed_packet=8M

Опять же, на php.ini(xampp/php/php.ini), измените upload_max_filesize размер выбора. например

upload_max_filesize=8M

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

Ответ 10

Для меня была проблема с ОЗУ.

У меня была такая же проблема даже на сервере с 12 ядрами процессора и 32 ГБ оперативной памяти. Я исследовал больше и пытался освободить оперативную память. Вот команда, которую я использовал на Ubuntu 14.04 для освобождения оперативной памяти:

sync && echo 3 | sudo tee /proc/sys/vm/drop_caches

И все это исправлено. Я устанавливал его под cron для запуска каждый час.

crontab -e

0 * * * * bash /root/ram.sh;

И вы можете использовать эту команду для проверки доступности свободной оперативной памяти:

free -h

И вы получите что-то вроде этого:

             total       used       free     shared    buffers     cached
Mem:           31G        12G        18G        59M       1.9G       973M
-/+ buffers/cache:       9.9G        21G
Swap:         8.0G       368M       7.6G

Ответ 11

Для Vagrant Box убедитесь, что вы выделяете достаточно памяти в поле

config.vm.provider "virtualbox" do |vb|
  vb.memory = "4096"
end

Ответ 12

В моем случае это было низкое значение переменной open_files_limit, которая блокировала доступ mysqld к файлам данных.

Я проверил его с помощью:

mysql> SHOW VARIABLES LIKE 'open%';
+------------------+-------+
| Variable_name    | Value |
+------------------+-------+
| open_files_limit | 1185  |
+------------------+-------+
1 row in set (0.00 sec)

После того как я изменил переменную на большое значение, наш сервер снова был жив:

[mysqld]
open_files_limit = 100000

Ответ 13

Невероятный сценарий - у вас есть брандмауэр между клиентом и сервером, который заставляет TCP reset в соединение.

У меня была эта проблема, и я обнаружил, что наш корпоративный F5-брандмауэр настроен на завершение неактивных сеансов, которые простаивают более 5 минут.

Еще раз, это маловероятный сценарий.

Ответ 14

Если вы используете 64-битный WAMPSERVER, пожалуйста, найдите несколько вхождений max_allowed_packet, потому что WAMP использует значение, установленное в [wampmysqld64], а не значение, установленное в [mysqldump], что для меня было проблемой, я обновлял не тот. Установите для этого что-то вроде max_allowed_packet = 64M.

Надеюсь, это поможет другим пользователям Wampserver.

Ответ 15

Как правило, это указывает на проблемы с подключением к серверу MySQL или тайм-ауты. Обычно это можно решить, изменив wait_timeout и max_allowed_packet в my.cnf или аналогичном.

Я бы предложил эти значения:

wait_timeout = 28800

max_allowed_packet = 8M

Ответ 16

раскомментируйте ligne ниже в my.ini/my.cnf, это разделит ваш большой файл на меньшую часть

# binary logging format - mixed recommended
# binlog_format=mixed

TO

# binary logging format - mixed recommended
binlog_format=mixed

Ответ 17

Я нашел решение для "# 2006 - сервер MySQL ушел" этой ошибки. Решение просто вам нужно проверить два файла

  • config.inc.php
  • config.sample.inc.php

Путь к этим файлам в окнах

C:\wamp64\apps\phpmyadmin4.6.4

В этих двух файлах значение this:

$cfg['Servers'][$i]['host']must be 'localhost' .

В моем случае это было:

$cfg['Servers'][$i]['host'] = '127.0.0.1';

измените его на:

"$cfg['Servers'][$i]['host']" = 'localhost';

Удостоверьтесь в обоих:

  • config.inc.php
  • config.sample.inc.php файлы должны быть "localhost".

И последний набор:

$cfg['Servers'][$i]['AllowNoPassword'] = true;

Затем перезапустите Wampserver.


Чтобы изменить имя пользователя и пароль phpmyadmin

Вы можете напрямую изменить имя пользователя и пароль phpmyadmin через файл config.inc.php

Эти две строки

$cfg['Servers'][$i]['user'] = 'root';
$cfg['Servers'][$i]['password'] = '';

Здесь вы можете указать новое имя пользователя и пароль. После изменений сохраните файл и перезапустите WAMP-сервер.

Ответ 18

Я получил сообщение об ошибке 2006 в другом программном обеспечении клиентов MySQL на своем рабочем столе Ubuntu. Оказалось, что моя версия драйвера JDBC слишком стар.

Ответ 19

Это может быть проблемой вашего размера файла .sql.

Если вы используете xampp. Перейдите в панель управления xampp → нажмите MySql config → откройте my.ini.

Увеличьте размер пакета.

max_allowed_packet = 2M -> 10M

Ответ 20

Всегда хорошей идеей является проверка логов сервера Mysql по той причине, по которой он исчез.

Это скажет тебе.

Ответ 21

Для пользователей, использующих XAMPP, есть 2 параметра max_allowed_packet в C:\XAMPP\MySQL\Bin\my.ini.

Ответ 22

Эта ошибка происходит в основном по двум причинам.

  1. У вас слишком мало оперативной памяти.
  2. Соединение с базой данных закрывается при попытке подключения.

Вы можете попробовать этот код ниже.

# Simplification to execute an SQL string of getting a data from the database
def get(self, sql_string, sql_vars=(), debug_sql=0):
    try:            
        self.cursor.execute(sql_string, sql_vars)
        return self.cursor.fetchall()
    except (AttributeError, MySQLdb.OperationalError):
        self.__init__()
        self.cursor.execute(sql_string, sql_vars)
        return self.cursor.fetchall()

Это смягчает ошибку независимо от причины, особенно по второй.

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

Ответ 23

Есть несколько причин этой ошибки.

MySQL/MariaDB связаны:

  • wait_timeout - время в секундах, в течение которого сервер ждет, пока соединение не станет активным, прежде чем его закрывать.
  • interactive_timeout - Время в секундах, в течение которого сервер ожидает интерактивного соединения.
  • max_allowed_packet - максимальный размер в байтах пакета или сгенерированной/промежуточной строки. Набор размером с самый большой BLOB, кратный 1024.

Пример my.cnf:

[mysqld]
# 8 hours
wait_timeout = 28800
# 8 hours
interactive_timeout = 28800
max_allowed_packet = 256M

Связанный с сервером:

  • Ваш сервер заполнен памятью - проверьте информацию об оперативной памяти free -h

Рамки, связанные:

  • Проверьте настройки вашего фреймворка. Джанго, например, использовать CONN_MAX_AGE (см. Документы)

Как отладить это:

Ответ 24

Существует более простой способ, если вы используете XAMPP. Откройте панель управления XAMPP и нажмите кнопку конфигурации в разделе mysql.
enter image description here

Теперь нажмите на my.ini, и он откроется в редакторе. Обновите max_allowed_packet до нужного вам размера.

enter image description here

Затем перезапустите службу MySQL. Нажмите на остановку на сервисе Mysql, нажмите "Пуск" снова. Подождите несколько минут. enter image description here enter image description here

Затем попробуйте снова выполнить свой запрос Mysql. Надеюсь, это сработает.

Ответ 25

MAMP 5.3, вы не найдете my.cnf, и добавление их не работает, так как max_allowed_packet хранится в переменных.

Одним из решений может быть:

  1. Зайдите на http://localhost/phpmyadmin
  2. Перейти на вкладку SQL
  3. Запустите SHOW VARIABLES и проверьте значения, если оно маленькое, то запустите с большими значениями
  4. Запустите следующий запрос, он установит max_allowed_packet равным 7 ГБ:

    установить глобальный max_allowed_packet = 268435456;

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

set global wait_timeout = 600;
set innodb_log_file_size =268435456;

Ответ 26

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