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.cnf
cá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 mysql
và 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.cnf
tệ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.0
giả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 mysql
sẽ 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:
- Chỉnh sửa
/usr/local/Cellar/mysql/<yourversion>/homebrew.mxcl.mysql.plist
và thay thế --bind-address=127.0.0.1
bằng bind-address=*
hoặc --bind-address=0.0.0.0
( xem tài liệu MySQL về địa chỉ liên kết )
- 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.
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.