Làm cách nào để liên kết máy chủ MySQL với nhiều địa chỉ IP?


260

Có cách nào bí mật để liên kết MySQL với nhiều hơn một địa chỉ IP không?

Theo như tôi có thể thấy tham số địa chỉ liên kết trong my.cnf không hỗ trợ nhiều hơn một IP và bạn không thể có nhiều hơn một lần.

Câu trả lời:


242

Không, không có (tôi mới kiểm tra 1 giờ trước). Bạn có thể nhận xét địa chỉ liên kết trong my.cnf:

#skip-networking
#bind-address                   = 127.0.0.1

Nếu bạn chỉ muốn 2 IP, thì bạn sẽ phải sử dụng tường lửa.


31
Chính xác. Ràng buộc được giới hạn ở 0, 1 hoặc tất cả các địa chỉ IP trên máy chủ.
Joe

7
Tuy nhiên, lưu ý rằng bạn có thể xuất bản và phục vụ cả ổ cắm unix cục bộ và ổ cắm mạng bằng cách chỉ định cả hai tùy chọn socketbind-address.
danorton

5
vẫn đúng như ngày nay.
Dennis Nolte

22
Điều đó thật nực cười.
Phillipp

2
@AJP Mysql đối xử với 'localhost' và '127.0.0.1' khác nhau trong hệ thống đặc quyền. Xác nhận ở đây: Tệp ổ cắm Unix được sử dụng nếu bạn không chỉ định tên máy chủ hoặc nếu bạn chỉ định tên máy chủ lưu trữ đặc biệt localhost.
Christian Lescuyer

78

Liên kết với 127.0.0.x sẽ không cung cấp cho tất cả các thiết bị, nó sẽ chỉ khả dụng ở địa phương. Nếu bạn muốn làm cho nó có sẵn cho tất cả các giao diện, bạn nên sử dụng 0.0.0.0. Nếu bạn muốn truy cập nó từ nhiều hơn một, nhưng ít hơn tất cả các giao diện, bạn nên liên kết với 0.0.0.0 và tường lửa khỏi các giao diện mà bạn không muốn truy cập thông qua.

Ngoài ra, là lớp bảo mật thứ hai, bạn nên đảm bảo rằng tất cả người dùng MySQL của bạn có trường máy chủ được đặt thành một cái gì đó không phải là% (tức là bất kỳ máy chủ nào).


1
Trừ khi bạn có một ngăn xếp mạng bị hỏng, bạn không thể liên kết một cổng TCP với địa chỉ 0.0.0.0.
John Gardeniers

26
Bạn có thể liên kết với 0.0.0.0. Bạn không thể định tuyến đến nó. Nếu bạn đang dùng Linux (hoặc thậm chí trên Windows, chỉ cần cài đặt netcat cho windows) hãy thử: trong một thiết bị đầu cuối: nc -l 0.0.0.0 4321 và trong thiết bị đầu cuối thứ hai: telnet <IP của bất kỳ giao diện nào máy tính của bạn có> 4321 Và nó sẽ kết nối với nó.
Grey Panther

Như tôi đã nói, trừ khi bạn có một ngăn xếp mạng bị hỏng ...
John Gardeniers

1
@JohnGardeniers Có phải đó là lý do tại sao trang con người linux ip (7) được xác định theo địa chỉ đặc biệt : INADDR_ANY (0.0.0.0) means any address for binding;?
ebyrob

2
Trên Debian, tạo một tệp /etc/mysql/conf.d/bindaddress.cnftệp có nội dung[mysqld] \n bind-address = 0.0.0.0
Yves Martin

41

Bạn không thể liên kết với nhiều hơn một địa chỉ IP, nhưng thay vào đó bạn có thể liên kết với tất cả các địa chỉ IP có sẵn. Nếu vậy, chỉ cần sử dụng 0.0.0.0cho một địa chỉ ràng buộc trong tệp cấu hình MySQL của bạn (ví dụ: /etc/mysql/my.cnf) như sau:

bind-address    = 0.0.0.0

Nếu địa chỉ là 0.0.0.0, máy chủ chấp nhận kết nối TCP / IP trên tất cả các giao diện IPv4 của máy chủ lưu trữ.

