У меня есть два VPS сервера, и на обоих установлено MySQL , один для тестирования и один для разработки. Один из моих серверов не позволит мне подключиться извне. С пользователем;
'mytestuser' @ '%'
blockquote>Согласно искатель открытых портов , порт 3306 для сервера-нарушителя выглядит закрытым. У меня есть программы C ++ и Java, которые я слушаю на произвольных портах без каких-либо проблем. Почему это происходит и как я могу это исправить?
Ubuntu установлен Ubuntu 11.10 (GNU / Linux 2.6.32-042stab072.10 x86_64)
Результаты
netstat -tuple
на каждом сервереСервер-нарушитель
[ 110]Рабочий сервер
tcp 0 0 *:mysql *:* LISTEN mysql 1847519288 -
Я использую этот метод:
sudo ufw status
sudo ufw allow XXXX/tcp
# use a port other than the default/predictable 3306
# work outside, and close the door when you are done
sudo ufw deny XXXX/tcp
Нет необходимости изменять другие файлы конфигурации, и дополнительные порты не открываются по умолчанию.
Может случиться, что ваша конфигурация находится в каталоге /etc/mysql/mysql.conf.d/mysqld.cnf
, убедитесь, что это не так.
Проблема была в том, что сервер слушал только внутри.
Удаление строки bind-address 127.0.0.1
из /etc/mysql/my.cnf
решило проблему.
Более новые версии Ubuntu (≥16.04) могут иметь эту строку в /etc/mysql/mysql.conf.d/mysqld.cnf
.
Мое предложение, если вы уверены, что порты закрыты (мне кажется странным, что VPS закрывает этот порт), это изменить файл конфигурации MySQL, чтобы использовать другой.
Просто откройте файл конфигурации в терминале sudo nano /etc/mysql/mysql.conf
и найдите раздел [mysqld]
. В нем ищите строку, которая гласит port = 3306
. Измените его на другой неиспользуемый порт и сохраните файл.
Затем просто перезапустите VPS или перезапустите службу, как sudo service mysql restart
.
Просто отметим, что если файл mysql.conf
не находится в том, что я упомянул выше, он может быть в следующих местах:
/etc/my.conf
/etc/my.cnf
/etc/mysql/my.conf
И если команда service
не работает, затем сделайте следующее:
sudo /etc/init.d/mysql restart
Если проблема не исчезнет, то в моем случае я бы проверил iptables (я бы на самом деле удалил все в iptables, чтобы начать все заново, если это возможно) или любая другая опция с брандмауэром.
Так как они VPS, я бы также проверил панель управления VPS, чтобы узнать, есть ли у нее опция, которая может блокировать порты.
Кроме того, я бы запустил nmap
на VPS, чтобы посмотреть, какие порты вы открыли. Вам нужно запустить его снаружи VPS, чтобы увидеть, какие порты они открыли.
netstat -tuplen
также хорошая идея, чтобы увидеть, какие открытые порты у вас есть на сервере, а какие находятся в режиме LISTEN.
Я исправил это, изменив bind-address 127.0.0.1
на bind-address 0.0.0.0
в /etc/mysql/mysql.conf.d
(чтобы MySQL прослушивал все порты).
Кроме того, я настроил учетную запись пользователя mysql для удаленного использования (см. https://stackoverflow.com/a/24171107/132374 ).