2009-12-12 3 views
6

Я использую ту же библиотеку абстракции DB в течение многих лет. Но сегодня он начал писать эти сообщения (8) в моем журнале.mysql_pconnect(): ошибка отправки 5 байтов с errno = 32 Разбитая трубка

Приложение работает правильно, но каждый раз, когда скрипт подключается к БД, регистрируется одно и то же уведомление.

Я не могу думать, что могло измениться. Это происходит на моей локальной машине.

OS X 10.6.2 
PHP 5.3.0 (cli) 
mysql Ver 14.12 Distrib 5.0.87 
mysqlnd 5.0.5-dev - 081106 - $Revision: 1.3.2.27 $ 
+0

Вы пытались подключиться через служебную программу командной строки? –

+0

Есть ли что-то подобное/связанное в журнале mysqld? – VolkerK

+0

У меня нет проблем с использованием клиента mysql cli. и, как я уже сказал, mysqlnd подключается, и соединение работает, но оно выдает это уведомление ob каждый pconnect(). – 2009-12-12 19:05:43

ответ

1

Возможно, это связано с тем, что ваши данные содержат символы «utf-8». У меня возникла аналогичная проблема.

Исключение: mysql_query(): отправка из 1462592 байт не удалась с Errno = 32 Разбитой трубой

Я использовал

mysql -u username -p database < dump_file # this is bad 

импортировать файл SQL содержит много UTF8 символов (тайский язык), но я не задал default-character-set = utf8 для [mysql]. Таким образом, неправильные кодированные данные в базе данных вызвали эту проблему.

+0

Это может произойти, даже если у вас установлено все значение utf-8. Это включает использование utf8mb4. Я использую MySQL 5.6 с PHP 5.6.20, и у меня все еще есть проблема. Я помню, что это началось, когда я пытался реализовать постоянные соединения. –

11

Если кто-то борется с этим вопросом, вот исправление:

Попробуйте изменить/настройки wait_timeout в вашем MySQL my.cnf конфигурационный файл:

wait_timeout=3600 

Этот конфигурационный файл находится в /etc/mysql/my.cnf (Ubuntu/Debian) и /usr/local/mysql/my.cnf (OSX).

Перезагрузите сервер mysql, и он должен работать.

0

просто удалите mysqlnd водитель и используйте mysqli Да mysqlnd более современный, но как насчет стабильности? следующие команды исправить ваши проблемы

APT-получить удалить php5-mysqlnd

APT-получить установку php5-PDO-MySQL

3

Только решение, которое я нашел до сих пор есть, изменение

// From 
PDO::ATTR_PERSISTENT => true 
// To 
PDO::ATTR_PERSISTENT => false 

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

+0

Я заметил, что это началось, когда я пытался использовать постоянные соединения. Может быть, я что-то упустил. –

2

Я использую PHP 5.6.20, PDO (только исключения исключений) и MySQL 5.6.28 с постоянными соединениями, а ВСЕ - utf8mb4. Весь мой стек настроен для utf-8 (параметры строки dsn, подключения, базы данных сервера баз данных, таблицы, столбцы, Apache 2.4.12, PHP, все веб-страницы, CSS ... вы называете это).

Я получаю следующее сообщение об ошибке с перерывами, и это мистифицирует и раздражает.

Примечание: PDO :: __ конструкция(): отправить 5 байт потерпела неудачу с ERRNO = 32 Брокен трубы в файле/Foo/бар/Baz

Предполагая постоянное соединение является неинтерактивным один , руководство MySQL 5.6 (5.1.4 Server System Variables) говорит следующее о системной переменной сервера wait_timeout.

Количество секунд, сервер ожидает активности на неинтерактивного соединения перед его закрытием.

По умолчанию: 28800 сек

(28000 sec/1) * (1 hour/3600 sec) = 8 hours

Макс: 31536000 сек

((31536000 sec/1) * (1 hr/3600 sec) * (1 day/24 hrs) = 365 days 

Таким образом, проверьте wait_timeout в вашем my.cnf и решить, если постоянные соединения, что вам нужно. Кроме того, вам придется инвестировать в более надежное приложение, чтобы учесть постоянное соединение, которое было снесено. Очевидно, что вы не хотите, чтобы ваш клиент вернулся на следующий день (уехал домой на ночь) и сказал: «Что за черт ?!»

 Смежные вопросы

  • Нет связанных вопросов^_^