- Как разрешить удаленные подключения к серверу базы данных MySQL
- Настройка сервера MySQL
- Предоставление доступа пользователю с удаленного компьютера
- Настройка межсетевого экрана
- Iptables
- БрандмауэрD
- Проверка изменений
- Выводы
- Поднять удаленный доступ к MySQL
- Как разрешить удаленные подключения к серверу базы данных MySQL
- Настройка MySQL Server
- Предоставление доступа пользователю с удаленного компьютера
- Настройка брандмауэра
- Iptables
- FirewallD
- Проверка изменений
- Заключение
Как разрешить удаленные подключения к серверу базы данных MySQL
По умолчанию сервер MySQL прослушивает соединения только с localhost, что означает, что к нему могут получить доступ только приложения, работающие на том же хосте.
Однако в некоторых ситуациях необходимо получить доступ к серверу MySQL из удаленного места. Например, если вы хотите подключиться к удаленному серверу MySQL из вашей локальной системы, или при использовании многосерверного развертывания, когда приложение выполняется на другом компьютере, чем сервер базы данных. Один из вариантов — получить доступ к серверу MySQL через туннель SSH, а другой — настроить сервер MySQL на прием удаленных подключений.
В этом руководстве мы рассмотрим шаги, необходимые для разрешения удаленных подключений к серверу MySQL. Те же инструкции применимы и для MariaDB.
Настройка сервера MySQL
Первый шаг — настроить сервер MySQL на прослушивание определенного IP-адреса или всех IP-адресов на машине.
Если сервер MySQL и клиенты могут связываться друг с другом через частную сеть, то лучшим вариантом будет настроить сервер MySQL на прослушивание только частного IP-адреса. В противном случае, если вы хотите подключиться к серверу через общедоступную сеть, настройте сервер MySQL на прослушивание всех IP-адресов на машине.
Для этого вам необходимо отредактировать файл конфигурации MySQL и добавить или изменить значение параметра bind-address . Вы можете установить один IP-адрес и диапазоны IP-адресов. Если адрес 0.0.0.0 , сервер MySQL принимает соединения на всех интерфейсах хоста IPv4. Если в вашей системе настроен IPv6, то вместо 0.0.0.0 используйте :: .
Расположение файла конфигурации MySQL отличается в зависимости от дистрибутива. В Ubuntu и Debian файл находится по адресу /etc/mysql/mysql.conf.d/mysqld.cnf , а в дистрибутивах на основе Red Hat, таких как CentOS, файл находится по адресу /etc/my.cnf .
Найдите строку, которая начинается с bind-address и установите ее значение равным IP-адресу, который сервер MySQL должен прослушивать.
По умолчанию установлено значение 127.0.0.1 (прослушивается только на localhost).
В этом примере мы настроим сервер MySQL для прослушивания всех интерфейсов IPv4, изменив значение на 0.0.0.0
Если есть строка, содержащая skip-networking , удалите ее или закомментируйте, добавив # в начале строки.
В MySQL 8.0 и выше директива bind-address может отсутствовать. В этом случае добавьте его в раздел [mysqld] .
После этого перезапустите службу MySQL, чтобы изменения вступили в силу. Только root или пользователи с привилегиями sudo могут перезапускать службы.
Чтобы перезапустить службу MySQL в Debian или Ubuntu, введите:
В дистрибутивах на основе RedHat, таких как CentOS, для перезапуска службы выполните:
Предоставление доступа пользователю с удаленного компьютера
Следующим шагом будет разрешение доступа к базе данных удаленному пользователю.
Войдите на сервер MySQL как пользователь root, набрав:
Если вы используете старый собственный плагин аутентификации MySQL для входа в систему как root, выполните приведенную ниже команду и введите пароль при появлении запроса:
Изнутри оболочки MySQL используйте оператор GRANT чтобы предоставить доступ удаленному пользователю.
- database_name — это имя базы данных, к которой будет подключаться пользователь.
- user_name — это имя пользователя MySQL.
- ip_address — это IP-адрес, с которого пользователь будет подключаться. Используйте % чтобы разрешить пользователю подключаться с любого IP-адреса.
- user_password — пароль пользователя.
Например, чтобы предоставить доступ к базе данных dbname пользователю с именем foo с паролем my_passwd с клиентского компьютера с IP 10.8.0.5 , вы должны запустить:
Настройка межсетевого экрана
Последний шаг — настроить брандмауэр, чтобы разрешить трафик на порт 3306 (порт по умолчанию MySQL) с удаленных машин.
Iptables
Если вы используете iptables в качестве брандмауэра, приведенная ниже команда разрешит доступ с любого IP-адреса в Интернете к порту MySQL. Это очень небезопасно.
Разрешить доступ с определенного IP-адреса:
UFW — это брандмауэр по умолчанию в Ubuntu. Чтобы разрешить доступ с любого IP-адреса в Интернете (очень небезопасно), запустите:
Разрешить доступ с определенного IP-адреса:
БрандмауэрD
FirewallD — это инструмент управления брандмауэром по умолчанию в CentOS. Чтобы разрешить доступ с любого IP-адреса в Интернете (очень небезопасно), введите:
Чтобы разрешить доступ с определенного IP-адреса через определенный порт, вы можете создать новую зону FirewallD или использовать расширенное правило. Итак, создайте новую зону с именем mysqlzone :
Проверка изменений
Чтобы убедиться, что удаленный пользователь может подключиться к серверу MySQL, выполните следующую команду:
Где user_name — это имя пользователя, mysql_server_ip вы предоставили доступ, а mysql_server_ip — это IP-адрес хоста, на котором работает сервер MySQL.
Если все настроено правильно, вы сможете войти на удаленный сервер MySQL.
Если вы получаете сообщение об ошибке, подобное приведенному ниже, то либо порт 3306 не открыт , либо сервер MySQL не прослушивает IP-адрес .
Приведенная ниже ошибка указывает на то, что пользователь, которого вы пытаетесь войти в систему, не имеет разрешений на доступ к удаленному серверу MySQL.
Выводы
MySQL, самый популярный сервер баз данных с открытым исходным кодом по умолчанию, прослушивает входящие соединения только на localhost.
Чтобы разрешить удаленные подключения к серверу MySQL, вам необходимо выполнить следующие шаги:
- Настройте сервер MySQL для прослушивания всего или определенного интерфейса.
- Разрешите доступ удаленному пользователю.
- Откройте порт MySQL в вашем брандмауэре.
Если у вас есть вопросы, не стесняйтесь оставлять комментарии ниже.
Источник
Поднять удаленный доступ к MySQL
Хочу поднять доступ к мускулю, крутящемуся на локалхосте с домашнего же нетбука.
Начинаю делать так: В /etc/mysql/my.cnf в секции [mysqld] комментирую строчку
После этого перезапускаю mysql командой
Смотрим в логи, а там такое:
В чем проблема, как поправить?
Пробовал перевесить на другой порт (изменив строчку port в секциях [client] и [mysqld] . Также пробовал указать явную возможность подключения для рута с указанного айпишника. Результат идентичный.
UPD.
Чуть не забыл: дистр — Ubuntu 14.04
If you intend to bind the server to a specific address, be sure that the mysql.user grant table contains an account with administrative privileges that you can use connect to that address. Otherwise, you will not be able to shut down the server.
Также пробовал указать явную возможность подключения для рута с указанного айпишника
Напиши 0.0.0.0, а доступ режь фаерволом.
Работает, да. Но выглядит не очень. Не поверю, что по-другому нельзя. Или это какой-то баг MySQL?
По-моему, как раз так логичнее — сервисы слушают на всех адресах, а все разрешения относительно сети разруливаются в фаерволе.
У mysql к пользователю прилагается разрешённая подсеть, так что если биндишь только к внешнему адресу, у утилит для контроля службы могут возникнуть проблемы. Постгресовский pg_hba.conf мне больше нравится.
Как вариант — биндить на внешний ip и на 127.0.0.1
Ну, может быть. Все, я не спец, так что молчу.
Как вариант — биндить на внешний ip и на 127.0.0.1
То есть написать
А можно? Он ругаться не будет?
Вроде через запятую. Уточни в man-е (или просто попробуй).
Но вообще 0.0.0.0 логичнее в твоём случае. IP выданный роутером не обязан быть статичным, и едва-ли помимо визического интерфейса и lo на твоём локалхосте есть другие интерфейсы (при-чём таки от которых mysql хотелось-бы оградить).
140609 21:23:36 [ERROR] Can’t start server: Bind on TCP/IP port: Cannot assign requested address 140609 21:23:36 [ERROR] Do you already have another mysqld server running on port: 3306 ?
Посмотреть что висит на 3306
IP выданный роутером не обязан быть статичным
Это понятно, просто я хочу сегодня-завтра БД на VPS-ке поднять. Надо на локалхосте потренироваться, чтобы там дров не наломать.
Вроде через запятую. Уточни в man-е (или просто попробуй).
The MySQL server listens on a single network socket for TCP/IP connections. This socket is bound to a single address, but it is possible for an address to map onto multiple network interfaces. The default address is 0.0.0.0. To specify an address explicitly, use the —bind-address=addr option at server startup, where addr is an IPv4 address or a host name. If addr is a host name, the server resolves the name to an IPv4 address and binds to that address. The server treats different types of addresses as follows:
If the address is 0.0.0.0, the server accepts TCP/IP connections on all server host IPv4 interfaces. If the address is a «regular» IPv4 address (such as 127.0.0.1), the server accepts TCP/IP connections only for that particular IPv4 address.
Проверял же. Даже порт менял. Если мускуль не запущен, то там пусто. То есть меняю my.cnf, останавливаю мускуль. 3306 свободен. Запускаю service mysql start и ничего не происходит. При этом первое же сообщение об ошибке — именно такое, какое я указал. Впрочем, как и все остальные. То есть, по идее, порт не занят, айпишник валидный, но мускулю что-то не нравится.
Это понятно, просто я хочу сегодня-завтра БД на VPS-ке поднять. Надо на локалхосте потренироваться, чтобы там дров не наломать.
А зачем тебе на VPS доступ к mysql извне? Админить и через ssh можно без проблем. Или VPS чисто под БД?
Не, не админить, моя прога должна получать оттуда данные, ну и отсылать их туда. Так-то я и так туда по ssh хожу.
Ну хз тогда. Может убунтопатчи какие то.
Можно попробовать снести с конфигами (—purge), и поставить заново, проверить апдейты также.
Я не совсем прав, ругаться не будет, но использовать станет только последний из перечисленных. Суда по написанному по ссылке выше, тебе надо завести root@’%ip%’ и debian-sys-maint@’%ip’ и тем же паролем, что и у нормального debian-sys-maint.
Или всё-таки биндить к *(ipv4+ipv6) или 0.0.0.0(ipv4), а подключения фильтровать в iptables. Вообще, выставлять сервис голой жопой в интернет нехорошо. Хотя бы SSL к нему прикрути
Источник
Как разрешить удаленные подключения к серверу базы данных MySQL
Главное меню » Базы данных » База данных MySQL » Как разрешить удаленные подключения к серверу базы данных MySQL
Однако в некоторых ситуациях необходимо разрешить удаленные подключения. Например, когда вы хотите подключиться к удаленному серверу MySQL из вашей локальной системы, или когда вы используете многосерверное развертывание, когда приложение работает на компьютере, отличном от сервера базы данных.
В этой статье мы рассмотрим шаги, необходимые для разрешения удаленных подключений к серверу MySQL. То же самое относится и к MariaDB.
Настройка MySQL Server
Первый шаг – настроить сервер MySQL на прослушивание определенного IP-адреса или всех IP-адресов на компьютере.
Если сервер MySQL и клиенты могут взаимодействовать друг с другом через частную сеть, то лучшим вариантом будет настроить сервер MySQL на прослушивание только по частному IP. В противном случае, если вы хотите подключиться к серверу через общедоступную сеть, настройте сервер MySQL на прослушивание всех IP-адресов на компьютере.
Для этого вам нужно отредактировать файл конфигурации MySQL и добавить или изменить значение опции bind-address. Вы можете установить один IP-адрес и IP-диапазоны. Если адрес есть 0.0.0.0, сервер MySQL принимает соединения на всех интерфейсах IPv4 хоста. Если в вашей системе настроен IPv6 0.0.0.0, используйте вместо .
Расположение файла конфигурации MySQL зависит от дистрибутива. В Ubuntu и Debian файл находится по адресу /etc/mysql/mysql.conf.d/mysqld.cnf, в то время как в дистрибутивах на основе Red Hat, таких как CentOS, файл находится по адресу /etc/my.cnf.
Откройте файл в текстовом редакторе :
Найдите строку, которая начинается с bind-address и установите в качестве значения IP-адрес, который должен прослушивать сервер MySQL.
По умолчанию установлено значение 127.0.0.1 (прослушивается только на локальном хосте).
В этом примере мы настроим сервер MySQL на прослушивание всех интерфейсов IPv4, изменив значение на 0.0.0.0
mysqld.cnf
Если есть строка, содержащая skip-networking, удалите ее или закомментируйте, добавив # в начале строки.
В MySQL 8.0 и выше директива bind-address может отсутствовать. В этом случае добавьте ее в разделе [mysqld].
После этого перезапустите службу MySQL, чтобы изменения вступили в силу. Только root или пользователи с привилегиями sudo могут перезапускать сервисы.
Чтобы перезапустить службу MySQL в Debian или Ubuntu, введите:
В дистрибутивах на основе RedHat, таких как CentOS, для перезапуска службы выполните:
Предоставление доступа пользователю с удаленного компьютера
Следующим шагом является предоставление доступа к базе данных удаленному пользователю.
Войдите на сервер MySQL от имени пользователя root, введя:
Если вы используете старый плагин аутентификации MySQL для входа в систему от имени пользователя root, введите команду ниже и введите пароль при появлении запроса:
Внутри оболочки MySQL используйте GRANTоператор для предоставления доступа удаленному пользователю.
- database_name – Имя базы данных, к которой будет подключаться пользователь.
- user_name – это имя пользователя MySQL.
- ip_address – это IP – адрес , с которого пользователь будет подключаться. Используйте, %чтобы позволить пользователю подключаться с любого IP-адреса.
- user_password – это пароль пользователя.
Например, чтобы предоставить доступ к базе данных dbname пользователю с именем andreyex с паролем my_passwd с клиентского компьютера с IP 10.8.0.5, вы должны выполнить:
Настройка брандмауэра
Последний шаг – настройка брандмауэра для разрешения трафика через порт 3306( порт MySQL по умолчанию) с удаленных компьютеров.
Iptables
Если вы используете iptables в качестве брандмауэра, команда ниже разрешит доступ с любого IP-адреса в Интернете к порту MySQL. Это очень небезопасно.
Разрешить доступ с определенного IP-адреса:
UFW – это инструмент брандмауэра по умолчанию в Ubuntu. Чтобы разрешить доступ с любого IP-адреса в Интернете (очень небезопасно), выполните:
Разрешить доступ с определенного IP-адреса:
FirewallD
FirewallD является инструментом управления брандмауэром по умолчанию в CentOS. Чтобы разрешить доступ с любого IP-адреса в Интернете (очень небезопасно), введите:
Чтобы разрешить доступ с определенного IP-адреса на конкретном порту, вы можете создать новую зону FirewallD или использовать расширенное правило. Хорошо создайте новую зону с именем mysqlzone:
Проверка изменений
Чтобы убедиться, что удаленный пользователь может подключиться к серверу MySQL, выполните следующую команду:
Где user_name имя пользователя, которому вы предоставили доступ и mysql_server_ip, IP-адрес хоста, на котором работает сервер MySQL.
Если все настроено правильно, вы сможете войти на удаленный сервер MySQL.
Если вы получаете сообщение об ошибке, как показано ниже, либо порт 3306 не открыт, либо сервер MySQL не прослушивает IP-адрес.
Приведенная ниже ошибка указывает на то, что пользователь, которому вы пытаетесь войти, не имеет прав доступа к удаленному серверу MySQL.
Заключение
MySQL, самый популярный сервер баз данных с открытым исходным кодом по умолчанию, прослушивает входящие соединения только на локальном хосте.
Чтобы разрешить удаленные подключения к серверу MySQL, вам необходимо выполнить следующие шаги:
- Настройте сервер MySQL для прослушивания всего или определенного интерфейса.
- Предоставьте доступ удаленному пользователю.
- Откройте порт MySQL в вашем брандмауэре.
Если у вас есть вопросы, не стесняйтесь оставлять комментарии ниже.
Если вы нашли ошибку, пожалуйста, выделите фрагмент текста и нажмите Ctrl+Enter.
Источник