Подключение к удаленному серверу MySQL с использованием PHP - PullRequest
11 голосов
/ 20 декабря 2009

Я пытаюсь подключиться к удаленному серверу MySQL с виртуального хоста моей локальной машины, используя следующий код:

$conn = mysql_connect("$dbhost", "$dbuser", "$dbpass") or die(mysql_error());
        mysql_select_db($dbname, $conn) or die(mysql_error());

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

Невозможно подключиться к серверу MySQL на «xxx.xxx.xxx.xxx» (10060)

Это не тот случай, когда я загружаю тот же PHP-файл на сервер. Я могу запросить базу данных без проблем вообще.

Я также не могу подключиться через командную строку, но я могу получить доступ к cPanel, которая исключает вероятность случайного бана моего IP.

Мой локальный сервер работает под управлением PHP 5.2.9, удаленный сервер 5.2.12

Ответы [ 4 ]

18 голосов
/ 20 декабря 2009
  • Брандмауэр сервера должен быть настроен для разрешения входящих соединений через порт 3306
  • у вас должен быть пользователь в MySQL, которому разрешено подключаться с % (с любого хоста) (подробнее см. руководство )

Текущая проблема - первая, но сразу после ее решения вы, вероятно, получите вторую.

3 голосов
/ 14 октября 2011

Подключить удаленный MySQL Server очень просто. Используя PHP, вам нужно сделать следующее:

  1. Создание пользователя MySQL на удаленном сервере.

  2. Предоставить пользователю полную привилегию.

  3. Подключение к серверу с использованием PHP-кода (пример приведен ниже)

$link = mysql_connect('your_my_sql_servername or IP Address', 'new_user_which_u_created', 'password');
if (!$link) {
    die('Could not connect: ' . mysql_error());
}

echo 'Connected successfully';

mysql_select_db('sandsbtob',$link) or die ("could not open db".mysql_error());
// we connect to localhost at port 3306
2 голосов
/ 07 июля 2012

Я только что решил эту проблему. То, что я узнал, это:

  1. вам придется отредактировать my.cnf и установить bind-address = your.mysql.server.address в [mysqld]
  2. закомментировать поле пропуска сети
  3. перезагрузить mysqld
  4. проверить, работает ли он

    mysql -u root -h your.mysql.server.address –p 
    
  5. создать пользователя (usr или что-нибудь еще) с% в качестве домена и предоставить ему доступ к рассматриваемой базе данных.

    mysql> CREATE USER 'usr'@'%' IDENTIFIED BY 'some_pass';
    mysql> GRANT ALL PRIVILEGES ON testDb.* TO 'monty'@'%' WITH GRANT OPTION;
    
  6. открыть брандмауэр для порта 3306 (вы можете использовать iptables. Убедитесь, что вы открыли порт для каждого или, если вы в полной безопасности, разрешите только адрес клиента)

  7. перезапустить брандмауэр / iptables

теперь вы можете подключиться к серверу mysql через скрипт php вашего клиентского сервера.

0 голосов
/ 15 июня 2017

Возможно, это не ответ на вопрос автора. Но это может помочь людям, чье лицо со мной в такой же ситуации:

У клиента две сетевые карты: беспроводная и обычная. Пинг до сервера может быть успешным. Однако telnet serverAddress 3306 потерпит неудачу. И будет жаловаться

Невозможно подключиться к серверу MySQL на «xxx.xxx.xxx.xxx» (10060)

при попытке подключения к серверу. Так что я запретил обычные сетевые адаптеры. И попробовал telnet serverAddress 3306, это работает. А потом работает при подключении к серверу MySQL.

...