Thứ năm, 07/03/2019 | 00:00 GMT+7

Cách cho phép truy cập từ xa vào MySQL

Hướng dẫn này nhằm phục vụ như một tài nguyên khắc phục sự cố và điểm bắt đầu khi bạn chẩn đoán cài đặt MySQL của bạn . Ta sẽ xem xét một số vấn đề mà nhiều user MySQL gặp phải và cung cấp hướng dẫn để khắc phục sự cố cụ thể.

Nhiều trang web và ứng dụng bắt đầu bằng web server và backend database của chúng được lưu trữ trên cùng một máy. Tuy nhiên, theo thời gian, một cài đặt như thế này có thể trở nên cồng kềnh và khó mở rộng. Một giải pháp phổ biến là tách các chức năng này bằng cách cài đặt database từ xa, cho phép server và database phát triển theo tốc độ riêng của chúng trên máy của chúng.

Một trong những vấn đề phổ biến hơn mà user gặp phải khi cố gắng cài đặt database MySQL từ xa là version MySQL của họ chỉ được cấu hình để lắng nghe các kết nối local . Đây là cài đặt mặc định của MySQL, nhưng nó sẽ không hoạt động đối với cài đặt database từ xa vì MySQL phải có khả năng lắng nghe địa chỉ IP bên ngoài nơi server có thể được truy cập. Để kích hoạt điều này, hãy mở file mysqld.cnf của bạn:

  • sudo nano /etc/mysql/mysql.conf.d/mysqld.cnf

Điều hướng đến dòng bắt đầu bằng bind-address thị bind-address . Nó sẽ trông giống thế này:

/etc/mysql/mysql.conf.d/mysqld.cnf
. . .
lc-messages-dir = /usr/share/mysql
skip-external-locking
#
# 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
. . .

Theo mặc định, giá trị này được đặt thành 127.0.0.1 , nghĩa là server sẽ chỉ tìm kiếm các kết nối local . Bạn cần thay đổi chỉ thị này để tham chiếu đến địa chỉ IP bên ngoài. Với mục đích khắc phục sự cố, bạn có thể đặt chỉ thị này thành địa chỉ IP ký tự đại diện, * , :: hoặc 0.0.0.0 :

/etc/mysql/mysql.conf.d/mysqld.cnf
. . .
lc-messages-dir = /usr/share/mysql
skip-external-locking
#
# Instead of skip-networking the default is now to listen only on
# localhost which is more compatible and is not less secure.
bind-address            = 0.0.0.0
. . .

Lưu ý: Nếu bạn đang chạy MySQL 8+, bind-address thị bind-address sẽ không có trong file mysqld.cnf theo mặc định. Trong trường hợp này, hãy thêm dòng được đánh dấu sau vào cuối file :

/etc/mysql/mysql.conf.d/mysqld.cnf
. . .
[mysqld]
pid-file        = /var/run/mysqld/mysqld.pid
socket          = /var/run/mysqld/mysqld.sock
datadir         = /var/lib/mysql
log-error       = /var/log/mysql/error.log
bind-address            = 0.0.0.0

 

Sau khi thay đổi dòng này, hãy lưu file ( CTRL + X , Y , sau đó ENTER nếu bạn đã chỉnh sửa bằng nano ).

Sau đó, khởi động lại dịch vụ MySQL để đưa các thay đổi bạn đã thực hiện đối với mysqld.cnf có hiệu lực:

  • sudo systemctl restart mysql

Nếu bạn có account user MySQL hiện có mà bạn định sử dụng để kết nối với database từ server từ xa của bạn , bạn cần phải cấu hình lại account đó để kết nối từ server từ xa thay vì server cục bộ . Để làm như vậy, hãy mở client MySQL với quyền là user MySQL gốc của bạn hoặc bằng một account user quyền khác:

  • sudo mysql

Nếu bạn đã cài đặt xác thực password cho root , bạn cần sử dụng lệnh sau để truy cập MySQL shell thay thế:

  • mysql -u root -p

Để thay đổi server của user , bạn có thể sử dụng lệnh RENAME USER của MySQL. Chạy lệnh sau, đảm bảo thay đổi sammy thành tên của account user MySQL của bạn và remote_server_ip thành địa chỉ IP của server từ xa của bạn:

RENAME USER 'sammy'@'localhost' TO 'sammy'@'remote_server_ip';

Ngoài ra, bạn có thể tạo một account user mới sẽ chỉ kết nối từ server từ xa bằng lệnh sau:

CREATE USER 'sammy'@'remote_server_ip' IDENTIFIED BY 'password';

Lưu ý : Lệnh này sẽ tạo user xác thực bằng plugin xác thực mặc định của MySQL, caching_sha2_password . Tuy nhiên, có một vấn đề đã biết với một số version PHP có thể gây ra sự cố với plugin này.

Nếu bạn định sử dụng database này với ứng dụng PHP - ví dụ: phpMyAdmin - bạn có thể cần tạo một user từ xa sẽ xác thực với plugin mysql_native_password cũ hơn, mặc dù vẫn an toàn:

