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

260

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

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

Бламу
источник

Ответы:

242

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

#skip-networking
#bind-address                   = 127.0.0.1

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

Кристиан Лескуйер
источник
31
Верный. Привязка ограничена 0, 1 или всеми IP-адресами на сервере.
Джо
7
Однако следует отметить, чем вы можете публиковать и обслуживать как локальный сокет UNIX и сетевой разъем, указав как socketи bind-addressварианты.
Данортон
5
все еще верно на сегодня.
Деннис Нольте
22
Это смешно.
Филипп
2
@AJP Mysql по-разному обрабатывает localhost и 127.0.0.1 в системе привилегий. Подтверждено здесь: Файл сокета Unix используется, если вы не указали имя хоста или если вы указали специальное имя хоста localhost.
Кристиан Лескиер
78

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

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

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

Вы не можете привязать более одного 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, если вы хотите разрешить и удаленные подключения (подробнее: MySQL: разрешить как удаленные, так и локальные подключения ).

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

sudo service mysql restart

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

Читать далее:

kenorb
источник
Это отлично работает. Просто не забудьте проверить, разрешено ли всем пользователям подключаться с этого 2-го, 3-го, с любого IP-адреса
gies0r
21

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

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

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

Andreas
источник
12

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

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

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

redir --laddr=192.168.33.1 --lport=3306 --caddr=127.0.0.1 --cport=3306 &
txyoji
источник
Примечание. MySQL> = 8.0.13 позволяет связывать более одного интерфейса.
txyoji
6

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


источник
Запрос на функцию MySQL, начиная с 2005 года!
Тонин
5

До MySQL 8.0.13 --bind-address принимает одно значение адреса, которое может указывать один не подстановочный IP-адрес или имя хоста, или один из форматов подстановочного адреса, который разрешает прослушивание на нескольких сетевых интерфейсах (*, 0.0 .0.0 или: :).

Начиная с MySQL 8.0.13, --bind-address принимает одно значение, как только что описано, или список значений, разделенных запятыми. Когда опция именует список из нескольких значений, каждое значение должно указывать один IP-адрес без подстановочного знака или имя хоста; никто не может указать формат адреса подстановочного знака (*, 0.0.0.0 или: :).

Источник: https://dev.mysql.com/doc/refman/8.0/en/server-options.html

Tadej
источник
3

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

bind-address                   = 127.0.0.1

в

bind-address                   = 0.0.0.0

Затем перезапустите mysql (при перезапуске сервиса Ubuntu mysql ) в Windows обычно перезапускайте сервис через Win + R services.msc

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

Александар Павич
источник