Magento MySQL усунув помилку


14

У мене на Magento CE 1.7.0.2 у мене багато дивних проблем. Під час звичайних операцій сайт періодично створюватиме сторінку Magento Error Page ( сталася помилка при обробці вашого запиту ) як на фронті, так і на бекенді. Переглядаючи пов’язаний звіт, я бачу таке повідомлення:

"SQLSTATE[HY000] [2006] MySQL server has gone away"

Іноді, але рідше, повідомлення звіт буде таким:

 Connection reset by peer

Я переглянув var> log> system.log, і MySQL has gone awayпомилка супроводжується наступним:

Warning: PDO::__construct(): MySQL server has gone away  in /var/www/html/domain.com/live/lib/Zend/Db/Adapter/Pdo/Abstract.php on line 129
Error while reading greeting packet. PID=1863  in /var/www/html/domain.com/live/lib/Zend/Db/Adapter/Pdo/Abstract.php on line 129

На додаток до цього, схоже, виникає наступна помилка в кожному запиті, а також MySQL has gone awayпомилки:

 Warning: include(File.php): failed to open stream: No such file or directory  in /var/www/html/domain.com/live/lib/Varien/Autoload.php on line 93
 Warning: include(): Failed opening 'File.php' for inclusion

Я переглянув більшість статей, про які я можу знайти про це, і заробив параметри бази даних, поки корови не повернулися додому, але помилка залишається.

Після наступного QnA щодо компілятора я помічаю, що сторінка адміністратора Система> Інструменти> Компіляція повністю порожня. Я думаю, що це всі пов'язані помилки, але будь-яке розуміння налагодження чи причини було б таким корисним.

Прошу вибачення, якщо це непослідовно; Я прокинувся близько 42 годин, тому прошу будь-яких роз’яснень. Дякую.

- оновлення -

Мій стек сервера для наочності:

PHP 5.5.4 (PHP-FPM)
Nginx 1.4.2
MySQL 5.5.33

- оновлення -

Мені здається (після деякого сну), що я ніколи не вказував - кодова база PHP і MySQL db знаходяться на окремих апаратних серверах - дуже важливо знати, чи збираєтесь ви мені допомогти !! Я прошу вибачення.


1
Ви використовуєте стійкі підключення до бази даних? Якщо так, спробуйте відключити їх. Я б також перевірив журнали mysql, щоб побачити, чи є помилки там, чи він насправді перезапускається проти просто відключеного з'єднання.
davidalger

Thx David, вручаючи журнали MySQL і БД ніколи не потрапляє, коли виникає помилка. Я використовував стійкі зв’язки, відключення не допомогло :(
Jongosi

1
Ви вважали, що зв’язок поганий. Причиною цієї помилки є те, що БД ніколи не отримував повідомлення. Спробуйте налагодити, використовуючи інформацію про з'єднання з local.xml для виклику функцій mysqli. Подивіться, що станеться.
SH–

дякую, здавалося, виправили мою проблему з редагуванням локального файлу

Відповіді:


9

Здебільшого це пов'язано з будь-якою з двох нижчезазначених причин

  1. Сервер вичерпав та закрив з'єднання.
    виправлення: спробуйте збільшити wait_timeoutзмінну у my.cnf/my.ini файлі конфігурації вашого mysqld .
  2. Сервер скинув неправильний або занадто великий пакет.
    fix: збільшити максимальний розмір пакету, збільшивши значення max_allowed_packetу my.cnf/my.ini файлі.

Будь-ласка, перевірте файли, якщо ви намагаєтесь отримати щось, що займає занадто довго або не застосовується.


Thx Anshu, я стежу за журналом запитів MySQL, і база даних ніколи не потрапляє із запитом. Крім того, якщо я перезавантажую сервер, іноді може виникнути помилка протягом 20 секунд після того, як сервер перебуває в Інтернеті - набагато занадто короткий, щоб навіть час налаштування за замовчуванням вийшов у режим очікування. Я встановив max_allowed_packet2G і wait_timout86400, все ще не допоможе.
Jongosi

Перевірте, чи правильно підключено базу даних, перевірте файл програми / etc / local.xml
Аншу Мішра

Thx Anshu, так, це правильно - підключення трапляється приблизно 68% запитів
Jongosi

6

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

Як підтвердила команда сервера 1 & 1 , апаратні брандмауери були правильно налаштовані, але вони неправильно перехоплювали дійсний трафік між файловим сервером та db-сервером близько 25% часу.

Натомість ми налаштували iptables і повністю відключили апаратні брандмауери. 100% доступність зараз.


2
О Боже! Спорадичний брандмауер ... треба любити таку проблему. Радий, що ви розібралися. :)
davidalger

Тут є та сама проблема, і, схоже, ваше рішення спрацює і для нас. Поговоримо також 1 і 1. Чи допомогла вам будь-яка допомога? Чи можу я зв’язатися з вами? Twitter? Facebook? Будь ласка, перегляньте мій профіль для деталей. Спасибі
webDEVILopers

2

У мене виникло те саме питання для Magento 2.1, і мій журнал помилок mysql кілька разів показав таку помилку під час процесу "MySQL пішов":

...[Warning] File Descriptor 1228 exceeded FD_SETSIZE=1024

Щоб потенційно вирішити цю проблему, спочатку перевірте open filesзначення $ ulimit -n, яке в моєму випадку було 256.

По-друге, додайте table_open_cache = {that ulimit -n value}під [mysqld]розділом у своєму my.cnf.

Тепер перезапустіть MySQL і, сподіваємось, ви знову в дії.

Примітка: я локально запускаю Magento 2.1 на OS X El Capitan з PHP 7.1 та MySQL 5.7.15 build з Homebrew. Але я думаю, що це рішення також буде працювати і на старих або інших установках.


1

Відредагуйте файл app / etc / local.xml у своїй папці Magento, замінивши запис для хоста на "127.0.0.1" замість "localhost".


База даних знаходиться на окремому апаратному сервері, тому використовується IP-адреса сервера MySQL.
Йонгосі

1

Виникла та ж помилка при переміщенні великої бази даних між двома серверами.

Тимчасово додавши наступне у файл конфігурації mysql (/etc/mysql/my.cnf) на моєму локальному сервері (пункт призначення) та перезапуск mysql (перезапуск служби mysql) вирішив проблему для мене:

max_allowed_packet      = 160M
wait_timeout            = 28800000
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.