Hơn nữa, nếu địa chỉ là ::, máy chủ chấp nhận kết nối TCP / IP trên tất cả các máy chủ lưu trữ giao diện IPv4 và IPv6. Sử dụng địa chỉ này để cho phép cả kết nối IPv4 và IPv6 trên tất cả các giao diện máy chủ.

Hoặc bạn chỉ có thể bình luận bind-address=hoàn toàn, vì vậy nó sẽ liên kết với tất cả các địa chỉ. Nhưng hãy chắc chắn rằng bạn không skip-networkingkích hoạt trong my.cnf của mình nếu bạn cũng muốn cho phép kết nối từ xa (Đọc thêm: MySQL: Cho phép cả kết nối từ xa VÀ cục bộ ).

Sau khi thay đổi địa chỉ liên kết, đừng quên khởi động lại máy chủ MySQL của bạn bằng cách:

sudo service mysql restart

Cuối cùng, bạn có thể xem xét để chạy nhiều phiên bản MySQL trên một máy (các cổng khác nhau) với bản sao Master / Slave. Sao chép cho phép dữ liệu từ một máy chủ cơ sở dữ liệu MySQL (chính) được sao chép sang một hoặc nhiều máy chủ cơ sở dữ liệu MySQL (nô lệ).

Đọc thêm:


Điều này hoạt động tốt. Chỉ cần nhớ kiểm tra xem tất cả người dùng có được phép kết nối từ ngày 2, 3 đó không, bất kỳ địa chỉ IP nào
gies0r

21

Không, bạn không thể. Trang bạn liên kết đến các trạng thái rõ ràng:

Địa chỉ IP để liên kết. Chỉ có một địa chỉ có thể được chọn. Nếu tùy chọn này được chỉ định nhiều lần, địa chỉ cuối cùng được cung cấp sẽ được sử dụng.

Nếu không có địa chỉ hoặc 0.0.0.0 được chỉ định, máy chủ sẽ lắng nghe trên tất cả các giao diện.


12

Như những người khác đã trả lời, vẫn chưa có cách nào để liên kết có chọn lọc với nhiều giao diện.

Linux có một số công cụ TCP làm cho nó có thể. Trong thiết lập này, bạn định cấu hình mysql để nghe trên 127.0.0.1 và sau đó sử dụng chuyển hướng để hiển thị trên các giao diện tùy ý.

Tôi đã sử dụng điều này để giúp một vị khách hộp ảo thấy mysql được cài đặt trên máy chủ.

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

Lưu ý MySQL> = 8.0.13 cho phép liên kết với nhiều giao diện.
txyoji

6

Tôi nghĩ rằng câu hỏi của bạn có liên quan đến lỗi này http://bugs.mysql.com/orms.php?id=14979 Báo cáo lỗi đề xuất một số cách giải quyết.


Một yêu cầu tính năng MySQL có từ năm 2005!
Tonin

5

Trước MySQL 8.0.13, địa chỉ - chấp nhận một giá trị địa chỉ duy nhất, có thể chỉ định một địa chỉ IP hoặc tên máy chủ không phải ký tự đại diện hoặc một trong các định dạng địa chỉ ký tự đại diện cho phép nghe trên nhiều giao diện mạng (*, 0.0 .0.0 hoặc: :).

Kể từ MySQL 8.0.13, địa chỉ --bind chấp nhận một giá trị như được mô tả hoặc danh sách các giá trị được phân tách bằng dấu phẩy. Khi tùy chọn đặt tên cho một danh sách gồm nhiều giá trị, mỗi giá trị phải chỉ định một địa chỉ IP không phải ký tự đại diện hoặc tên máy chủ; không ai có thể chỉ định định dạng địa chỉ ký tự đại diện (*, 0.0.0.0 hoặc: :).

Nguồn: https://dev.mysql.com/doc/refman/8.0/en/server-options.html


3

Trong thay đổi my.cnf (thường là /etc/mysql/my.cnf trên Linux hoặc cho windows kiểm tra câu trả lời này .

bind-address                   = 127.0.0.1

đến

bind-address                   = 0.0.0.0

Sau đó khởi động lại mysql (trên dịch vụ Ubuntu khởi động lại mysql ) trên windows thường khởi động lại dịch vụ thông qua Win + R services.msc

0.0.0.0 bảo nó liên kết với tất cả các IP có sẵn với cổng cũng được đưa ra trong my.cnf

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.