Как открыть порт 3306 для mysql ubuntu
Обновлено: 21.11.2024
В этой статье мы увидим, как разрешить удаленное подключение к базе данных MySQL, установленной на нашем сервере Ubuntu 20.04. Это может помочь вам управлять своей базой данных с настольного компьютера или ноутбука или даже из приложения, работающего на вашем ПК.
Прежде чем мы начнем, вы должны знать, как установить SSH-соединение с вашим сервером с помощью шпатлевки. Здесь я использую рабочий стол Windows. Откройте шпатлевку, укажите IP-адрес вашего сервера и нажмите «Открыть».
Он запросит ваше имя пользователя и пароль, введите их и нажмите «Ввод».
Ага! вы только что вошли на свой сервер.
Что дальше?
Это очень просто. Сначала вам нужно изменить конфигурацию MySQL, так как по умолчанию MySQL не будет прослушивать внешние подключения. Для этого просто выполните следующие действия.
1. Определите расположение файла конфигурации MySQL. Запустите приведенную ниже команду, чтобы найти то же самое.
mysql --help | grep "Параметры по умолчанию" -A 1
Вы получите результат, подобный
Параметры по умолчанию считываются из следующих файлов в указанном порядке: /etc/my.cnf /etc/mysql/my.cnf ~/my.cnf
Это порядок, в котором MySQL ищет файл конфигурации, и возьмем первый путь к каталогу /etc/my.cnf.
2. Мы отредактируем файл /etc/my.cnf, для этого выполните приведенную ниже команду.
Примечание. Если вы не вошли в систему с правами root, добавьте sudo перед командой.
sudo nano /etc/my.cnf
3. Найдите строку, содержащую [mysqlid].
Не волнуйтесь, если ваш файл пуст. Просто добавьте в файл следующую строку.
замените xxx.ip.xxx на IP вашего сервера. Пример 192.168.0.100
4. Сохраните файл, нажав CTRL+O, запросит подтверждение, нажмите Enter и выйдите из редактора, нажав CTRL+X.
Ну вот и все. Но чтобы изменения конфигурации вступили в силу, перезапустите сервер MySQL, запустив
sudo systemctl перезапустить mysql
На этом со стороны MySQL все, теперь нам нужно открыть порт MySQL (по умолчанию 3306) в брандмауэре для внешних подключений. Для этого выполните следующие шаги.
1. Запустите команду ниже.
iptables -A INPUT -i enp1s0 -p tcp --destination-port 3306 -j ПРИНЯТЬ
В качестве альтернативы вы можете предоставить доступ к определенному IP-адресу.
iptables -A INPUT -i enp1s0 -s xxx.xxx.xxx.xxx -p tcp --destination-port 3306 -j ПРИНЯТЬ
замените xxx.xxx.xxx.xxx на ip системы, с которой нужно установить соединение. В моем случае я предоставил IP-адрес своего рабочего стола.
** Убедитесь, что вы заменили enp1s0 на имя вашего сетевого интерфейса. Чтобы узнать имя вашего сетевого интерфейса, запустите ifconfig на терминале/замазке, и вы сможете узнать его.
2. Запустите приведенную ниже команду и сохраните конфигурацию iptables.
для IPv4: sudo iptables-save
для IPv6: sudo ip6tables-save
Все готово. Просто перезагрузите систему и попробуйте подключиться из другой системы.
Для перезагрузки можно запустить sudo init 6 или sudo reboot.
Спасибо, что прочитали,
Если вы обнаружите какие-либо проблемы или исправления, сообщите об этом в комментариях. Я люблю совершенствоваться. 😊
Многие веб-сайты и приложения начинают работу с веб-сервера и серверной части базы данных, размещенных на одном компьютере. Однако со временем такая установка может стать громоздкой и трудно масштабируемой. Распространенным решением является разделение этих функций путем настройки удаленной базы данных, что позволяет серверу и базе данных расти в своем собственном темпе на своих собственных компьютерах.
Одна из наиболее распространенных проблем, с которой сталкиваются пользователи при попытке настроить удаленную базу данных MySQL, заключается в том, что их экземпляр MySQL настроен только на прослушивание локальных подключений. Это настройка MySQL по умолчанию, но она не будет работать для удаленной настройки базы данных, поскольку MySQL должна иметь возможность прослушивать внешний IP-адрес, по которому можно связаться с сервером. Чтобы включить это, откройте файл mysqld.cnf:
Перейдите к строке, которая начинается с директивы bind-address. Это будет выглядеть так:
По умолчанию для этого значения установлено значение 127.0.0.1 , что означает, что сервер будет искать только локальные соединения. Вам нужно будет изменить эту директиву, чтобы она ссылалась на внешний IP-адрес. В целях устранения неполадок вы можете установить эту директиву для подстановочного IP-адреса, либо * , :: , либо 0.0.0.0 :
Примечание. В некоторых версиях MySQL директива bind-address по умолчанию может отсутствовать в файле mysqld.cnf. В этом случае добавьте следующую выделенную строку в конец файла:
После изменения этой строки сохраните и закройте файл ( CTRL + X , Y , затем ENTER , если вы редактировали его с помощью nano ).
Затем перезапустите службу MySQL, чтобы изменения, внесенные в mysqld.cnf, вступили в силу:
Если у вас есть существующая учетная запись пользователя MySQL, которую вы планируете использовать для подключения к базе данных с удаленного хоста, вам потребуется перенастроить эту учетную запись для подключения с удаленного сервера, а не с локального хоста.Для этого откройте клиент MySQL как пользователь root MySQL или с другой учетной записью привилегированного пользователя:
Если вы включили аутентификацию по паролю для root, вместо этого вам потребуется использовать следующую команду для доступа к оболочке MySQL:
Чтобы изменить хост пользователя, вы можете использовать команду MySQL RENAME USER. Выполните следующую команду, заменив sammy на имя вашей учетной записи пользователя MySQL, а remote_server_ip — на IP-адрес вашего удаленного сервера:
В качестве альтернативы вы можете создать новую учетную запись пользователя, которая будет подключаться только с удаленного хоста с помощью следующей команды:
Примечание. Эта команда создаст пользователя, который проходит аутентификацию с помощью подключаемого модуля аутентификации MySQL по умолчанию, caching_sha2_password . Однако существует известная проблема с некоторыми версиями PHP, которая может вызвать проблемы с этим подключаемым модулем.
Если вы планируете использовать эту базу данных с приложением PHP — например, phpMyAdmin — вы можете создать удаленного пользователя, который будет аутентифицироваться с помощью более старого, хотя и безопасного плагина mysql_native_password:
Если вы не уверены, вы всегда можете создать пользователя, который проходит аутентификацию с помощью caching_sha2_plugin, а затем ИЗМЕНИТЬ его позже с помощью этой команды:
Затем предоставьте новому пользователю права, соответствующие вашим потребностям. В следующем примере пользователю предоставляются глобальные привилегии CREATE , ALTER и DROP баз данных, таблиц и пользователей, а также полномочия INSERT , UPDATE и DELETE данных из любой таблицы на сервере. Он также предоставляет пользователю возможность запрашивать данные с помощью SELECT , создавать внешние ключи с помощью ключевого слова REFERENCES и выполнять операции FLUSH с привилегией RELOAD. Тем не менее, вы должны предоставлять пользователям только те разрешения, которые им нужны, поэтому не стесняйтесь настраивать свои собственные привилегии пользователя по мере необходимости.
После этого рекомендуется запустить команду FLUSH PRIVILEGES. Это освободит любую память, кэшированную сервером в результате предыдущих операторов CREATE USER и GRANT:
Затем вы можете выйти из клиента MySQL:
Наконец, если вы настроили брандмауэр на сервере базы данных, вам также потребуется открыть порт 3306 — порт MySQL по умолчанию — для разрешения трафика к MySQL.
Если вы планируете получать доступ к серверу базы данных только с одного конкретного компьютера, вы можете предоставить этому компьютеру монопольное разрешение на удаленное подключение к базе данных с помощью следующей команды. Обязательно замените remote_IP_address фактическим IP-адресом машины, к которой вы планируете подключиться:
Если в будущем вам понадобится доступ к базе данных с других компьютеров, вы можете предоставить им доступ на разовой основе с помощью этой команды. Просто не забудьте указать их соответствующие IP-адреса.
Кроме того, вы можете разрешить подключения к базе данных MySQL с любого IP-адреса с помощью следующей команды:
Предупреждение. Эта команда позволит любому получить доступ к вашей базе данных MySQL. Не запускайте его, если ваша база данных содержит какие-либо конфиденциальные данные.
После этого попробуйте удаленно получить доступ к базе данных с другого компьютера:
Примечание. Если вы добавили правило брандмауэра, разрешающее подключения только с определенного IP-адреса, вы должны попытаться получить доступ к базе данных с компьютера, связанного с этим адресом.
Если вы можете получить доступ к своей базе данных, это подтверждает, что проблема связана с директивой bind-address в вашем файле конфигурации. Обратите внимание, однако, что установка bind-address на 0.0.0.0 небезопасна, поскольку позволяет подключаться к вашему серверу с любого IP-адреса. С другой стороны, если вы по-прежнему не можете получить удаленный доступ к базе данных, проблема может быть вызвана чем-то другим. В любом случае вам может быть полезно следовать нашему руководству «Как настроить удаленную базу данных для оптимизации производительности сайта с помощью MySQL в Ubuntu 18.04», чтобы настроить более безопасную конфигурацию удаленной базы данных.
Хотите узнать больше? Присоединяйтесь к сообществу DigitalOcean!
Присоединяйтесь к нашему сообществу DigitalOcean, насчитывающему более миллиона разработчиков, бесплатно! Получайте помощь и делитесь знаниями в нашем разделе "Вопросы и ответы", находите руководства и инструменты, которые помогут вам расти как разработчику и масштабировать свой проект или бизнес, а также подписывайтесь на интересующие вас темы.
Серия руководств: устранение неполадок в MySQL
Это руководство предназначено для использования в качестве ресурса по устранению неполадок и отправной точки при диагностике установки MySQL. Мы рассмотрим некоторые проблемы, с которыми сталкиваются многие пользователи MySQL, и предоставим рекомендации по устранению конкретных проблем. Мы также будем включать ссылки на учебные пособия DigitalOcean и официальную документацию MySQL, которые могут быть полезны в определенных случаях.
В этом руководстве объясняется, как разрешить удаленные подключения к серверу MySQL/MariaDB в Ubuntu 18.04. По умолчанию сервер Ubuntu MySQL блокирует все удаленные подключения. Что не позволяет нам получить доступ к серверу базы данных извне.
Обратите внимание, что для разрешения удаленных подключений к MySQL нам необходимо отредактировать основной файл конфигурации MySQL.Если вы используете сервер базы данных MariaDB, файл конфигурации будет "/etc/mysql/mariadb.conf.d/50-server.cnf", если вы установили файл конфигурации сервера базы данных MySQL: "/etc/mysql/mysql .conf.d/mysqld.cnf".
Откройте файл /etc/mysql/mariadb.conf.d/50-server.cnf (или /etc/mysql/mysql.conf.d/mysqld.cnf).
В разделе [mysqld] найдите строку:
И измените его на:
Сохраните файл конфигурации и перезапустите сервер MySQL:
Выполните команду netstat и убедитесь, что сервер mysql прослушивает сокет 0 0.0.0.0:3306.
Вывод должен быть примерно таким:
Как это работает..
По умолчанию демон mysql в Ubuntu 18.04 прослушивает соединения только на локальном хосте (127.0.0.1), что означает, что вы не можете войти на сервер с удаленного компьютера. Этот параметр управляется адресом привязки в файле конфигурации MySQL/MariaDB. По умолчанию установлено значение: «bind-address = 127.0.0.1», что предотвращает доступ других хостов к нашему серверу mysql.
Чтобы разрешить удаленный доступ, мы изменили значение адреса привязки на "0.0.0.0".
Изменив значение на 0.0.0.0, мы предписываем MySQL выполнить привязку ко всем доступным интерфейсам, тем самым разрешая удаленные подключения к серверу MySQL в Ubuntu 18.04.
Откройте порт 3306 в брандмауэре Ubuntu
Брандмауэр UFW по умолчанию отключен в Ubuntu 18.04, поэтому вам не нужно беспокоиться об открытии порта mysql 3306, если вы не включили UFW.
Но если вы включили UFW, он заблокирует удаленный доступ к mysql, поэтому вам нужно добавить правило брандмауэра, чтобы открыть порт 3306.
На другом компьютере с Linux вы можете запустить nmap для IP-адреса вашего сервера, чтобы проверить, открыт ли порт 3306.
Создать удаленного пользователя MySQL и предоставить удаленный доступ к базам данных
Теперь, когда наш сервер MySQL позволяет удаленные подключения, нам по-прежнему нужен пользователь mysql, которому разрешен доступ к серверу из-за пределов локального хоста. Чтобы создать пользователя mysql, которому разрешено подключаться с любого хоста, войдите в консоль MySQL и выполните:
Затем вы можете предоставить доступ к базам данных с помощью команды GRANT ALL:
Если вы хотите предоставить доступ ко всем базам данных на сервере, выполните:
Если вы хотите создать пользователя, которому разрешен вход только с определенного хоста, замените «%» на IP-адрес хоста или имя домена при создании пользователя.
Чтобы проверить подключение, попробуйте получить доступ к серверу MySQL с удаленного компьютера:
Здесь 192.168.1.100 — это IP-адрес моего сервера Ubuntu, на котором работает сервер MySQL.
Обратите внимание, что включение удаленных подключений к серверу MySQL не рекомендуется с точки зрения безопасности. Поэтому не открывайте сервер базы данных снаружи без необходимости, особенно в производственной среде.
Службы MySQL можно легко реализовать с помощью UFW. Для этого нам нужно открыть порт 3306.
В Bobcares мы часто получаем запросы на включение MySQL с использованием UFW в рамках наших служб управления сервером.
Сегодня давайте подробно обсудим это и посмотрим, как легко это делают наши инженеры службы поддержки.
Подробнее о UFW MySQL
Как мы все знаем, Linux больше всего известен своей безопасностью. И iptables делает все возможное для повышения этой безопасности.
Но сложные iptables заставили пользователей предпочесть гораздо более простой внешний интерфейс.
Кроме того, Uncomplicated Firewall или UFW — это внешний интерфейс для iptables, который лучше всего подходит для межсетевых экранов на основе хоста.
Он предоставляет платформу для управления Netfilter и интерфейс командной строки для работы с брандмауэром.
Чтобы подключиться к базе данных MySQL, нам нужно открыть порт 3306. MySQL прослушивает клиентские подключения через порт 3306.
Итак, давайте теперь проверим, как мы это делаем в UFW.
Как мы включаем MySQL в UFW
Недавно один из наших клиентов обратился к нам с вопросом, связанным с UFW. У него установлен брандмауэр UFW, но он не может подключиться к MySQL.
Наши инженеры службы поддержки проверили и обнаружили, что порт 3306 не открыт брандмауэром.
Итак, если нам нужно подключиться к серверу базы данных MySQL, нам нужно разрешить трафик в брандмауэре.
Для этого нам нужно открыть порт 3306. Мы можем открыть порт, используя номер порта или имя службы.
Разрешить MySQL с определенного IP-адреса или подсети
Чтобы разрешить входящие соединения MySQL с определенного IP-адреса или подсети, мы используем команду
Здесь мы заменяем IP/подсеть требуемым IP-адресом или всей разрешенной подсетью.
Например, если мы хотим разрешить всю подсеть 1x.2x.1x.0/24, мы используем команду as,
Разрешить MySQL для определенного сетевого интерфейса
Аналогичным образом иногда нам требуется разрешить подключения MySQL к определенному сетевому интерфейсу.
В таких случаях мы используем следующую команду
Это упростит подключение MySQL к частному сетевому интерфейсу.
Например, если мы хотим разрешить частный сетевой интерфейс eth1. Используем команду
[Нужна дополнительная помощь, чтобы включить MySQL в UFW? Мы поможем вам.]
Заключение
Короче говоря, включение MySQL в UFW включает в себя открытие порта 3306. В сегодняшней статье мы обсудили, как наши инженеры службы поддержки разрешают подключение MySQL для определенного IP-адреса и интерфейса.
Похожие сообщения:
ЗАЩИТИТЕ ВАШ СЕРВЕР ОТ СБОЯ!
Никогда больше не теряйте клиентов из-за низкой скорости сервера! Позвольте нам помочь вам.
Наши специалисты по серверам будут контролировать и обслуживать ваш сервер круглосуточно и без выходных, чтобы он оставался молниеносно быстрым и безопасным.
Читайте также: