Bạn đang quản lý một máy chủ Ubuntu 20.04 và sử dụng MySQL làm hệ quản trị cơ sở dữ liệu? Vậy thì chắc hẳn bạn đã quen thuộc với thư mục dữ liệu mặc định của nó. Tuy nhiên, việc lưu trữ toàn bộ dữ liệu quan trọng này trên cùng phân vùng với hệ điều hành tiềm ẩn nhiều rủi ro. Khi dung lượng phân vùng hệ thống cạn kiệt, website của bạn có thể ngừng hoạt động, hiệu suất giảm sút và việc quản lý trở nên phức tạp. Di chuyển thư mục dữ liệu MySQL sang một vị trí mới, chẳng hạn như một ổ đĩa riêng, là giải pháp tối ưu. Bài viết này của AZWEB sẽ hướng dẫn bạn chi tiết từng bước, từ chuẩn bị, thực thi đến xử lý lỗi, giúp bạn làm chủ hoàn toàn quá trình này một cách an toàn và hiệu quả.
Tìm hiểu về thư mục dữ liệu MySQL trên Ubuntu 20.04
Để bắt đầu, chúng ta cần hiểu rõ về “trái tim” của MySQL – thư mục dữ liệu. Nắm vững vai trò và lý do cần thay đổi vị trí của nó sẽ giúp bạn thực hiện quá trình một cách tự tin hơn.
Vị trí thư mục dữ liệu mặc định của MySQL
Trên Ubuntu 20.04, khi bạn cài đặt MySQL, tất cả dữ liệu của bạn, bao gồm các bảng, chỉ mục và cấu trúc cơ sở dữ liệu, đều được lưu trữ tại một vị trí mặc định là /var/lib/mysql. Thư mục này đóng vai trò trung tâm, chứa đựng toàn bộ thông tin mà cơ sở dữ liệu của bạn quản lý. Mọi thao tác đọc, ghi, cập nhật hay xóa dữ liệu đều diễn ra trực tiếp bên trong thư mục này. Vì vậy, sự ổn định và an toàn của nó ảnh hưởng trực tiếp đến hoạt động của toàn bộ ứng dụng và website sử dụng MySQL.

Lý do và lợi ích khi thay đổi vị trí thư mục dữ liệu
Mặc dù vị trí mặc định rất tiện lợi cho việc cài đặt ban đầu, việc duy trì nó về lâu dài có thể gây ra nhiều vấn đề. Di chuyển thư mục dữ liệu sang một phân vùng hoặc ổ đĩa riêng biệt mang lại nhiều lợi ích thiết thực:
- Cải thiện hiệu suất: Tách biệt hoạt động I/O (Input/Output) của cơ sở dữ liệu ra khỏi hệ điều hành giúp giảm xung đột tài nguyên. Nếu bạn chuyển dữ liệu sang một ổ SSD tốc độ cao, hiệu suất truy vấn và xử lý dữ liệu sẽ được cải thiện đáng kể. Bạn có thể tham khảo thêm về hệ điều hành Linux và cách tối ưu hiệu suất trên đó.
- Quản lý dữ liệu linh hoạt: Khi dữ liệu MySQL nằm trên một phân vùng riêng, bạn có thể dễ dàng theo dõi, mở rộng dung lượng lưu trữ mà không ảnh hưởng đến phân vùng hệ thống. Điều này giúp tránh tình trạng website “sập” đột ngột do hết dung lượng ổ đĩa.
- Tăng cường bảo mật và sao lưu: Việc tách biệt dữ liệu giúp đơn giản hóa quá trình sao lưu (backup là gì) và phục hồi. Bạn có thể tạo snapshot là gì cho toàn bộ phân vùng dữ liệu một cách nhanh chóng hoặc thiết lập các cơ chế bảo mật riêng cho ổ đĩa đó mà không làm phức tạp hóa cấu hình hệ thống.
Các bước chuẩn bị trước khi đổi thư mục dữ liệu MySQL
Sự chuẩn bị kỹ lưỡng là chìa khóa để quá trình di chuyển diễn ra suôn sẻ và không làm mất mát dữ liệu. Đừng bao giờ bỏ qua giai đoạn quan trọng này.
Backup dữ liệu MySQL an toàn
Đây là bước bắt buộc và quan trọng nhất. Dù quy trình có an toàn đến đâu, rủi ro luôn có thể xảy ra. Việc có một bản sao lưu đầy đủ sẽ giúp bạn phục hồi lại trạng thái ban đầu nếu có bất kỳ sự cố nào. Bạn có thể chọn một trong hai phương pháp sau:
- Sử dụng
mysqldump: Công cụ này cho phép bạn xuất toàn bộ cơ sở dữ liệu ra một file SQL duy nhất. Đây là cách backup logic, an toàn và được khuyến nghị. - Sao chép trực tiếp thư mục: Một cách khác là sao chép toàn bộ thư mục
/var/lib/mysqlsang một vị trí an toàn. Tuy nhiên, hãy đảm bảo dịch vụ MySQL đã được dừng hoàn toàn trước khi thực hiện.

