2014-10-05 4 views
6

Как это в моей ошибке регистрирует каждый сейчас, а затем и хотят, чтобы выяснить вопрос:SQLSTATE [HY000] [2002] Тайм-аут соединения

[04-Oct-2014 13:25:42 America/Chicago] Failed to connect to database: SQLSTATE[HY000] [2002] Connection timed out [04-Oct-2014 13:25:42 America/Chicago] PHP Fatal error: Call to a member function prepare() on a non-object in /home/spconlin/public_html/spc_app/app/add_log.php on line 28

Connect скрипт:

<?php 

if(!defined('INCLUDE_CHECK')) die('You are not allowed to execute this file directly'); 

// db config 
$db_host  = '127.0.0.1'; 
$db_database = '*****'; 
$db_user  = '*****'; 
$db_pass  = '*****'; 

//db connection 
try { 
    $db = new PDO("mysql:host=$db_host;dbname=$db_database;charset=utf8", $db_user, $db_pass, 
     array(
      PDO::ATTR_EMULATE_PREPARES => false, 
      PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION, //PDO::ERRMODE_SILENT is default setting 
      PDO::ATTR_PERSISTENT => false 
      ) 
    ); 
} 
catch(PDOException $e) { 
    error_log("Failed to connect to database: ".$e->getMessage()); 
} 

?> 

Что я сделал:

  • переключатель с 'lo calhost»на 127.0.0.1 в связи
  • выключателя постоянных соединений с ложной

Перед выполнением вышеуказанных изменений в моей связи я получал SQLSTATE[HY000] [2002] Resource temporarily unavailable, а не connection timed out, как показано выше.

Некоторая справочная информация - этот скрипт add_log.php, в частности, добавляет информацию в базу данных до нескольких раз в секунду, когда она фактически используется. Хотя почти 99% времени этот конкретный скрипт упоминается в ошибке, иногда другие. Я понимаю, что сценарий, на который указывает, действительно ничего не значит, потому что это не то место, где происходит ошибка (это происходит в соединении, а не сценарий add_log.php), но это странно, что почти всегда этот конкретный файл ссылается, что приводит меня верить тому, что он называется так часто подряд, является частью проблемы.

БД является innodb.

На самом деле это проблема с моим сервером и db или подключенным к нему человеком/компьютером? Возможно ли, что «у них плохая связь с« мной », и это вызывает ошибку?

EDIT:

Может быть, таким образом, который я, требующий моего соединять скрипт на страницах он нужен? Так как файл «попал» довольно часто, он также будет требовать от моего скрипта подключений так же, как в приведенной ниже строке. Обратите внимание, что я использую $_SERVER['DOCUMENT_ROOT'] (может ли это повлиять?).

require $_SERVER['DOCUMENT_ROOT'].'/custom/functions/connect.php';

+0

Можете ли вы войти в свой db с клиентом? без php? Нормально это проблема ресурса mysql –

+0

какая строка кода находится в строке add_log.php 28? Он, похоже, не является частью кода, который вы включили. – mschuett

+0

Это не имеет значения, как указано в op. Ошибка происходит в соединении, тогда она запускается при следующем использовании $ db.В скриптах нет «ошибок» - они работают нормально - я не могу воспроизвести эту ошибку самостоятельно, и это не происходит все время. – user756659

ответ

1

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

Вам следует как можно больше использовать соединение, а не воссоздавать ненужные.

Когда открыто слишком много соединений, вы будете испытывать такие ошибки, и это будет не так очевидно, чтобы воспроизвести.

Также, когда соединение не будет успешным, вы должны выйти перед подготовкой.

Это изменение может потребовать реализации этой логики внутри класса.

+0

Можете ли вы рассказать об этом? Я использую pdo. Первоначально у меня были постоянные связи ... Я теперь отключил это. Во-вторых, с pdo соединение автоматически закрывается при завершении скрипта. Таким образом, единственные открытые соединения - это те, которые должны быть открыты. – user756659

+0

, если что-либо 'ATTR_PERSISTENT' должно быть установлено в true – meda

+0

Это то, что я изначально имел - когда это было, я все еще получал те же ошибки, но они были' SQLSTATE [HY000] [2002] Ресурс временно недоступен' – user756659

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