CREATE USER 'sammy'@'remote_server_ip' IDENTIFIED WITH mysql_native_password BY 'password';

Nếu bạn không chắc chắn, bạn luôn có thể tạo user xác thực bằng caching_sha2_plugin và sau đó ALTER nó sau này bằng lệnh này:

ALTER USER 'sammy'@'remote_server_ip' IDENTIFIED WITH mysql_native_password BY 'password';

 

Sau đó, cấp cho user mới các quyền thích hợp cho các nhu cầu cụ thể của bạn. Ví dụ sau đây cấp cho user các quyền global để CREATE , ALTERDROP database , bảng và user , cũng như quyền INSERT , UPDATEDELETE dữ liệu từ bất kỳ bảng nào trên server . Nó cũng cấp cho user khả năng truy vấn dữ liệu với SELECT , tạo foreign keys với từ khóa REFERENCES và thực hiện các hoạt động FLUSH với quyền RELOAD . Tuy nhiên, bạn chỉ nên cấp cho user các quyền mà họ cần, vì vậy hãy thoải mái điều chỉnh các quyền của user nếu cần.

GRANT CREATE, ALTER, DROP, INSERT, UPDATE, DELETE, SELECT, REFERENCES, RELOAD on *.* TO 'sammy'@'remote_server_ip' WITH GRANT OPTION;

Sau đây, bạn nên chạy lệnh FLUSH PRIVILEGES . Điều này sẽ giải phóng bất kỳ bộ nhớ nào mà server đã lưu trong bộ nhớ cache do kết quả của các câu CREATE USERGRANT trước đó:

FLUSH PRIVILEGES;

Sau đó, bạn có thể thoát khỏi client MySQL:

exit

Cuối cùng, giả sử bạn đã cấu hình firewall trên server database của bạn , bạn cũng cần mở cổng 3306 - cổng mặc định của MySQL - để cho phép lưu lượng truy cập vào MySQL.

Nếu bạn chỉ định truy cập vào server database từ một máy cụ thể, bạn có thể cấp quyền độc quyền cho máy đó để kết nối với database từ xa bằng lệnh sau. Đảm bảo thay thế remote_IP_address bằng địa chỉ IP thực của máy bạn định kết nối:

  • sudo ufw allow from remote_IP_address to any port 3306

Nếu bạn cần truy cập database từ các máy khác trong tương lai, bạn có thể cấp cho chúng quyền truy cập đặc biệt bằng lệnh này. Chỉ cần nhớ bao gồm địa chỉ IP tương ứng của họ.

Ngoài ra, bạn có thể cho phép kết nối đến database MySQL của bạn từ bất kỳ địa chỉ IP nào bằng lệnh sau:

Cảnh báo : Lệnh này sẽ cho phép bất kỳ ai truy cập vào database MySQL của bạn. Không chạy nó nếu database của bạn chứa bất kỳ dữ liệu nhạy cảm nào.

  • sudo ufw allow 3306

Sau đây, hãy thử truy cập database của bạn từ xa từ một máy khác:

Lưu ý : Nếu bạn đã thêm luật firewall để chỉ cho phép kết nối từ một địa chỉ IP cụ thể, bạn phải cố gắng truy cập database bằng máy được liên kết với địa chỉ đó.

  • mysql -u user -h database_server_ip -p

Nếu bạn có thể truy cập database của bạn , điều đó xác nhận bind-address thị bind-address trong file cấu hình của bạn là vấn đề. Tuy nhiên, xin lưu ý việc đặt bind-address thành 0.0.0.0 là không an toàn vì nó cho phép kết nối đến server từ bất kỳ địa chỉ IP nào. Mặt khác, nếu bạn vẫn không thể truy cập database từ xa, thì có thể một điều gì đó khác đang gây ra sự cố. Trong cả hai trường hợp, bạn có thể thấy hữu ích khi làm theo hướng dẫn về Cách cài đặt database từ xa để tối ưu hóa hiệu suất trang với MySQL trên Ubuntu 18.04 để cài đặt cấu hình database từ xa an toàn hơn.


Tags:

Các tin liên quan

Cách sửa chữa bảng bị hỏng trong MySQL
2019-03-07
Cách khắc phục sự cố lỗi socket trong MySQL
2019-03-07
Cách giải quyết sự cố trong MySQL
2019-03-07
Cách khắc phục sự cố truy vấn MySQL
2019-03-07
Giới thiệu về Truy vấn trong MySQL
2018-10-17
Cách cài đặt MySQL mới nhất trên Debian 9
2018-09-05
Cách đặt lại mật khẩu gốc MySQL hoặc MariaDB của bạn trên Ubuntu 18.04
2018-09-04
Cách tạo một cụm MySQL nhiều node trên Ubuntu 18.04
2018-07-26
Cách cài đặt MySQL mới nhất trên Ubuntu 18.04
2018-07-12
Cách di chuyển thư mục dữ liệu MySQL đến vị trí mới trên Ubuntu 18.04
2018-07-06