Android

Làm thế nào để cho phép kết nối từ xa đến máy chủ cơ sở dữ liệu mysql

How to Install MySQL server on Ubuntu 18.04/20.04

How to Install MySQL server on Ubuntu 18.04/20.04

Mục lục:

Anonim

Theo mặc định, máy chủ MySQL chỉ nghe các kết nối từ localhost, có nghĩa là nó chỉ có thể được truy cập bởi các ứng dụng chạy trên cùng một máy chủ.

Tuy nhiên, trong một số tình huống, cần phải truy cập máy chủ MySQL từ vị trí từ xa. Ví dụ: khi bạn muốn kết nối với máy chủ MySQL từ xa từ hệ thống cục bộ của bạn hoặc khi sử dụng triển khai đa máy chủ nơi ứng dụng đang chạy trên một máy khác từ máy chủ cơ sở dữ liệu. Một tùy chọn sẽ là truy cập máy chủ MySQL thông qua SSH Tunnel và một cách khác là cấu hình máy chủ MySQL để chấp nhận các kết nối từ xa.

Trong hướng dẫn này, chúng tôi sẽ thực hiện các bước cần thiết để cho phép kết nối từ xa đến máy chủ MySQL. Các hướng dẫn tương tự áp dụng cho MariaDB.

Cấu hình máy chủ MySQL

Bước đầu tiên là đặt máy chủ MySQL nghe trên một địa chỉ IP cụ thể hoặc tất cả các địa chỉ IP trên máy.

Nếu máy chủ MySQL và máy khách có thể giao tiếp với nhau qua mạng riêng, thì tùy chọn tốt nhất là đặt máy chủ MySQL chỉ nghe trên IP riêng. Mặt khác, nếu bạn muốn kết nối với máy chủ qua mạng công cộng, hãy đặt máy chủ MySQL để nghe trên tất cả các địa chỉ IP trên máy.

Để làm như vậy, bạn cần chỉnh sửa tệp cấu hình MySQL và thêm hoặc thay đổi giá trị của tùy chọn bind-address . Bạn có thể đặt một địa chỉ IP và dải IP duy nhất. Nếu địa chỉ là 0.0.0.0 , máy chủ MySQL chấp nhận kết nối trên tất cả các giao diện IPv4 lưu trữ. Nếu bạn đã cấu hình IPv6 trên hệ thống của mình, thì thay vì 0.0.0.0 , hãy sử dụng :: .

Vị trí của tệp cấu hình MySQL khác nhau tùy thuộc vào phân phối. Trong Ubuntu và Debian, tệp được đặt tại /etc/mysql/mysql.conf.d/mysqld.cnf , trong khi trong các bản phân phối dựa trên Red Hat như CentOS, tệp được đặt tại /etc/my.cnf .

Mở tệp bằng trình soạn thảo văn bản của bạn:

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

Tìm kiếm một dòng bắt đầu bằng bind-address và đặt giá trị của nó thành địa chỉ IP mà máy chủ MySQL nên nghe.

Theo mặc định, giá trị được đặt thành 127.0.0.1 (chỉ nghe trong localhost).

Trong ví dụ này, chúng tôi sẽ đặt máy chủ MySQL lắng nghe trên tất cả các giao diện IPv4 bằng cách thay đổi giá trị thành 0.0.0.0

mysqld.cnf

bind-address = 0.0.0.0 # skip-networking

Nếu có một dòng chứa skip-networking , hãy xóa nó hoặc nhận xét nó bằng cách thêm # ở đầu dòng.

Trong MySQL 8.0 trở lên, bind-address thị bind-address có thể không xuất hiện. Trong trường hợp này, thêm nó dưới phần.

Sau khi hoàn tất, hãy khởi động lại dịch vụ MySQL để các thay đổi có hiệu lực. Chỉ người dùng root hoặc người dùng có quyền sudo mới có thể khởi động lại dịch vụ.

Để khởi động lại dịch vụ MySQL trên Debian hoặc Ubuntu, gõ:

sudo systemctl restart mysql

Trên các bản phân phối dựa trên RedHat như CentOS để khởi động lại dịch vụ chạy:

sudo systemctl restart mysqld

Cấp quyền truy cập cho người dùng từ máy từ xa

Bước tiếp theo là cho phép truy cập vào cơ sở dữ liệu cho người dùng từ xa.

