Подключение к удаленному серверу 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.
4 ответа
- брандмауэр сервера должен быть настроен для разрешения входящих соединений на порт 3306
- у вас должен быть пользователь в MySQL, которому разрешено подключаться с
%
(любой хост) (подробности см. в руководстве)
Текущая проблема - первая, но сразу после ее решения вы, вероятно, получите вторую.
Подключить удаленный MySQL Server очень просто. Используя 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
Я только что решил эту проблему. То, что я узнал, это:
- вам придется редактировать
my.cnf
и установитьbind-address = your.mysql.server.address
под[mysqld]
- закомментировать поле пропуска сети
- перезапустите mysqld
проверьте, работает ли он
mysql -u root -h your.mysql.server.address –p
создайте пользователя (usr или что-нибудь еще) с% в качестве домена и предоставьте ему доступ к рассматриваемой базе данных.
mysql> CREATE USER 'usr'@'%' IDENTIFIED BY 'some_pass'; mysql> GRANT ALL PRIVILEGES ON testDb.* TO 'monty'@'%' WITH GRANT OPTION;
откройте брандмауэр для порта 3306 (вы можете использовать iptables. убедитесь, что вы открываете порт для всех, или, если вы в полной безопасности, то разрешите только адрес клиента)
- перезапустите брандмауэр /iptables
Теперь у вас должна быть возможность подключиться к серверу mysql через скрипт php вашего клиентского сервера.
Возможно, это не ответ на вопрос автора. Но это может помочь людям, чье лицо со мной в такой же ситуации:
У клиента две сетевые карты: беспроводная и обычная. Пинг до сервера может быть успешным. Однако telnet serverAddress 3306
потерпит неудачу И будет жаловаться
Не удается подключиться к серверу MySQL в "xxx.xxx.xxx.xxx" (10060)
при попытке подключения к серверу. Так что я запретил обычные сетевые адаптеры. И попробовал telnet serverAddress 3306
это работает. И тогда это работает, когда соединяется с сервером MySQL.