Không thể truy cập từ xa máy chủ MySQL chạy trên Mac OS X


11

Tôi có một máy chủ MySQL chạy trên máy tính làm việc của tôi, chạy Mac OS X Maverick. Tôi muốn truy cập nó từ máy tính ở nhà, cũng có Mac OS Maverick.

Từ thiết bị đầu cuối, nếu trong 1 tab, tôi ssh vào máy tính làm việc của mình và chỉ cần để phiên ssh ở đó mà không bị nhàn rỗi, thì trên tab khác, tôi có thể truy cập máy chủ MySQL.

Tuy nhiên, không có phiên ssh đang chạy, tôi sẽ gặp lỗi sau

ERROR 2003 (HY000): Không thể kết nối với máy chủ MySQL trên 'SERVER_IP_ADDRESS' (60)

Tôi đã cố gắng sửa đổi my.cnftệp trên máy chủ bằng cách nhận xét địa chỉ liên kết hoặc gán nó cho 0.0.0.0nhưng nó không hoạt động.

Tại sao nó lại như vậy? Làm cách nào tôi có thể định cấu hình máy chủ để nó cho phép truy cập từ xa mà không phải chạy ssh trên máy khách? Ai đó có thể vui lòng giúp đỡ?


Tôi có cùng một vấn đề với PostGIS chạy trên OS X từ xa ... có thể kết nối với cơ sở dữ liệu khi sshđược mở trong một tab, nhưng nếu không thì không. Tôi nghĩ vấn đề là quá trình máy chủ cơ sở dữ liệu bị tạm dừng hoặc không chạy khi tôi không đăng nhập vào máy chủ từ xa.
andybega

Câu trả lời:


20

Hôm nay tôi đã đập đầu vào lỗi này trên OSX Yosemite với MySQL 5.7 được cập nhật gần đây với Homebrew. Theo các đề xuất trên StackOverflow và các nơi khác, tôi đã tìm kiếm xung quanh my.cnfcác tệp được chỉ định bind-address=0.0.0.0. Tôi thậm chí đã gỡ bỏ và cài đặt lại MySQL theo các hướng dẫn này và sau đó cài đặt lại bằng cách sử dụng brew install mysql. Vẫn không cho phép kết nối từ xa.

Mãi cho đến khi tôi chạy ps -ax | grep mysqlvà nhận thấy rằng địa chỉ liên kết đã được thông qua trong lệnh khởi chạy (do đó ghi đè bất kỳ my.cnftệp nào ) mà tôi đã đào thêm một số thứ và phát hiện ra rằng Homebrew liên kết MySQL với 127.0.0.1 theo mặc định .

Chỉnh sửa ~/Library/LaunchAgents/homebrew.mxcl.mysql.plistđể thay đổi --bind-address=127.0.0.1để --bind-address=0.0.0.0giải quyết vấn đề của tôi (nên thay đổi địa chỉ IP thành một địa chỉ IP cụ thể nếu đây không chỉ là một máy phát triển).

Tôi cảm thấy đây là một thông tin quan trọng còn thiếu từ hầu hết các tài nguyên mà tôi đã tham khảo vì vậy hy vọng việc đăng bài này ở đây sẽ giúp được người khác!

EDIT: Như LeandroCR đã chỉ ra trong các bình luận, việc chạy brew services restart mysqlsẽ ghi đè lên tệp plist trong LaunchAgents với mặc định, dẫn đến việc MySQL từ chối một cách bí ẩn các kết nối một lần nữa. Vì vậy, lời khuyên tốt hơn so với những gì tôi viết ban đầu là như sau:

  1. Chỉnh sửa /usr/local/Cellar/mysql/<yourversion>/homebrew.mxcl.mysql.plistvà thay thế --bind-address=127.0.0.1bằng bind-address=*hoặc --bind-address=0.0.0.0( xem tài liệu MySQL về địa chỉ liên kết )
  2. Khởi động lại mysql bằng cách sử dụng brew services restart mysql

Sau đó, MySQL nên tiếp tục chấp nhận các kết nối không cục bộ từ đó trở đi - cho đến khi bạn cài đặt lại, có lẽ.

Chỉnh sửa (tháng 9 năm 2019) Timothy Zorn chỉ ra rằng vấn đề này không còn xảy ra đối với MySQL 8.x được cài đặt và chạy qua Homebrew, vì vậy câu trả lời của tôi ở trên, được viết vào năm 2016, chỉ có thể liên quan đến 5.x.