Kiểm tra phân vùng, cấp đủ dung lượng và chuẩn bị thư mục mới
Sau khi đã có bản backup an toàn, bạn cần chuẩn bị “ngôi nhà mới” cho dữ liệu của mình. Giả sử bạn muốn chuyển dữ liệu đến /mnt/data/mysql.
- Tạo thư mục mới: Sử dụng lệnh
mkdirđể tạo thư mục. Bạn cần tạo cấu trúc thư mục đầy đủ. -
sudo mkdir -p /mnt/data/mysql - Kiểm tra dung lượng: Đảm bảo rằng phân vùng mới (
/mnt/data) có đủ dung lượng trống để chứa toàn bộ dữ liệu từ thư mục cũ. Bạn có thể dùng lệnhdf -hđể kiểm tra dung lượng các phân vùng. - Phân quyền ban đầu: Mặc dù chúng ta sẽ thiết lập lại quyền ở các bước sau, việc hiểu rõ cấu trúc quyền là rất cần thiết. Thư mục này cuối cùng sẽ cần thuộc sở hữu của người dùng
mysql. Thông tin chi tiết về phần mềm hệ thống là gì cũng có thể giúp bạn hiểu rõ môi trường vận hành MySQL.
Hướng dẫn thay đổi thư mục dữ liệu MySQL trên Ubuntu 20.04
Bây giờ, chúng ta sẽ đi vào phần chính: di chuyển dữ liệu và cấu hình lại MySQL để nó nhận diện được vị trí mới. Hãy thực hiện cẩn thận từng bước một.
Dừng dịch vụ MySQL an toàn
Trước khi sao chép bất kỳ tệp dữ liệu nào, bạn phải đảm bảo rằng MySQL không còn hoạt động. Việc này ngăn chặn mọi thay đổi dữ liệu trong quá trình di chuyển, đảm bảo tính toàn vẹn. Sử dụng lệnh sau để dừng dịch vụ MySQL:
sudo systemctl stop mysql
Để chắc chắn dịch vụ đã dừng hoàn toàn, bạn có thể kiểm tra trạng thái của nó:
sudo systemctl status mysql
Kết quả trả về nên hiển thị trạng thái “inactive (dead)”. Việc này giúp tăng high availability là gì khi bảo trì hoặc di chuyển dữ liệu MySQL.

Sao chép dữ liệu sang vị trí thư mục mới
Bây giờ, chúng ta sẽ sao chép toàn bộ nội dung từ thư mục mặc định sang thư mục mới đã tạo. Sử dụng lệnh rsync với tùy chọn -a (archive) là lựa chọn tốt nhất vì nó sẽ giữ nguyên tất cả các thuộc tính của tệp, bao gồm cả quyền sở hữu và quyền truy cập.
sudo rsync -av /var/lib/mysql/ /mnt/data/mysql/
Sau khi quá trình sao chép hoàn tất, bạn nên kiểm tra lại để xác nhận dữ liệu đã được chuyển đầy đủ và chính xác.
Cập nhật cấu hình MySQL
MySQL cần biết vị trí mới của thư mục dữ liệu. Chúng ta cần cập nhật thông tin này trong tệp cấu hình chính của nó. Mở tệp cấu hình mysqld.cnf bằng một trình soạn thảo văn bản như nano:
sudo nano /etc/mysql/mysql.conf.d/mysqld.cnf
Tìm đến dòng có chứa datadir. Mặc định, nó sẽ có giá trị là datadir = /var/lib/mysql. Hãy thay đổi đường dẫn này thành vị trí thư mục mới của bạn:
datadir = /mnt/data/mysql
Sau khi chỉnh sửa, hãy lưu và đóng tệp. Để hiểu rõ hơn về các thao tác qua giao diện dòng lệnh, bạn có thể đọc thêm nội dung về cli là gì.

