Khi cần quản lý cơ sở dữ liệu MySQL/MariaDB trên VPS từ máy tính cá nhân hoặc kết nối từ một ứng dụng web trên máy chủ khác, bạn phải bật tính năng truy cập từ xa. Mặc định, vì lý do bảo mật, MySQL chỉ cho phép kết nối từ bên trong VPS (localhost). Bài viết này sẽ hướng dẫn bạn chi tiết từng bước để kích hoạt Remote MySQL, cho phép bạn truy cập cơ sở dữ liệu từ xa trên các hệ điều hành phổ biến như Ubuntu, Debian, CentOS và AlmaLinux.
Chuẩn bị trước khi thực hiện
Trước khi bắt đầu, hãy đảm bảo bạn có đầy đủ các thông tin sau:
- Quyền truy cập root vào VPS: Bạn cần có quyền root hoặc sudo để đăng nhập qua SSH và chỉnh sửa các file cấu hình hệ thống.
- Địa chỉ IP của VPS: Dùng để kết nối SSH và cấu hình trong phần mềm client.
- Mật khẩu root của MySQL/MariaDB: Cần thiết để đăng nhập và tạo người dùng, cấp quyền.
Các bước thực hiện
Bước 1: Đăng nhập vào VPS qua SSH
Đầu tiên, bạn mở Terminal (trên macOS/Linux) hoặc PowerShell/CMD (trên Windows) và sử dụng lệnh SSH để đăng nhập vào VPS.
ssh root@IP_VPSThay IP_VPS bằng địa chỉ IP của máy chủ của bạn. Sau đó, nhập mật khẩu khi được yêu cầu để truy cập vào hệ thống.

Bước 2: Chỉnh sửa file cấu hình MySQL để cho phép kết nối từ xa
Bước này yêu cầu MySQL lắng nghe các kết nối từ tất cả các địa chỉ IP, không chỉ riêng localhost.
1. Xác định và mở file cấu hình
Đường dẫn đến file cấu hình có thể khác nhau tùy hệ điều hành:
- Trên Ubuntu/Debian: /etc/mysql/mysql.conf.d/mysqld.cnf.
- Trên CentOS/AlmaLinux/RHEL: /etc/my.cnf.
Bạn sử dụng một trình soạn thảo văn bản như vi hoặc nano để mở file. Ví dụ với vi trên CentOS:
vi /etc/my.cnf
2. Thay đổi tham số bind-address
Bên trong file cấu hình, bạn tìm đến dòng bind-address. Mặc định, giá trị được thiết lập là 127.0.0.1, có nghĩa là MySQL chỉ chấp nhận kết nối nội bộ. Bạn sửa thành giá trị này thành bind-address = 0.0.0.0 để cho phép MySQL lắng nghe kết nối trên tất cả các giao diện mạng có sẵn trên VPS. Nếu bạn thấy dòng skip-networking, hãy thêm dấu # vào đầu dòng để vô hiệu hóa.

Sau khi chỉnh sửa, bạn lưu file và thoát. (Với vi, bạn nhấn Esc, gõ :wq rồi Enter. Với nano, bạn nhấn Ctrl + O, Enter, rồi Ctrl + X).
3. Khởi động lại dịch vụ MySQL
Để các thay đổi có hiệu lực, bạn phải khởi động lại dịch vụ MySQL/MariaDB.
Với MySQL (Ubuntu/Debian):
systemctl restart mysqlVới MariaDB (CentOS/AlmaLinux):
systemctl restart mariadb4. Kiểm tra lại cấu hình
Sau khi khởi động lại, bạn chạy lệnh sau để xác nhận MySQL đã lắng nghe trên port 3306 từ mọi IP:
ss -lntp | grep mysqlNếu bạn thấy kết quả tương tự như dưới đây, nghĩa là cấu hình đã thành công:
LISTEN 0 80 0.0.0.0:3306 *:*
Bước 3: Cấp quyền truy cập từ xa cho người dùng MySQL
Chỉ thay đổi bind-address là chưa đủ. Bạn cần tạo một người dùng MySQL và cấp quyền cho phép họ kết nối từ một địa chỉ IP bên ngoài.
1. Đăng nhập vào MySQL
mysql -u root -pNhập mật khẩu root MySQL của bạn khi hệ thống yêu cầu.
2. Kiểm tra danh sách người dùng hiện có
Bạn chạy lệnh sau để xem các tài khoản và phạm vi truy cập (Host) hiện tại để tránh trùng tên hoặc cấp quyền sai:
SELECT User, Host FROM mysql.user;Nếu người dùng bạn muốn sử dụng đã tồn tại (ví dụ wordpress, admin, panel) nhưng Host là localhost, bạn chỉ cần cập nhật quyền cho họ. Nếu chưa, hãy tạo người dùng mới.

