Время от времени я получаю следующую ошибку: Warning: mysqli_connect(): (HY000/2002): No route to host in
(путь к моему mysqli_connect). Мой сайт находится на удаленном сервере, принадлежащем моему веб-хосту, поэтому проблема может быть на их стороне, но прежде чем обвинять их в возникновении такой ошибки, я хочу убедиться, что это не моя ошибка. На самом деле, я ожидаю, что это будет моя вина по нескольким причинам:
Шаблон, который я нашел еще, состоит в том, что существует некоторая (~ 1%) вероятность запуска ошибки при запуске mysqli_connect. Каждая функция, работающая с базой данных, имеет свой собственный файл db.php
(где инициализируется база данных), поэтому части кода, в которых вызывается множество вложенных функций для вызова базы данных, довольно опасны (до 10%, что перезагрузка будет приводят к сбою), тогда как те, где все запросы выполняются без вызовов функций, являются "безопасными".
Я могу придумать несколько обходных решений, минимизирующих вероятность сбоя, но они не решат главной проблемы: иногда mysqli_connect терпит неудачу, и я понятия не имею, почему, или что вызывает его.
Что я изменил, прежде чем я впервые столкнулся с этой проблемой:
Вот мой файл db.php
- то же самое, что было до начала проблем (пароль не реален):
<?php
$spojeni=mysqli_connect('mysql01','pavel','mypasswd');
if (!$spojeni) die('Nepodařilo se připojit k databázi.');
mysqli_query($spojeni, "USE ehistory");
mysqli_set_charset($spojeni,'utf8');
mysqli_query($spojeni, "SET COLLATION_CONNECTION = 'utf8_czech_ci';");
?>
Я не могу опубликовать весь сайт (или даже все запросы) здесь, поэтому прокомментируйте и спросите, считаете ли вы, что часть моего кода должна быть важной; в таком случае добавьте объяснение, почему это может иметь значение.
EDIT: я спросил свой веб-хост и получил IP-адрес, который следует заменить на "mysql01". Я заменил "mysqli01" на IP-адрес, и ничего не изменилось. Что еще я могу сделать?
Мой сайт находится на удаленном сервере, принадлежащем моему веб-хосту, поэтому проблема может быть на их стороне, но прежде чем обвинять их в возникновении такой ошибки, я хочу убедиться, что это не моя ошибка. На самом деле, я ожидаю, что это будет моя вина по нескольким причинам:
mysql01 не является полным доменным именем (FQDN). Используйте IP-адрес или попросите свой веб-хостинг для исправленного полного доменного имени.
Это, по-видимому, проблема IP-маршрутизации (сетевой уровень 3). Я считаю, что единственное, что нужно проверить на вашей стороне, - это то, что каждый раз сервер mysqli_connect() задает правильный IP-адрес/имя сервера MySQL. Чтобы устранить возможные проблемы с резольвером, попробуйте использовать простой IP вместо имени хоста.