Cấp quyền phù hợp cho thư mục dữ liệu mới
Đây là một bước cực kỳ quan trọng. MySQL chạy dưới quyền của người dùng và nhóm mysql. Do đó, thư mục dữ liệu mới phải thuộc sở hữu của mysql:mysql để dịch vụ có thể đọc và ghi dữ liệu. Sử dụng lệnh chown để thay đổi quyền sở hữu:
sudo chown -R mysql:mysql /mnt/data/mysql
Lệnh này sẽ gán quyền sở hữu cho người dùng mysql và nhóm mysql trên toàn bộ thư mục /mnt/data/mysql và các tệp con bên trong nó. Để hiểu thêm về môi trường máy chủ ảo mà bạn có thể sử dụng để thử nghiệm, tham khảo bài viết máy ảo là gì hoặc công nghệ vmware là gì, hypervisor là gì.

Khởi động lại dịch vụ MySQL và kiểm tra trạng thái
Tất cả các bước chuẩn bị và cấu hình đã hoàn tất. Bây giờ là lúc khởi động lại MySQL và xem thành quả. Sử dụng lệnh sau để khởi động dịch vụ:
sudo systemctl start mysql
Ngay sau đó, hãy kiểm tra trạng thái để đảm bảo mọi thứ hoạt động bình thường:
sudo systemctl status mysql
Nếu trạng thái hiển thị là “active (running)”, xin chúc mừng! Bạn đã di chuyển thành công thư mục dữ liệu MySQL. Nếu không, hãy chuyển sang phần tiếp theo để xử lý lỗi.
Xử lý lỗi thường gặp sau khi di chuyển thư mục dữ liệu MySQL
Đôi khi, quá trình không diễn ra hoàn hảo như mong đợi. Đừng lo lắng, hầu hết các lỗi đều xuất phát từ những nguyên nhân phổ biến và có thể khắc phục được.
Lỗi không khởi động được dịch vụ MySQL
Đây là lỗi phổ biến nhất. Khi bạn chạy systemctl start mysql và dịch vụ không thể khởi động, nguyên nhân thường nằm ở hai vấn đề chính:
- Nguyên nhân: Sai đường dẫn
datadirtrong tệp cấu hình hoặc sai quyền sở hữu/quyền truy cập trên thư mục dữ liệu mới. MySQL không thể tìm thấy hoặc không có quyền ghi vào thư mục dữ liệu của nó. - Cách kiểm tra và khắc phục:
- 1. Kiểm tra log lỗi: Đây là bước đầu tiên để chẩn đoán. Chạy lệnh
sudo journalctl -xeu mysqlđể xem chi tiết lỗi. Log sẽ cho bạn biết chính xác tại sao MySQL không khởi động được. - 2. Xác thực đường dẫn: Mở lại tệp
/etc/mysql/mysql.conf.d/mysqld.cnfvà kiểm tra kỹ xem giá trị củadatadircó chính xác tuyệt đối không, không có lỗi chính tả hay ký tự thừa. - 3. Kiểm tra lại quyền: Chạy lệnh
ls -ld /mnt/data/mysql(thay bằng đường dẫn của bạn). Kết quả phải hiển thịmysql mysqlở cột chủ sở hữu. Nếu không, hãy chạy lại lệnhsudo chown -R mysql:mysql /mnt/data/mysql.

