Cách mở local MySQL database cho máy khác truy cập từ xa
A. ĐẶT VẤN ĐỀ
Bạn là 1 data analyst đang làm việc cho 1 công ty nhỏ. Bạn đã xây dựng được 1 database MySQL để lưu trữ dữ liệu, và mọi thứ chạy rất ổn trên local.
Nhưng đến một lúc nào đó, bạn cần truy cập database từ máy khác, hoặc team bạn cũng cần truy vấn dữ liệu từ database đó.
Bạn nghĩ đến giải pháp thuê cloud database hoặc online server, nhưng:
- Chi phí lớn (sếp bạn không thích điều này 😗)
- Vượt quá nhu cầu lưu trữ & xử lý dữ liệu hiện tại.
Vậy có cách nào để nhiều người khác truy cập được vào MySQL database trong máy bạn - đơn giản, dễ làm, và hoàn toàn free không? Có nha, mình sẽ hướng dẫn các bạn cách làm điều đó trong bài viết này nhé!
B. NỘI DUNG CHÍNH
Tổng quan mà nói, có 2 cách để giúp nhiều người truy cập được vào database trong máy bạn:
- Cách 1: Database nằm trên server bên ngoài. Hiểu đơn giản, bạn thuê online server/cloud database để đẩy database của bạn lên đó. Ưu điểm là không tốn công set up và vận hành, nhược điểm là tốn tiền và có thể overkill so với nhu cầu hiện tại.
- Cách 2: Database vẫn nằm trong máy bạn, nhưng mở đường cho các máy khác truy cập. Hiểu đơn giản là biến máy bạn thành cái server luôn. Ưu điểm là free 😁, dễ set up (trong khuôn khổ bài viết này), nhược điểm là máy bạn sẽ phải gánh vai trò của cái server.
Bài viết này sẽ hướng dẫn cách 2 nhé!
Để biến máy bạn thành database server, và mở đường cho các máy khác truy cập database từ phía client, hai phía phải đáp ứng đủ 4 tiêu chí sau:
- Máy tính của bạn (máy server):
- Tạo & cấp quyền cho các user
- Chỉnh bind-address về 0.0.0.0
- Hạ firewall (nếu có)
- Máy tính của những người khác (máy client):
- Dùng chung mạng LAN với máy tính của bạn
1. Tạo & cấp quyền cho các user
Trong MySQL server máy bạn, tạo và cấp quyền cho 1 user bằng câu lệnh MySQL sau:
CREATE USER 'vinam'@'%' IDENTIFIED BY '123456';
GRANT ALL PRIVILEGES ON test1.* TO 'vinam'@'%';
FLUSH PRIVILEGES;
Trong đó:
- vinam: tài khoản của user.
- 123456: mật khẩu của user.
- %: địa chỉ IP của user
- MySQL server chỉ cho phép user đã tạo kết nối từ địa chỉ IP này. Ví dụ: '182.179.1.56', '120.178.2.18', '127.0.0.1',...
- Trong ví dụ trên, '%' có nghĩa cho phép user này kết nối từ mọi địa chỉ IP.
- ALL PRIVILEGES: cho phép user trên có mọi quyền tạo, thêm, sửa, xóa data. Danh sách các quyền có thể thêm:
- ALL PRIVILEGES: Cho phép user thực hiện toàn quyền,
- SELECT: Cho phép truy vấn tables hoặc databases,
- CREATE: Cho phép tạo mới tables hoặc databases,
- DROP: Cho phép xóa tables hoặc databases,
- INSERT: Cho phép thêm bản ghi (records) vào trong tables,
- DELETE: Cho phép xóa bản ghi (records) trong tables,
- UPDATE: Cho phép cập nhật databases,
- GRANT OPTION: Cho phép gán hoặc xóa quyền của user khác.
- test1.* : quyền vừa cấp có tác dụng trên mọi bảng trong cơ sở dữ liệu tên là test1. Cấu trúc tổng quan: <database_name>.<table_name>
(Note: Bạn có thể tham khảo thêm về thao tác tạo và cấp quyền cho user trên MySQL trong bài đọc này)
Nếu có nhiều máy khác muốn truy cập, hãy tạo và cấp quyền cho nhiều user tương ứng, thao tác tương tự như trên nhé!

