Linux удаленное подключение к mysql
Ниже расскажу о том, как настроить удаленное подключение к Linux серверу с установленным MySQL, представим ситуацию — есть два сервера, на одном планируется развернуть WEB сервер, на другом сервер БД, это хорошая практика, так сказать первый шаг к масштабируемой структуре, итак начнем.
О том, как настроить LAMP на RHEL рассказано здесь и здесь, касаться установки и базовой настройки служб не буду, представим, что эти этапы уже пройдены.
Разрешаем удаленное подключение к MySQL
Первым делом смотрим что прослушивает наш MySQL:
Обратим внимание на 0 0.0.0.0:3306 т.е. из состояния видно, что сервер «слушает» подключения, дабы разрешить удаленные подключения на стороне настроек MySQL, необходимо закомментировать параметр skip-networking и добавить параметр bind-address в раздел [mysqld] файла my.cnf:
где bind-address, адрес сервера на котором установлен MySQL, перед тем, как производить вышеуказанные действия необходимо убедиться, что хост нормально «видит» себя:
сохраняем файл, перезапускаем сервис mysql:
и проверяем состояние:
отлично, далее необходимо создать базу и разрешить к ней подключение, как это сделать расскажу на примере phpMyAdmin, после входа в административную часть phpMyAdmin необходимо перейти на вкладку Privileges и добавить пользователя mysql — Add user, в данном случае интересует параметр Host, в выпадающем списке необходимо выбрать Use text field и указать IP адрес WEB сервера или сервера с которого будет производиться подключение к БД, подобные действия из терминала:
Создать базу и дать привилегии из терминала mysql
Дать привилегии к существующей базе mysql из терминала
Разрешить доступ с любого хоста ко всем базам на сервере
Разрешить удаленные подключения к MySQL в Iptables
Проверка удаленного подключения к MySQL
Проверяем прослушку порта 3306 на сервере БД:
Примечание: перед проверкой не забываем проверить настройки файервола на БД сервере
Если сервер не отклоняет запрос, пытаемся произвети подключитение к серверу из-под пользователя user:
Если подключение происходит нормально, перенастраиваем подключение к БД на своей CMS.
Комментарии
Ты не так понял приведенную фразу, дабы избежать двумыслия, я перефразировал тот параграф.
MySql настройка удаленного доступа (Ubuntu Linux)
По умолчанию MySql настроен таким образом, что к нему разрешены подключения только с локальной машины, следовательно, подключиться из-вне (по интернет или локальной сети) не получится.
Чтобы настроить удаленный доступ к MySql (настройка производится на операционной системе Ubuntu Linux и может отличаться для других ОС) необходимо отредактировать файл с настройками (конфигурационный файл). Обычно он располагается по пути /etc/mysql и называется my.cnf, хотя бывают и другие настройки.
Чтобы отредактировать файл с настройками MySql необходимо выполнить следующую команду:
Если файл с настройками находится по пути /etc/mysql/mysql.conf.d/ и называется mysqld.cnf, тогда так:
Далее необходимо найти такую строку в открытом файле:
В данной строке указывается, с каких адресов разрешено подключение к MySql, в данном случае только с адреса 127.0.0.1, то есть с локальной машины (127.0.0.1 = localhost). Для того, чтобы открыть доступ к нужному IP, его нужно прописать вместо 127.0.0.1. Если необходим доступ с любого адреса, то написать как показано ниже.
После замены настроет bind-address MySql, его необходимо перезапустить:
Теперь нужной подключиться к MySql с паролем суперпользователя:
После подключения к MySql нужно создать пользователя и дать привилегию, например:
В данном случае дается полный доступ к базе данных userdatabase пользователю с логином user и паролем password, подключающемуся с IP 192.168.0.10.
Если необходимо разрешить доступ ко всем базам, то вместо имени базы данных пишется знак *, если необходимо разрешить доступ с любого IP, то вместо IP адреса пишется знак %. Ниже представлен пример, разрешающий пользователю user полный доступ ко всем базам данных с любого IP.
Данная инсрукция справедлива и для других linux дистрибутивах, основанных на debian.
Настройка удаленного подключения к MySQL
Материал статьи предназначен для начинающих, профессионалы Хабра в большинстве не нуждаются в изложении этого вопроса. Тем не менее, те, кто делает первые шаги в работе с MySQL часто задают подобные вопросы. Статья написан для тех, кто впервые столкнулся с необходимостью установить удаленное соединение с базой данных MySQL. В статье рассказывается о сложностях, которые могут возникнуть при настройке удаленного соединения и о методах их преодоления.
Как установить соединение с удаленной базой?
Для установления удаленного соединения нужно указать параметры, характеризующие устанавливаемое подключение. Это
- —host
- —protocol
- —port
Из четырех возможных протоколов удаленное подключение позволяет только TCP/IP, поэтому первым требованием является доступность компьютера из сети по TCP/IP.
Далее необходимо добавить имя хоста (или ip адрес машины, на которой расположена база) в строке подключения:
mysql —host=host_name
Обратите внимание, что указание в качестве имени хоста значения localhost (или же отсутствие такого параметра, что то же самое, так как это дефолтное значение) приводит к обращению на локальную машину.
Учтите, что параметры имеют две формы записи: длинную и короткую. В свою очередь, если параметр имеет значение (как например, в случае хоста необходимо указать имя хоста к которому нужно подключиться), то короткая форма записи может использоваться с пробелом или без (исключением из этого правила является пароль).
Таким образом, следующие три записи являются эквивалентными:
- mysql —host=myhost.ru
- mysql -h myhost.ru
- mysql -hmyhost.ru
Как настроить соединение с удаленной базой?
В MySQL пользователь характеризуется двумя параметрами: именем и хостом, с которого он может обращаться. По умолчанию доступ разрешен только с локальной машины, т.е. для пользователя user@localhost. Права на доступ пользователям даются с помощью команды GRANT. Команда выполняется под рутом.
Например, если я хочу создать юзера, который сможет коннектиться с любого хоста с полными правами, то следует выполнить следующую команду:
GRANT ALL PRIVILEGES ON `имя_базы`.* TO myuser@% IDENTIFIED BY ‘пароль’;
Примечание. Обратите внимание, что данная команда дает доступ пользователю myuser со всех IP кроме 127.0.0.1, соответсвующего localhost.
Для пользователя myuser@localhost необходимо давать права отдельной командой GRANT.
Если вы решите обратиться к локальной машине как к удаленной, используя протокол TCP/IP, то не забывайте, что myuser@localhost и myuser@ip_собственного_компа это разные пользователи и каждому из них права нужно давать отдельной командой.
Второй пример показывает как дать право читать таблицу time_zone в базе mysql пользователю myuser с машины 192.168.0.76
с паролем mypassy:
GRANT SELECT ON mysql.time_zone TO myuser@192.168.0.76 IDENTIFIED BY ‘mypassy’;
Возникающие сложности
Если после всех действий у вас возникает ошибка
(Can’t connect to Mysql Server on ‘ваш IP'(10061)),
значит соединение блокирует firewall (windows firewall, outpost, антивирус или еще что-то).
Если возникает ошибка
(Client does not support autentification protocol request by server; consider upgrading MySQL client), клиент (то есть ваша программа) не поддерживает требуемый сервером протокол.
Эту ошибку можно исправить, установив пароль старого формата:
SET PASSWORD FOR user@host = OLD_PASSWORD(‘password’);
Настройка удаленного доступа MySQL и MariaDB в Linux Ubuntu
По умолчанию сервер MySQL настроен таким образом, что к нему разрешены подключения только с локальной машины, следовательно, подключиться из-вне (по интернет или локальной сети) не получится.
Убедиться в этом можно набрав на сервере команду:
В результате получите что-то типа этого:
Отсюда видно, что mysql слушает только интерфейс localhost (127.0.0.1). Это не всегда удобно, особенно когда есть необходимость выделить под сервер mysql отдельный сервер. А в рамках корпоративной локальной сети такое бывает очень часто.
Чтобы разрешить серверу MySQL принимать запросы из-вне необходимо предпринять несколько несложных шагов:
- Поменять одну строчку в конфигурационном файле MySQL;
- Создать сетевого пользователя с необходимыми правами.
Разрешаем MySQL слушать интерфейс, который смотрит во внешнюю сеть
Открываем конфигурационный файл любимы редактором, например nano, из под привилегированного пользователя:
Если у вас установлен сервер mariaDB, то конфигурационный файл находится в другом месте:
и меняем 127.0.0.1 на 0.0.0.0 — тогда сервер будет слушать все интерфейсы компьютера, либо задаем конкретный ip-адрес локального интерфейса, который смотрит в локальную сеть. Например — 192.168.122.10.
Теперь остается только перезапустить сервис MySQL:
Теперь осталось только завести пользователя, которому разрешено обращаться к серверу MySQL извне.
Создание внешнего пользователя MySQL
Теперь нужной подключиться к MySql с паролем суперпользователя системы (системы. а не MySQL):
После подключения к MySQL можно создать пользователя и дать привилегию, например:
Здесь дается полный доступ к базе данных userdata пользователю с логином user и паролем password, подключающемуся с любого ip.
Можно ограничить права пользователя, разрешив ему подключаться к базе только с определенного ip. Для этого меняем % на конкретный ip-адрес, например 192.168.122.16
А можно и разрешить пользователю всё — подключаться ко всем базам с любого ip-адреса
Это делать не желательно, если конечно вы не заводите себя.