Lỗi thiếu quyền truy cập thư mục hoặc tập tin
Ngay cả khi dịch vụ khởi động, bạn vẫn có thể gặp lỗi liên quan đến quyền khi ứng dụng cố gắng truy cập cơ sở dữ liệu.
- Nguyên nhân: Lỗi này thường xảy ra do AppArmor, một module bảo mật của Linux, chặn MySQL truy cập vào đường dẫn mới. Cấu hình mặc định của AppArmor chỉ cho phép MySQL truy cập vào
/var/lib/mysql. - Cách sửa phân quyền đúng chuẩn: Bạn cần phải “dạy” cho AppArmor về vị trí mới.
- 1. Mở tệp cấu hình của AppArmor cho MySQL:
sudo nano /etc/apparmor.d/tunables/alias. - 2. Thêm một dòng alias để trỏ đường dẫn cũ đến đường dẫn mới:
alias /var/lib/mysql/ -> /mnt/data/mysql/, - 3. Lưu tệp và khởi động lại AppArmor để áp dụng thay đổi:
sudo systemctl reload apparmor. - 4. Cuối cùng, khởi động lại MySQL:
sudo systemctl restart mysql.

Những lưu ý và best practices khi di chuyển thư mục dữ liệu MySQL
Để đảm bảo quá trình di chuyển luôn an toàn và hiệu quả, hãy ghi nhớ những nguyên tắc vàng sau đây. Đây là kinh nghiệm được đúc kết từ AZWEB để giúp bạn tránh những sai lầm không đáng có.
- Luôn backup dữ liệu trước khi thay đổi: Đây là quy tắc không bao giờ được phá vỡ. Một bản sao lưu là tấm vé bảo hiểm duy nhất của bạn khi có sự cố xảy ra. Xem thêm chi tiết về backup là gì.
- Kiểm tra kỹ cấu hình và phân quyền: Sai một ký tự trong đường dẫn hoặc một thiết lập sai trong quyền sở hữu là nguyên nhân của 90% các lỗi. Hãy kiểm tra lại hai lần trước khi khởi động lại dịch vụ.
- Thực hiện trên môi trường thử nghiệm trước: Nếu bạn đang quản lý một hệ thống quan trọng, hãy luôn thử nghiệm quy trình trên một máy chủ staging hoặc máy ảo là gì có cấu hình tương tự trước khi áp dụng vào môi trường production.
- Lưu ý tương thích phiên bản: Các bước trong hướng dẫn này phù hợp với MySQL trên Ubuntu 20.04. Tuy nhiên, nếu bạn sử dụng phiên bản khác, hãy kiểm tra tài liệu chính thức để đảm bảo các đường dẫn tệp cấu hình không có gì thay đổi.
- Không bao giờ thay đổi khi MySQL đang hoạt động: Luôn đảm bảo dịch vụ MySQL đã được dừng hoàn toàn (
systemctl stop mysql) trước khi bạn sao chép, di chuyển hoặc thay đổi bất kỳ tệp dữ liệu nào.
Kết luận
Việc di chuyển thư mục dữ liệu MySQL trên Ubuntu 20.04 từ vị trí mặc định sang một phân vùng mới là một bước đi chiến lược, mang lại nhiều lợi ích về hiệu suất, khả năng quản lý và bảo mật. Mặc dù quy trình có vẻ phức tạp với nhiều bước, nhưng nếu bạn tuân thủ chính xác theo hướng dẫn từ AZWEB, từ việc sao lưu cẩn thận, sao chép dữ liệu, cập nhật cấu hình đến việc phân quyền chính xác, bạn hoàn toàn có thể thực hiện thành công. Quản lý tốt cơ sở dữ liệu là nền tảng cho một website hoặc ứng dụng hoạt động ổn định và hiệu quả. Đừng ngần ngại áp dụng kiến thức này vào hệ thống của bạn và hãy tiếp tục theo dõi các bài viết chuyên sâu khác của AZWEB để nâng cao kỹ năng quản trị hệ thống của mình. Để mở rộng thêm kiến thức về hệ điều hành Ubuntu nói riêng và hệ điều hành là gì nói chung, bạn đừng bỏ qua những bài viết liên quan.