Подключение к удаленному серверу MySQL с помощью PHP

Я пытаюсь подключиться к удаленному серверу 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

Ответ 1

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

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

Ответ 2

Очень просто подключить удаленный сервер MySQL с помощью PHP, вам нужно сделать следующее:

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

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

  • Подключение к серверу с использованием 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

Ответ 3

Я просто решил эту проблему. Что я узнал:

  • вам нужно будет отредактировать my.cnf и установить bind-address = your.mysql.server.address в разделе [mysqld]
  • комментарий в поле skip-networking
  • перезапустить mysqld
  • проверьте, работает ли он

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

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

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

теперь вы сможете подключить сервер mysql к своему клиентскому серверу php script.

Ответ 4

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

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

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

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