3. Tạo người dùng mới (nếu cần)
Bạn sử dụng lệnh sau để tạo một người dùng mới có thể kết nối từ bất kỳ đâu.
CREATE USER 'ten_user'@'%' IDENTIFIED BY 'mat_khau';Trong đó:
- Thay
ten_uservàmat_khaubằng thông tin của bạn. '%'cho phép kết nối từ mọi địa chỉ IP. Để tăng bảo mật, bạn nên thay'%'bằng địa chỉ IP tĩnh của bạn (ví dụ:'ten_user'@'103.200.x.x').
4. Cấp quyền truy cập từ xa
Bạn có thể cấp toàn bộ quyền cho người dùng trên tất cả các cơ sở dữ liệu với lệnh:
GRANT ALL PRIVILEGES ON *.* TO 'ten_user'@'%' WITH GRANT OPTION;
FLUSH PRIVILEGES;Lệnh FLUSH PRIVILEGES dùng để tải lại bảng phân quyền, đảm bảo các thay đổi được áp dụng ngay lập tức.

5. Kiểm tra lại quyền vừa cấp
Để chắc chắn, bạn hãy kiểm tra lại quyền của người dùng:
SHOW GRANTS FOR 'ten_user'@'%';Bạn sẽ thấy kết quả tương tự như sau, xác nhận quyền đã được cấp thành công:
GRANT ALL PRIVILEGES ON *.* TO 'ten_user'@'%' WITH GRANT OPTION
Bước 4: Mở Port 3306 trên Firewall
Nếu VPS của bạn có bật tường lửa, bạn cần mở port mặc định của MySQL (3306) để cho phép các kết nối từ bên ngoài.
Trên UFW (Ubuntu/Debian):
ufw allow 3306/tcp
ufw reloadTrên Firewalld (CentOS/AlmaLinux):
firewall-cmd --add-port=3306/tcp --permanent
firewall-cmd --reloadBước 5: Kiểm tra kết nối từ máy tính cá nhân
Bây giờ, mọi thứ đã sẵn sàng. Hãy thử kết nối từ máy tính của bạn hoặc từ server khác.
1. Kết nối bằng dòng lệnh (Terminal/CMD)
mysql -h IP_VPS -u ten_user -pNếu bạn có thể đăng nhập thành công, bạn đã cấu hình đúng.

2. Kết nối bằng phần mềm quản lý (Navicat, DBeaver, HeidiSQL, etc.)
Bạn có thể sử dụng một phần mềm GUI để kiểm tra trực quan hơn. Ví dụ với Navicat, bạn tạo một kết nối mới (New Connection) và điền các thông tin sau:
| Thông tin | Giá trị mẫu |
|---|---|
| Connection Name | Đặt tên bất kỳ (ví dụ: Remote-MySQL) |
| Host | Nhập IP của VPS (ví dụ: 103.200.x.x) |
| Port | 3306 |
| Username | ten_user |
| Password | mat_khau |

Sau đó bạn nhấn vào nút Test Connection. Nếu nhận được thông báo Connection Successful, xin chúc mừng, bạn đã hoàn tất.

Sau khi kết nối thành công, bạn có thể thấy và mở, xem bảng dữ liệu, hoặc thao tác quản lý database từ xa trực tiếp trong phần mềm.

Một số lỗi thường gặp và cách khắc phục
- Lỗi Access denied for user: Vấn đề nằm ở quyền của người dùng. Bạn kiểm tra lại tên người dùng, mật khẩu và IP được phép (Host).
- Lỗi Can’t connect to MySQL server on 3306: Kết nối bị chặn. Bạn hãy kiểm tra lại cấu hình bind-address hoặc quy tắc firewall trên VPS.
- Kết nối được nhưng không thấy database: Người dùng chưa được cấp quyền GRANT trên cơ sở dữ liệu đó.
Lưu ý quan trọng về bảo mật
Việc mở MySQL ra internet tiềm ẩn rủi ro bảo mật. Bạn phải luôn tuân thủ các nguyên tắc sau:
- Hạn chế IP truy cập: Thay vì dùng
'%', hãy chỉ định địa chỉ IP tĩnh của bạn. - Sử dụng mật khẩu mạnh: Tạo mật khẩu phức tạp, kết hợp chữ hoa, chữ thường, số và ký tự đặc biệt.
- Không dùng tài khoản root: Tuyệt đối không cấp quyền truy cập từ xa cho tài khoản root của MySQL.
- Đóng khi không cần: Nếu chỉ cần truy cập tạm thời, bạn hãy xóa quy tắc firewall và thu hồi quyền của người dùng sau khi sử dụng xong.
Qua các bước trên, bạn đã cấu hình thành công để cho phép MySQL lắng nghe kết nối từ xa, cấp quyền cho người dùng cụ thể và mở port 3306 trên tường lửa. Giờ đây, bạn có thể quản lý cơ sở dữ liệu MySQL trên VPS một cách linh hoạt và hiệu quả từ bất kỳ đâu bằng các công cụ yêu thích của mình.
VIETNIX – DỊCH VỤ HOSTING, VPS TỐC ĐỘ CAO, ỔN ĐỊNH, BẢO MẬT
- Địa chỉ: 265 Hồng Lạc, Phường Bảy Hiền, Thành Phố Hồ Chí Minh
- Điện thoại: 1800 1093
- Email liên hệ: sales@vietnix.com.vn
- Website: https://vietnix.vn/