2. Chỉnh bind-address về 0.0.0.0
Bind-address là địa chỉ IP mà MySQL server "lắng nghe" kết nối. Mặc định bind-address là 127.0.0.1, tức là chỉ "lắng nghe" requests từ localhost nội bộ trong máy bạn.
Nếu muốn máy khác có thể truy cập được database, phải chỉnh bind-address máy bạn về 0.0.0.0, tức là "lắng nghe" requests từ mọi địa chỉ IP.
Ở bước này, tùy thuộc vào hệ điều hành và ứng dụng chạy MySQL server đã cài, mà sẽ có các thao tác khác nhau. Nhưng nhìn chung, thao tác cơ bản sẽ là:
Mở file cấu hình MySQL -> Tìm dòng bind-address -> Sửa “127.0.0.1” thành “0.0.0.0” -> Save file cấu hình -> Đóng file cấu hình.
Đây là địa chỉ file cấu hình MySQL trong 1 số hệ điều hành:
-
Nếu dùng MySQL server thông qua xampp trên Window: C:\xampp\mysql\bin\my.ini
![]()
-
Nếu dùng MySQL server trên Ubuntu: /etc/mysql/mysql.conf.d/mysqld.cnf
![]()
3. Hạ firewall (nếu có)
Tương tự bước trước, bước này cũng tùy thuộc vào hệ điều hành và loại máy mà có cách hạ firewall khác nhau. Hãy tự google tra cách hạ firewall trên máy bạn nhé =))
Lưu ý: Firewall có tác dụng bảo mật kết nối mạng, chỉ nên hạ firewall cho port 3306 (mặc định của MySQL) nếu bạn vẫn muốn kết nối mạng một cách bảo mật.
4. Làm cho các máy dùng chung một mạng LAN
Mạng LAN (Local Arena Network) là một nhóm các thiết bị có thể giao tiếp trực tiếp với nhau mà không cần đi qua Internet.
Mạng LAN là kiến thức thuần kỹ thuật, đi sâu vào mạng LAN trong bài viết này thì lệch chủ đề quá, các bạn cứ nhớ thế này là được: Trong thực tế, các thiết bị bắt chung mạng từ 1 cục wifi sẽ thường ở trong cùng 1 mạng LAN.
Nhưng chỉ là "thường là" thôi, làm thế nào để biết chắc chắn các máy có ở trong cùng 1 mạng LAN hay không? Bạn có thể dựa vào địa chỉ IP và subnet mask của các máy nhé!
Để xem địa chỉ IP và subnet mask trên máy, bạn mở terminal (hoặc command prompt) lên, gõ lệnh ipconfig (nếu dùng Window) hoặc ip a (nếu dùng Ubuntu) và bấm enter.
Máy bạn có thể có nhiều địa chỉ IP. Nếu máy bạn sử dụng mạng wifi không dây, thì lấy địa chỉ IPv4 trong mục Wireless LAN adapter Wi-Fi. Nếu sử dụng mạng dây ethernet, lấy trong mục Ethernet adapter Ethernet (như ảnh dưới):

Sau khi biết địa chỉ IP trên các máy rồi, hãy sử dụng công thức sau để check xem các máy có trong cùng 1 mạng LAN không nhé:
Giả sử máy A có IPv4 là a.b.c.d, máy B có IPv4 là x.y.z.t
Máy A và máy B trong cùng 1 mạng LAN khi:
- TH1: subnet mask của cả 2 máy là 255.255.255.0 và a=x & b=y & c=z
- TH2: subnet mask của cả 2 máy là 255.255.0.0 và a=x & b=y
- TH3: subnet mask của cả 2 máy là 255.0.0.0 và a=x
Nhưng nếu cả 2 máy không thể bắt chung mạng được, thì làm thế nào để kết nối bây giờ 🙄
Không thành vấn đề, vì hiện nay có một số phần mềm cho phép tạo mạng LAN ảo, ví dụ như Radmin. Bạn hãy tải và set up để các máy về chung 1 mạng LAN nhé.
Nếu dùng các phần mềm này, IP và subnet mask của máy bạn phải lấy ở mục tương ứng, như mình dùng Radmin thì sẽ phải lấy trong mục Ethernet adapter Radmin VPN

5. Hoàn thành kết nối
Sau khi đã đáp ứng đủ 4 điều kiện trên, tại các máy client, mở terminal ra và gõ lệnh:
Test-NetConnection <IP máy server> -Port <port máy server>
Ví dụ: Test-NetConnection 175.126.1.89 -Port 3306
Nếu kết quả như bên dưới, thì các máy client có thể connect với MySQL server rồi nha:
TcpTestSucceeded : True
Giờ thì, mở ứng dụng cho phép thực hiện truy vấn MySQL server (MySQL Workbench / Dbeaver /...) trong máy client lên, ấn tạo kết nối mới, điền các thông tin sau trong cửa sổ kết nối:
- Server host: IP của máy server
- Post: mặc định là 3306
- Database name: tên của database muốn kết nối
- Username: username đã tạo cho user ở bước 1, VD: vinam
- Password: password đã tạo cho user ở bước 1, VD: 123456
Cuối cùng, ấn connection, thế là giờ máy tính của những người khác đã truy cập được vào database trên máy bạn!
Lưu ý nho nhỏ:
Khi sử dụng DBeaver trên máy client để tạo kết nối. Sau khi thực hiện các bước trên, lúc ấn connection có thể hiện ra 1 cửa sổ lỗi: “Public Key Retrieval is not allowed”. Đây là lỗi authentication của MySQL.
Để fix lỗi này, thực hiện các bước sau:
- Mở tab Driver Properties
- Tìm mục allowPublicKeyRetrieval -> chọn thành True
- Tìm mục useSSL -> chọn thành False
C. LỜI KẾT
Đến đây, mong là bạn đã nắm được cách set up để giúp các máy khác truy cập được vào database trong máy bạn. Nếu bài viết hữu ích, đừng ngại cho mình 1 like và 1 share nhaa 😘
Mình hiện đang làm Data Analyst cho 1 công ty kinh doanh thời trang nữ. Nếu bạn có hứng thú về lĩnh vực DA, hay có góp ý/thắc mắc về bài viết trên, liên hệ với mình qua email vithanhnam1408@gmail.com nhé.
Chúc bạn có 1 ngày làm việc hiệu quả! 🔥
TÀI LIỆU THAM KHẢO:
https://www.digitalocean.com/community/tutorials/how-to-allow-remote-access-to-mysql
https://www.cloudflare.com/learning/network-layer/what-is-a-lan/
https://www.cloudflare.com/learning/network-layer/what-is-a-subnet/
All rights reserved