Đăng nhập vào máy chủ MySQL với tư cách là người dùng root bằng cách gõ:

sudo mysql

mysql -uroot -p

Từ bên trong shell MySQL, sử dụng câu lệnh GRANT để cấp quyền truy cập cho người dùng từ xa.

GRANT ALL ON database_name.* TO user_name@'ip_address' IDENTIFIED BY 'user_password';

Ở đâu:

  • database_name là tên của cơ sở dữ liệu mà người dùng sẽ kết nối. user_name là tên od người dùng MySQL. ip_address là địa chỉ IP mà người dùng sẽ kết nối. Sử dụng % để cho phép người dùng kết nối từ bất kỳ địa chỉ IP nào. user_password là mật khẩu người dùng.

Ví dụ: để cấp quyền truy cập vào dbname cơ sở dữ liệu cho người dùng có tên foo bằng mật khẩu my_passwd từ máy khách có IP 10.8.0.5 , bạn sẽ chạy:

GRANT ALL ON dbname.* TO foo@'10.8.0.5' IDENTIFIED BY 'my_passwd';

Cấu hình tường lửa

Bước cuối cùng là cấu hình tường lửa của bạn để cho phép lưu lượng truy cập trên cổng 3306 (cổng mặc định của MySQL) từ các máy từ xa.

Iptables

sudo iptables -A INPUT -p tcp --destination-port 3306 -j ACCEPT

Cho phép truy cập từ một địa chỉ IP cụ thể:

sudo iptables -A INPUT -s 10.8.0.5 -p tcp --destination-port 3306 -j ACCEPT

UFW

UFW là công cụ tường lửa mặc định trong Ubuntu. Để cho phép truy cập từ bất kỳ địa chỉ IP nào trên Internet (rất không an toàn) hãy chạy:

sudo ufw allow 3306/tcp

Cho phép truy cập từ một địa chỉ IP cụ thể:

sudo ufw allow from 10.8.0.5 to any port 3306

Tường lửa

FirewallD là công cụ quản lý tường lửa mặc định trong CentOS. Để cho phép truy cập từ bất kỳ địa chỉ IP nào trên Internet (rất không an toàn), hãy gõ:

sudo firewall-cmd --permanent --zone=public --add-port=3306/tcp sudo firewall-cmd --reload

Để cho phép truy cập từ một địa chỉ IP cụ thể trên một cổng cụ thể, bạn có thể tạo vùng FirewallD mới hoặc sử dụng quy tắc phong phú. Tạo một vùng mới có tên mysqlzone :

sudo firewall-cmd --new-zone=mysqlzone --permanent sudo firewall-cmd --reload sudo firewall-cmd --permanent --zone=mysqlzone --add-source=10.8.0.5/32 sudo firewall-cmd --permanent --zone=mysqlzone --add-port=3306/tcp sudo firewall-cmd --reload

Xác minh thay đổi

Để xác minh rằng người dùng từ xa có thể kết nối với máy chủ MySQL chạy lệnh sau:

mysql -u user_name -h mysql_server_ip -p

Trong đó user_name là tên của người dùng mà bạn đã cấp quyền truy cập và mysql_server_ip là địa chỉ IP của máy chủ nơi máy chủ MySQL chạy.

Nếu mọi thứ được thiết lập chính xác, bạn sẽ có thể đăng nhập vào máy chủ MySQL từ xa.

ERROR 2003 (HY000): Can't connect to MySQL server on '10.8.0.5' (111)"

Lỗi bên dưới cho thấy người dùng mà bạn đang cố đăng nhập không có quyền truy cập vào máy chủ MySQL từ xa.

"ERROR 1130 (HY000): Host '10.8.0.5' is not allowed to connect to this MySQL server"

Phần kết luận

Theo mặc định, MySQL, máy chủ cơ sở dữ liệu nguồn mở phổ biến nhất, chỉ lắng nghe các kết nối đến trên localhost.

Để cho phép kết nối từ xa đến máy chủ MySQL, bạn cần thực hiện các bước sau:

  1. Định cấu hình máy chủ MySQL để nghe trên tất cả hoặc một giao diện cụ thể. Truy cập vào người dùng từ xa. Mở cổng MySQL trong tường lửa của bạn.
mysia mariadb