Вопрос: Как связать сервер MySQL с несколькими IP-адресами?


Существует ли секретный способ привязки MySQL к нескольким IP-адресам?

Насколько я вижу связывать-адрес параметр в my.cnf не поддерживает более одного IP-адреса, и вы не можете его использовать более одного раза.


239
2017-09-02 16:04


Источник




Ответы:


Нет, нет (я только что проверил 1 час назад). Вы можете прокомментировать адрес привязки в my.cnf:

#skip-networking
#bind-address                   = 127.0.0.1

Если вы хотите только 2 IP-адреса, вам придется использовать брандмауэр.


222
2017-09-02 16:08



Верный. Связывание ограничено либо 0, 1, либо все IP-адреса на сервере. - Joe
Обратите внимание, однако, что вы можете публиковать и обслуживать как локальный сокет unix, так и сетевой сокет, указав оба socket а также bind-address опции. - danorton
по-прежнему верны на сегодняшний день. - Dennis Nolte
Это смешно. - Phillipp
@AJP Mysql обрабатывает «localhost» и «127.0.0.1» по-разному в системе привилегий. Подтверждено здесь: Файл сокета Unix используется, если вы не укажете имя хоста или укажите специальное имя хоста localhost. - Christian Lescuyer


Связывание с 127.0.0.x не сделает его доступным для всех устройств, оно сделает его доступным только локально. Если вы хотите сделать его доступным для всех интерфейсов, вы должны использовать 0.0.0.0. Если вы хотите получить к нему доступ более чем из одного, но меньше всех интерфейсов, вы должны привязать к 0.0.0.0 и брандмауэру с интерфейсов, к которым вы не хотите получать доступ.

Кроме того, в качестве второго уровня безопасности вы должны убедиться, что все ваши пользователи MySQL имеют поле хоста, отличное от% (т.е. любого хоста).


74
2017-09-02 16:29



Если у вас нет сломанного сетевого стека, вы не можете привязать порт TCP к адресу 0.0.0.0. - John Gardeniers
Вы Можно привязать к 0.0.0.0. Вы просто не можете направить его. Если вы работаете в Linux (или даже в Windows, просто установите netcat для Windows), попробуйте: в одном терминале: nc -l 0.0.0.0 4321 и во втором терминале: telnet <IP любого интерфейса вашего компьютера> 4321 И это будет подключаться к нему. - Grey Panther
Как я уже сказал, если у вас нет разбитого сетевого стека ... - John Gardeniers
@JohnGardeniers Именно поэтому он находится в справочной странице linux ip (7), определенной по специальным адресам: INADDR_ANY (0.0.0.0) means any address for binding;? - ebyrob
В Debian создайте файл /etc/mysql/conf.d/bindaddress.cnf файл с контентом [mysqld] \n bind-address = 0.0.0.0 - Yves Martin


Вы не можете привязываться к нескольким IP-адресам, но вместо этого вы можете привязываться ко всем доступным IP-адресам. Если да, просто используйте 0.0.0.0 для адреса привязки в файле конфигурации MySQL (например, /etc/mysql/my.cnf) следующим образом:

bind-address    = 0.0.0.0

Если адрес 0.0.0.0, сервер принимает соединения TCP / IP на всех серверах IPv4-интерфейса.

Кроме того, если адрес ::, сервер принимает соединения TCP / IP на всех серверах IPv4 и IPv6-интерфейсов. Используйте этот адрес, чтобы разрешать соединения IPv4 и IPv6 на всех интерфейсах сервера.

Или вы можете просто прокомментировать bind-address= в целом, поэтому он будет привязан ко всем адресам. Но убедитесь, что у вас нет skip-networking включен в my.cnf, если вы хотите разрешить удаленные подключения (Read more: MySQL: Разрешить удаленные и локальные подключения).

После изменения адреса привязки не забудьте перезапустить сервер MySQL, выполнив следующие действия:

sudo service mysql restart

В конце концов вы можете рассмотреть возможность запуска нескольких экземпляров MySQL на одной машине (разные порты) с репликацией Master / Slave. Репликация позволяет копировать данные с одного сервера базы данных MySQL (мастер) на один или несколько серверов баз данных MySQL (подчиненных).

Прочитайте больше:


31
2017-08-11 09:37



На самом деле я надеялся на возможность привязки к некоторым, но не ко всем адресам. - BlaM


Нет, ты не можешь. На странице, на которую вы ссылаетесь, четко сказано:

IP-адрес для привязки. Можно выбрать только один адрес. Если эта опция задана несколько раз, используется последний адрес.

Если не указан адрес или 0.0.0.0, сервер прослушивает все интерфейсы.


18
2017-09-14 20:45





Как ответили другие, пока еще нет способа выборочно привязываться к нескольким интерфейсам.

В Linux есть некоторые инструменты TCP, которые делают это возможным. В этой настройке вы должны настроить mysql для прослушивания 127.0.0.1, а затем использовать REDIR чтобы разоблачить его на произвольных интерфейсах.

Я использовал это, чтобы помочь посетителю виртуального окна увидеть mysql, установленный на главной машине.

redir --laddr=192.168.33.1 --lport=3306 --caddr=127.0.0.1 --cport=3306 &

7
2018-02-24 20:23





Я думаю, что ваш вопрос связан с этой ошибкой http://bugs.mysql.com/bug.php?id=14979 Отчет об ошибках предлагает некоторое обходное решение.


6
2017-09-02 16:14



Запрос функции MySQL начиная с 2005 года! - Tonin


В my.cnf изменить (обычно /etc/mysql/my.cnf в Linux или для проверки Windows это ответ.

bind-address                   = 127.0.0.1

в

bind-address                   = 0.0.0.0

Затем перезапустите mysql (на Ubuntu перезагрузка службы mysql) на окнах обычно перезапуск службы через Win + R services.msc 

0.0.0.0 сообщает, что он связывается со всеми доступными IP-адресами с портом, также указанным в my.cnf


2
2017-09-19 18:34