3
Một mẹo khác: Nếu bạn đang chạy các dịch vụ $ brew, hãy khởi động lại mysql, nó sẽ dọn sạch tệp plist khỏi LaunchAgents mỗi lần. Nếu bạn muốn tiếp tục thay đổi chỉnh sửa /usr/local/Cellar/mysql/<yourversion>/homebrew.mxcl.mysql.plist - Cũng cảm ơn Emma rất nhiều !!!
LeandroCR

Tôi đã cài đặt mysql 5.6 bằng cách sử dụng brew install mysql56và tôi đã thay đổi cả hai tệp ~/Library/LaunchAgents/homebrew.mxcl.mysql56.plist/usr/local/Cellar/mysql56/5.6.32/homebrew.mxcl.mysql56.plisttệp. Nhưng khi tôi khởi chạy mysql mysql.server start, lệnh ps hiển thị rằng bind-address=127.0.0.1. Có tập tin nào khác để chỉnh sửa không?
xi.lin

@ xi.lin Theo tôi hiểu, mysql.server startbỏ qua LaunchAgent, vì vậy nó có thể được thiết lập từ một nơi khác. Để sử dụng cài đặt trong plist, có lẽ bạn phải sử dụngbrew services restart mysql
Emma Burrows

@EmmaBurrows Sử dụng brew services restart mysqlđầu ra Successfully started mysql` (nhãn: homebrew.mxcl.mysql) `nhưng vẫn là địa chỉ 127.0.0.1 . Trên thực tế tôi không thể tìm thấy homebrew.mxcl.mysql.plistthay vì cóhomebrew.mxcl.mysql56.plist
xi.lin 7/11/2016

1
Cho đến bây giờ đây không còn là cách nó hoạt động. Lệnh được sử dụng để chạy mysqld_safecho tôi không có bind_address. Thay vào đó, nó được chỉ định trong /usr/local/etc/my.cnf.
Timmmm

6

Chạy locate my.cnftìm thấy tập tin/usr/local/etc/my.cnf

  1. Chỉnh sửa tập tin đó và thiết lập bind-address = 0.0.0.0
  2. Khởi động lại mysql: brew services restart mysql

5

Tôi hy vọng bạn cần tạo người dùng để truy cập từ xa bằng '%'ký tự đại diện và cấp quyền trên DB.

Bước 1:

Trong my.cnf ( /server/9107/how-do-i-find-where-mysql-is-loading-its-config-from ) nhận xét địa chỉ liên kết của bạn

# bind-address        = xxx.xxx.xxx.xxx

Và khởi động lại máy chủ MySQL.

Bước 2:

Sau đó, bạn cần cấp quyền cho người dùng để truy cập từ xa

GRANT ALL ON *.* TO 'myuser'@'%' IDENTIFIED BY 'mypass';

Xin hãy xem Làm thế nào để kích hoạt kết nối từ xa.


Tôi đã thử cài đặt này (nhận xét địa chỉ liên kết) trước đó và nó không hoạt động. Tôi đã tạo một người dùng và cũng được cấp tất cả các quyền. mysql> show grants for 'home'; | Grants for home@% | GRANT ALL PRIVILEGES ON *.* TO 'home'@'%' IDENTIFIED BY PASSWORD '...' WITH GRANT OPTION |
chepukha

Bạn có bất kỳ tường lửa tại chỗ? Nếu đó là xin vui lòng vô hiệu hóa điều đó.
Abdul Manaf

Có, tôi có thể truy cập máy chủ khi tắt tường lửa. Nhưng tôi có thể định cấu hình tường lửa để cho phép truy cập từ xa vào máy chủ sql thay vì tắt hoàn toàn không? Trên máy chủ, trong cài đặt tường lửa, tôi đã đặt mysqld thành "cho phép kết nối đến"
chepukha

Bạn có SQL Server cũng được cài đặt trên cùng một máy không?
Abdul Manaf

Vâng tôi đồng ý. Ý bạn là máy chủ SQL và Tường lửa trên cùng một máy?
chepukha

0

Kiểm tra iptables là iptables -L

Nếu IP của bạn không có thì hãy thêm nó

Trong trường hợp Ubuntu ADD IP cho phép truy cập:

iptables -A ALLOWIN -s 192.168.1.XX/32 ! -i lo -j ACCEPT
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.