Nếu đây là MySQL, mạng của máy chủ cơ sở dữ liệu không được bật theo mặc định. Để kích hoạt kết nối mạng trong MySQL, bạn cần tìm tệp cấu hình MySQL đang hoạt động có tên my.cnf
. Và chỉnh sửa nó.
Tôi sẽ giải thích cách thực hiện việc này trên Ubuntu 12.04, nhưng các hướng dẫn tương tự đối với hầu hết mọi cài đặt Linux.
Bật mạng MySQL
Trước tiên, hãy mở tệp bằng trình chỉnh sửa như nano
. Bạn có thể cần chạy lệnh qua sudo
:
sudo nano /etc/mysql/my.cnf
Sau đó, tìm kiếm khu vực trong tệp cấu hình của bạn với bind-address
tùy chọn:
# Instead of skip-networking the default is now to listen only on
# localhost which is more compatible and is not less secure.
bind-address = 127.0.0.1
Bây giờ hãy thay đổi bind-address
đó cài đặt như sau:
bind-address = 0.0.0.0
Sau đó, lưu tệp và khởi động lại MySQL như thế này:
sudo service mysql restart
Và bây giờ cơ sở dữ liệu MySQL của bạn sẽ có thể lấy các kết nối không phải máy chủ cục bộ từ các máy từ xa.
Đảm bảo cổng MySQL 3306
đang Mở
Điều đó nói rằng, ngay cả khi đã bật mạng, bạn vẫn nên kiểm tra xem bạn có thể kết nối với máy từ xa từ dòng lệnh hay không bằng cách sử dụng công cụ mạng như nmap
. Bạn có thể có tường lửa trên 192.168.1.10
chặn cổng MySQL 3306
vì vậy bạn cần kiểm tra xem nó đang mở hay đóng như sau:
nmap 192.168.1.10 -p3306
Và nếu cổng 3306
đang mở, đây sẽ là phản hồi; lưu ý open
dưới STATE
:
Starting Nmap 6.40 ( http://nmap.org ) at 2014-06-10 10:34 EDT
Nmap scan report for 192.168.1.10
Host is up (0.0035s latency).
PORT STATE SERVICE
3306/tcp open mysql
Nhưng nếu cổng 3306
đóng cửa, bạn sẽ nhận được điều này; lưu ý closed
dưới STATE
:
Starting Nmap 6.40 ( http://nmap.org ) at 2014-06-10 10:34 EDT
Nmap scan report for 192.168.1.10
Host is up (0.0035s latency).
PORT STATE SERVICE
3306/tcp closed mysql
Kiểm tra tài trợ người dùng MySQL của bạn
Bây giờ với tất cả những điều đó đã hoàn thành, máy chủ cơ sở dữ liệu MySQL của bạn sẽ có thể truy cập được trên mạng. Nhưng điều đó nói lên rằng, bạn cần đảm bảo rằng người dùng cơ sở dữ liệu của bạn mà bạn đang sử dụng được phép kết nối từ một máy từ xa trong mạng LAN của bạn. Vì vậy, hãy đăng nhập vào MySQL và chạy lệnh này để xem người dùng có thể có những trợ cấp nào:
SELECT user, host FROM `mysql`.`user`;
Thao tác này sẽ hiển thị cho bạn danh sách người dùng &máy chủ được kết nối với những người dùng đó trong MySQL. Vấn đề là hầu hết người dùng chỉ được cấp đặc quyền truy cập vào localhost
hoặc 127.0.0.1
. Một số được cấp máy chủ ký tự đại diện là %
. Bạn cần xem danh sách đó và xem liệu người dùng bạn muốn sử dụng có máy chủ ký tự đại diện hay không (%
) hoặc một địa chỉ IP cụ thể được kết nối với chúng. Bạn có thể kiểm tra GRANT
của người dùng s bằng cách chạy một dòng như thế này; tất nhiên là thay đổi [your_database_user]
và [hostname]
để phù hợp với cài đặt của bạn:
SHOW GRANTS FOR '[your_database_user]'@'[hostname]';
Điều đó sẽ hiển thị cho bạn danh sách GRANT
có sẵn s cho một người dùng trên một máy chủ cụ thể. Nếu họ có GRANT
sẽ cho phép truy cập từ xa — chẳng hạn như sử dụng ký tự đại diện %
máy chủ — sau đó bạn đã hoàn tất. Nếu họ không có bất kỳ GRANT
nào Bạn có thể chạy các lệnh MySQL sau đây; tất nhiên là thay đổi [your_database]
và [your_database_user]
để phù hợp với cài đặt của bạn:
GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, DROP, INDEX, ALTER, CREATE TEMPORARY TABLES, LOCK TABLES, EXECUTE, CREATE VIEW, SHOW VIEW, CREATE ROUTINE, ALTER ROUTINE, EVENT, TRIGGER ON `[your_database]`.* TO '[your_database_user]'@'192.168.0.0/255.255.0.0';
GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, DROP, INDEX, ALTER, CREATE TEMPORARY TABLES, LOCK TABLES, EXECUTE, CREATE VIEW, SHOW VIEW, CREATE ROUTINE, ALTER ROUTINE, EVENT, TRIGGER ON `[your_database]`.* TO '[your_database_user]'@'10.0.0.0/255.0.0.0';
FLUSH PRIVILEGES;
Cả GRANT
các dòng áp dụng một bộ quyền truy cập khá tiêu chuẩn vào cơ sở dữ liệu. Dòng đầu tiên áp dụng chúng cho bất kỳ kết nối nào trong dải mạng LAN của 192.168.x.x
. Dòng thứ hai áp dụng chúng cho bất kỳ kết nối nào trong phạm vi mạng LAN của 10.x.x.x
. Tôi muốn làm điều đó để bao gồm tất cả các cơ sở trên mạng nội bộ. FLUSH PRIVILEGES;
cuối cùng Về cơ bản, dòng lệnh cho MySQL tải lại các bảng đặc quyền của người dùng cho phép các quyền đó có hiệu lực.