Cho phép truy xuất từ xa vào MySQL trên Ubuntu

Điều kiện cần

Giới thiệu

Nhiều trang web và ứng dụng bắt đầu với máy chủ web và phụ trợ cơ sở dữ liệu được lưu trữ trên cùng một máy. Tuy nhiên, với thời gian, một thiết lập như thế này có thể trở nên cồng kềnh và khó mở rộng. Một giải pháp chung là tách các chức năng này bằng cách thiết lập cơ sở dữ liệu từ xa, cho phép máy chủ và cơ sở dữ liệu phát triển theo tốc độ của riêng họ trên máy móc của họ.

Một trong những vấn đề phổ biến hơn mà người dùng chạy vào khi cố gắng thiết lập cơ sở dữ liệu MySQL từ xa là phiên bản MySQL của họ chỉ được cấu hình để nghe các kết nối cục bộ. Đây là cài đặt mặc định của MySQL, nhưng nó sẽ không hoạt động với thiết lập cơ sở dữ liệu từ xa vì MySQL phải có thể nghe một địa chỉ IP bên ngoài nơi máy chủ có thể đạt được.

Thay đổi cầu hình để cho phép truy xuất từ xa

  • Mở tệp mysqld.cnf bằng lệnh sau:
    $ sudo nano /etc/mysql/mysql.conf.d/mysqld.cnf
  • Thay đổi cấu hình của tệp này như sau:
    . . .
    [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 cấu hính như trên, lưu và đóng tệp (Ctrl + X, Y, nếu chỉnh sửa với công cụ nano)

  • Khởi động lại dịch vụ MySQL để các thay đổi đã thực hiện đối với tệp mysqld.cnf có hiệu lực:
    $ sudo systemctl restart mysql

Tạo, quản lý người dùng cho phép truy xuất vào CSDL từ xa

Nếu bạn có tài khoản người dùng MySQL hiện tại mà bạn có kế hoạch sử dụng để kết nối với cơ sở dữ liệu từ máy chủ từ xa, bạn sẽ cần cấu hình lại tài khoản đó để kết nối từ máy chủ từ xa thay vì localhost.

  • Đăng nhập vào MySQL với tài khoản root:
    $ mysql -u root -p
  • Tạo người dùng cho phép truy xuất từ xa:
    mysql> CREATE USER 'sinhnx'@'remote_client_ip' IDENTIFIED BY 'password';

    Trong đó:

    • sinhnx: Tên tài khoản đăng nhập vào MySQL
    • remote_client_ip: Địa chỉ IP của máy tính muốn remote vào MySQL, có thể lấy được địa chỉ IP của máy này có thể vào máy client đó sử dụng lệnh:
      $ curl -4 icanhazip.com
    • password: Mật khẩu của tài khoản sinhnx để đăng nhập vào MySQL
  • Nếu đã có tài khoản người dùng có thể sử dụng lệnh sau để đổi tài khoản từ cục bộ sang có thể truy xuất được từ xa:
    mysql> RENAME USER 'sinhnx'@'localhost' TO 'sinhnx'@'remote_client_ip';
  • Tạo CSDL SinhDB:
    mysql> CREATE DATABASE SinhDB;
  • Phân quyền cho tài khoản vừa tạo toàn quyền trên CSDL SinhDB:
    mysql> grant all on SinhDB.* to 'sinnhnx'@'remote_client_ip';
  • Thoát khỏi mysql:
    mysql> exit;

Cho phép Ubuntu có thể truy xuất từ xa đến cổng của MySQL

Nếu bạn chỉ có kế hoạch truy cập máy chủ cơ sở dữ liệu từ một máy cụ thể, bạn có thể cấp quyền độc quyền của máy đó để kết nối với cơ sở dữ liệu từ xa với lệnh sau. Đảm bảo thay thế địa chỉ IP truy xuất từ xa bằng địa chỉ IP thực tế của máy bạn dự định kết nối tới:

$ sudo ufw allow from remote_client_ip to any port 3306
$ sudo ufw allow 3306

Trong đó cổng 3306 là cổng mặc định của MySQL, bạn có thể đổi cổng này (trong tệp cấu hình MySQL) nếu muốn.

Kết nối từ xa vào MySQL

Vào máy khách muốn kết nối đến máy chủ MySQL gõ lệnh sau:

$ mysql -u sinhnx -h database_server_ip -p

Nếu máy khách có cài đặt MySQL Workbench thì có thể tạo một kết nối đến MySQL Server với các tham số như đã cấu hình.