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:
- 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 )
- 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.