Всем привет! Переносил PHP базу с одного хостинка на другой, при запуске базы на новом хостинге выдало ошибку Warning: mysqli::mysqli(): (HY000/2002): Operation timed out in /home/kvs/lib/lib/DBTrait.php on line 20 Ошибка подключения (2002) Operation timed out перекопал все возможное помогите кто может. Спасибо заранее.
время выполнения операции превысило отведенное на него время, что то в этом роде, видимо к БД остались старые данные для подключения, в том числе и адрес БД. PS переносил базу данных или файлы? это далеко разные вещи.
короче скорее всего в файлах идут старые данные для подключения к БД, включая адрес, собственно он не может соединится, т.к. там защита. по этому меняй на новые.
VLK, а почему ты не рассмотрел такой вариант как загруженность субд на втором хостинге? ну типа поскольку в него сейчас заливается сайт и делает разовую но большую нагрузку - всё отведенное время могло закончится и он теперь в лоу приорити сидит.
ну я писал скорее всего, может быть и такое, но скорее всего он просто не поменял данные, я так думаю потому что: да и при высокой нагрузке я думаю разок бы и загрузилось, как то так..
а мне вот почему-то кажется что если бы он на другом серваке ломился с аккредитациями от первого сервака - ошибка была бы не таймаута, а авторизации. не? я по крайней мере не очень могу припомнить ситуации при которой будет наоборот. субд на другом порту работает? - порт недоступен. другой процесс никак не связанный с субд и мускулом на указанном порту работает? - ошибка протокола. фиг знает короче если честно
В файлах конфига прописал все возможное, попробую время увеличить на хостинге. Добавлено спустя 9 минут 59 секунд: Не помогло((
ну так если ты делаешь подключение к правильному серверу с правильными логинами-паролями а видишь таймаут подключения значит что-то не то с сервером субд к которой ты пытаешься подключиться. так что скорее всего это прямой путь в техподдержку того хостинга.
Parse error: syntax error, unexpected '[' in /home/kvs/kvs.nichost.ru/docs/config.php on line 14 содержимое файла Код (PHP): <?php $dblocation = "kvs.mysql"; $dbname = "kvs_bs"; $dbuser = "kvs_mysql"; $dbnameCommon = "kvs_common"; $dbuserCommon = "kvs_mysql"; $dbpasswd = "Zk1_ULKA"; class Conf{ public static $data = [ 'prefix'=>'', 'city' => 'Сервис', 'front_title' => 'Компьютерный сервисный центр', 'manufacturer'=> 'Производитель', ]; }
объявление массива квадратными скобками введено в более поздней версии чем установлена на хостинге - обновить пхп.
Обновил PHP Warning: mysqli::mysqli(): (HY000/2002): Operation timed out in /home/kvs/lib/lib/DBTrait.php on line 20 Ошибка подключения (2002) Operation timed out вернулась ошибка Добавлено спустя 1 минуту 47 секунд: Версия Apache разная на старом 1,3 на новом 2,4 это может влиять?
погодь, у него до этого был сервер_1_РНР и сервер_1_Mysql, сейчас он поменял хостинг и у него стало сервер_2_РНР и сервер_2_Mysql, но в файлах у него указывает на сервер_1_Mysql, а на этом сервере допустим запрет на обращение с левых ip, как то так. как я лично понимаю он просто тупо перекачал файлы и думал что все будет ок.
По этому я и прошу показать конфиг соединения. 100% косяк там. Например, у него прописан локалхост там, а в документации его шары сказано, что прописывать надо такой-то адрес. Или наоборот.
DBTrait.php on line 20 - ругается на этот файл вот эго содержимое Код (PHP): <?php /** * Class DBTrait */ trait DBTrait { /** * @var mysqli */ private static $_db; /** * @param $host * @param $user * @param $password * @param $db */ public static function connect($host, $user, $password, $db) { static::$_db = new mysqli($host, $user, $password, $db); if (static::$_db->connect_error) { die('Ошибка подключения (' . static::$_db->connect_errno . ') ' . static::$_db->connect_error); } static::$_db->set_charset('cp1251'); static::$_db->autocommit(false); } /** * @return mixed */ public static function getDB() { return static::$_db; } /** * @param $query * @return mysqli_result */ public static function query($query) { try { $result = static::$_db->query($query); if (static::$_db->errno) { throw new Exception($query); } static::$_db->commit(); return $result; } catch (Exception $exc) { self::notify($exc); } } /** * @param $query * @return mixed */ public static function multi_query($query) { try { $result = static::$_db->multi_query($query); $i = 0; do { ++$i; } while (static::$_db->more_results() && static::$_db->next_result()); if (static::$_db->errno) { static::$_db->rollback(); throw new Exception('Ошибка в запросе №' . $i . '<br>' . static::$_db->error . '<br>' . nl2br($query)); } else { static::$_db->commit(); } return $result; } catch (Exception $exc) { self::notify($exc); } } /** * @param $str * @return mixed */ public static function real_escape_string($str) { return static::$_db->real_escape_string($str); } /** * @return mixed */ public static function insert_id() { $result = static::$_db->query('SELECT LAST_INSERT_ID()')->fetch_array(); return $result[0]; } /** * */ public static function close() { static::$_db->close(); } private static function notify($exc){ if((PHP_SAPI == 'cli')){ die(iconv('WINDOWS-1251', 'UTF-8', $exc->getMessage())); } $post = var_export($_POST, 1); $msg = $_SERVER['HTTP_REFERER'] . PHP_EOL . Conf::$data['user']['id'] . PHP_EOL . $post . PHP_EOL . $exc->getMessage() . '<br> ' . static::$_db->error . '<br> ' . nl2br($exc->getTraceAsString()); mail(Conf::$data['adminEmail'], 'ERROR!!! ' . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI'], $msg); } } PHP, JavaScript, SQL и другой код пишите внутри тегов Код ( (Unknown Language)): [b]php][/b]Тут код[b][/[/b][b]code][/b][/color]
Мы очень рады. И еще раз. Я не просто так это пишу. Разумеется, если с конфигом проблема, то ошибка будет в коде, который, используя хреновый конфиг, пытается сделать подключение. Искать надо там, где потерял, а не там, где светлее.
Если ошибка про слишком долгое выполнение происходит на строке new mysli(…), предположу, что там упоминается хост, отличный от localhost или 127.0.0.1 и это имя ни в какую не может быть раздуплено. Возможно потому, что там имя со старого хостинга, про которое знают только во внутренней сетке того хостинга. Автор, попробуй БЕЗ всей этой хуйни в отдельном тестовом файле выполнить Код (PHP): echo gethostbyname($host); // здесь должен упоминаться твой хост из конфига! не будет ли зависать? Добавлено спустя 23 минуты 25 секунд: P.S. пару раз на винде сталкивался с проблемой, что при указании "localhost" соединение происходит медленно, т.к. оно отображается на IP6 адрес, а мускуль это почему-то не устраивает ))) но не настолько медленно, чтобы таймауте превысить.
Потому что в документации мускуля написано, что надо 127.0.0.1 писать, во избежание проблем и заморочек с DNS. А еще на винде пыховый драйвер при обращении к localhost может пытаться открыть unix-socket, который просто не поднимется и сдохнет. При этом драйвер словит не ошибку, а таймаут. По этому я и прошу автора, чтобы просто выложил конфиг.
В базе 2 конфига ---------------------1----------------------- Код (PHP): <?php $dblocation = "kvs.mysql"; $dbname = "kvs_bs"; $dbuser = "kvs_mysql"; $dbnameCommon = "kvs_common"; $dbuserCommon = "kvs_mysql"; $dbpasswd = "1111"; class Conf{ public static $data = [ 'prefix'=>'', 'city' => '11', 'front_title' => '11', 'manufacturer'=> '11', ]; } ---------------------2----------------------- Код (PHP): <?php return [ 'connection_self'=>[ 'dsn' => 'mysql:dbname=kvs_bs;host=kvs.mysql', 'user' => 'kvs_mysql', 'password' => '1111' ], 'connection_common' => [ 'dsn' => 'mysql:dbname=kvs_common;host=kvs.mysql', 'user' => 'kvs_mysql', 'password' => '1111' ] ];
кажется я писал посты в никуда Добавлено спустя 1 минуту 40 секунд: Чувак, готового решения под копирку не будет. Придётся хотя бы по минимуму читать и вникать.
Да как бы перелопатил все возможные конфиги прописал все под новый хостинг, и никак((( возможно проблема где то в настройках хостинга