Як прив’язати 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
Це смішно.
Філіпп


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 Це чомусь це на сторінці man lp 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 (підлеглих).

Детальніше:


Це чудово працює. Просто не забудьте перевірити, чи дозволено всім користувачам підключитися з тієї 2-ї, 3-ї, незалежно від IP-адреси
gies0r

21

Ні, ви не можете. На сторінці, на яку ви посилаєтесь, чітко зазначено:

IP-адреса, до якої потрібно прив’язатись. Можна вибрати лише одну адресу. Якщо цей параметр вказано кілька разів, використовується остання вказана адреса.

Якщо не вказана адреса або 0.0.0.0, сервер слухає всі інтерфейси.


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 &

Примітка. 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-адреса приймає одне значення як тільки описане, або список значень, розділених комами. Коли параметр називає список декількох значень, кожне значення повинно вказувати одну IP-адресу, яка не використовується підстановкою, або ім'я хоста; жоден не може вказати формат підстановки (*, 0.0.0.0 або: :).

Джерело: https://dev.mysql.com/doc/refman/8.0/en/server-options.html


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

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.