2013-04-18 6 views
0

При попытке подключиться к удаленному серверу я получаю эту ошибку:Мой код подключения только локальный сервер MySQL, но не для удаленного сервера

php_network_getaddresses: getaddrinfo failed: Hôte inconnu. (перевод: Host unknown).

con.php:

<?php 
    $db_host  = 'http://xxx.xxx.xxx.xxx'; 
    $db_username = 'xxx'; 
    $db_password = 'xxx'; 
    $db_name  = 'xxx'; 

    $con = mysql_connect($db_host,$db_username,$db_password); 

    $select_db = mysql_select_db($db_name,$con); 

?> 

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

+2

Вы не можете подключиться к MySQL через HTTP. Удалите протокол и убедитесь, что у пользователя есть разрешение на доступ ко всем доменам. – BenM

ответ

4

Вы не можете подключиться к MySQL с использованием протокола HTTP (а именно из-за конфликтов портов). Параметр должен быть строкой IP. Удалить протокол http следующим образом:

$db_host  = 'xxx.xxx.xxx.xxx'; 
$db_username = 'xxx'; 
$db_password = 'xxx'; 
$db_name  = 'xxx'; 

$con = mysql_connect($db_host, $db_username, $db_password); 
$select_db = mysql_select_db($db_name, $con); 

Также следует отметить, что MySQL может быть сконфигурирована, чтобы не допустить ничего, кроме localhost доступа учетных записей пользователей. Убедитесь, что пользователь, который вы используете, имеет доступ к базе данных из любого домена.

И наконец, семейство функций mysql_* устарело, и вам не следует использовать их для нового кода.Вместо этого проверьте MySQLi или PDO.

+0

Теперь я получаю эту ошибку: «Никакое соединение не может быть сделано, потому что целевая машина активно отказалась от него». Я использую логин root, и у него есть все привилегии. – thesubroot

+0

вам нужно проверить, находится ли машина, на которой размещена БД одна: 1) позволяет входящий трафик на этот порт. 2) Если пользователь, к которому вы подключены, имеет привилегию использовать эти таблицы/базу данных. –

+0

, а также разрешая движение трафика из этого порта. –

5

$db_host = 'xxx.xxx.xxx.xxx'; Вместо

Вы не можете использовать HTTP протокола для Mysql, так как они оба работают на разных портах/используют различные протоколы.

Далее HTTP (веб-сервис) = 80 Mysql (ваша база данных) = 3306, как указано в BenM, это порт по умолчанию. В большинстве случаев это не изменяется. Однако вы меняете свой порт на любой другой порт (например, вы можете использовать любую другую услугу).

И, кроме того, обратите внимание на PDO, поскольку функции Mysql_ будут устаревать, а также опасны для использования в новых системах и в старых.

Посмотрите at one of my answers о том, как настроить PDO

Редактировать не 1

Как упоминалось на ответ benM в комментарии, «Нет соединения может быть сделано, потому что целевая машина активно отказывалась ».

так что теперь, если у вас есть доступ к корневому на фактическом сервере базы данных, размещенные на то вы должны проверить, если сервер (пример в моем случае это убунт сервер)

запустить эту команду:

sudo netstat -pan | grep mysql 

Также посмотрите на эту картину: Довольно много это показывает порт TCP, если он слушает или не перечисление (здесь он прослушивает)

enter image description here

снова это предполагает, что у вас есть root-доступ к фактическому Linux/(независимо от сервера). Я только владею ubuntu, но также могу помочь вам с другой информацией о сервере.

+0

MySQL не обязательно работает на '3306'. И они будут устаревать, а не обесцениваться;) – BenM

+0

Насколько я знаю (что ограничено) сервер базы данных прослушивает запросы на порт 3306. Если я ошибаюсь, можете ли вы рассказать подробнее? –

+1

'3306' - это порт по умолчанию для MySQL, но его можно настроить для использования другого порта. – BenM

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