Bạn đã bao giờ gặp phải tình huống ổ cứng chứa dữ liệu website cạn kiệt dung lượng chưa? Hoặc có lẽ bạn muốn tăng tốc độ truy xuất dữ liệu bằng cách chuyển sang ổ SSD mới nhanh hơn? Đây là những vấn-đề-rất-phổ-biến-mà-bất-kỳ-người-quản-trị-website-nào-cũng-có-thể-gặp-phải.-Một-trong-những-giải-pháp-hiệu-quả-nhất-chính-là-di-chuyển-thư-mục-dữ-liệu-của-MariaDB-sang-một-vị-trí-lưu-trữ-mới.-Đây-không-chỉ-là-việc-sao-chép-và-dán-đơn-thuần,-mà-là-một-quy-trình-kỹ-thuật-đòi-hỏi-sự-chính-xác-tuyệt-đối-để-đảm-bảo-an-toàn-dữ-liệu-và-sự-ổn-định-của-hệ-thống.-Trong-bài-viết-này,-Bùi-Mạnh-Đức-sẽ-hướng-dẫn-bạn-từng-bước-chi-tiết,-từ-sao-lưu-an-toàn,-di-chuyển-đúng-cách,-đến-xử-lý-các-lỗi-thường-gặp-khi-thực-hiện-trên-hệ-điều-hành-CentOS-7.
Giới thiệu về thư mục dữ liệu của MariaDB và tầm quan trọng của việc di chuyển
Đối với bất kỳ hệ quản trị cơ sở dữ liệu nào, thư mục dữ liệu chính là trái tim của hệ thống, và MariaDB cũng không ngoại lệ. Mặc định trên CentOS 7, thư mục này thường được đặt tại /var/lib/mysql. Đây là nơi lưu trữ tất cả mọi thứ làm nên website của bạn: từ bài viết, thông tin sản phẩm, dữ liệu người dùng cho đến các cấu hình quan trọng. Toàn bộ hoạt động của cơ sở dữ liệu đều xoay quanh việc đọc và ghi dữ liệu tại đây.
Vậy tại sao chúng ta lại cần di chuyển “trái tim” này đi nơi khác? Có một vài lý do chính đáng. Phổ biến nhất là do vấn đề dung lượng. Khi website phát triển, lượng dữ liệu tăng lên và ổ cứng mặc định có thể bị đầy, gây ảnh hưởng trực tiếp đến hoạt động của trang web. Một lý do quan trọng khác là để tối ưu hiệu năng. Bằng cách di chuyển thư mục dữ liệu sang một ổ cứng có tốc độ cao hơn, chẳng hạn như ổ SSD NVMe, bạn có thể cải thiện đáng kể tốc độ tải trang và khả năng xử lý của website. Ngoài ra, việc tách biệt dữ liệu ra khỏi ổ cứng hệ điều hành cũng là một chiến lược quản trị hệ thống tốt, giúp việc sao lưu và phục hồi trở nên dễ dàng hơn.
Quá trình di chuyển này đòi hỏi sự cẩn trọng và phải tuân thủ theo một quy trình chuẩn. Về cơ bản, chúng ta sẽ cần: sao lưu toàn bộ cơ sở dữ liệu để phòng ngừa rủi ro, dừng dịch vụ MariaDB để đảm bảo dữ liệu không bị thay đổi, sao chép thư mục dữ liệu sang vị trí mới, cập nhật lại tệp cấu hình để MariaDB “biết” đường đến nhà mới, và cuối cùng là khởi động lại và kiểm tra. Nghe có vẻ phức tạp, nhưng đừng lo, tôi sẽ đồng hành cùng bạn qua từng bước.

Chuẩn bị trước khi di chuyển
Trước khi thực hiện bất kỳ thay đổi lớn nào trên hệ thống, khâu chuẩn bị luôn là bước quan trọng nhất. Nó quyết định sự thành công của cả quá trình và giúp bạn tránh được những rủi ro mất mát dữ liệu không đáng có. Trong việc di chuyển thư mục dữ liệu MariaDB, có hai việc bạn tuyệt đối không được bỏ qua: sao lưu dữ liệu và dừng hoàn toàn dịch vụ.
Sao lưu dữ liệu MariaDB an toàn
“Luôn luôn sao lưu trước khi hành động” là câu thần chú của bất kỳ quản trị viên hệ thống nào. Dù bạn tự tin đến đâu, một bản sao lưu an toàn chính là tấm vé bảo hiểm cho dữ liệu của bạn. Công cụ mạnh mẽ và phổ biến nhất để thực hiện việc này là mysqldump. Lệnh này sẽ xuất toàn bộ cơ sở dữ liệu của bạn thành một tệp tin SQL duy nhất, dễ dàng cho việc lưu trữ và phục hồi khi cần. Đây là một phần không thể thiếu trong Linux là gì.
Để sao lưu toàn bộ các database trên server của bạn, hãy mở terminal và chạy lệnh sau:
mysqldump -u [tên_người_dùng] -p --all-databases > /đường_dẫn_lưu_backup/backup_fulldb.sql
Trong đó, hãy thay [tên_người_dùng] bằng username có quyền truy cập vào MariaDB (thường là `root`). Hệ thống sẽ yêu cầu bạn nhập mật khẩu. Sau khi hoàn tất, bạn sẽ có một tệp backup_fulldb.sql chứa toàn bộ dữ liệu. Điều quan trọng là bạn phải lưu tệp này ở một vị trí an toàn, lý tưởng nhất là trên một ổ cứng khác hoặc một server dự phòng, để đảm bảo nó không bị ảnh hưởng bởi quá trình di chuyển sắp tới.

Dừng dịch vụ MariaDB để tránh lỗi dữ liệu
Tại sao phải dừng dịch vụ MariaDB? Hãy tưởng tượng bạn đang cố gắng dọn nhà trong khi mọi người vẫn đi lại và sử dụng đồ đạc. Chắc chắn sẽ có sự xáo trộn và thất lạc. Tương tự, việc di chuyển các tệp tin dữ liệu trong khi MariaDB vẫn đang hoạt động (ghi hoặc đọc dữ liệu) gần như chắc chắn sẽ dẫn đến lỗi, hỏng dữ liệu (data corruption).
Trên CentOS 7, việc quản lý dịch vụ được thực hiện thông qua systemctl. Để dừng MariaDB, bạn chỉ cần chạy lệnh:
sudo systemctl stop mariadb
Để chắc chắn rằng dịch vụ đã dừng hoàn toàn, hãy kiểm tra lại trạng thái của nó:
sudo systemctl status mariadb
Nếu bạn thấy dòng chữ Active: inactive (dead), điều đó có nghĩa là MariaDB đã được tắt hoàn toàn và bạn đã sẵn sàng cho bước tiếp theo. Đây là bước đệm quan trọng để đảm bảo tính toàn vẹn của dữ liệu trong suốt quá trình di chuyển. Bạn có thể tham khảo thêm về cách dừng và quản lý dịch vụ Linux trong bài viết Linux.

Các bước di chuyển thư mục dữ liệu MariaDB sang vị trí mới trên CentOS 7
Sau khi đã chuẩn bị kỹ lưỡng với bản sao lưu an toàn và dịch vụ đã được tạm dừng, chúng ta sẽ bắt đầu vào phần chính: di chuyển dữ liệu và cấu hình lại hệ thống. Giai đoạn này đòi hỏi sự chính xác trong từng câu lệnh để đảm bảo MariaDB có thể tìm thấy và sử dụng được dữ liệu ở vị trí mới.
Copy thư mục dữ liệu MariaDB sang thư mục đích
Bây giờ, chúng ta sẽ sao chép toàn bộ thư mục dữ liệu mặc định (/var/lib/mysql) sang vị trí mới mà bạn đã chọn (ví dụ: /mnt/new_volume/mysql). Thay vì sử dụng lệnh cp thông thường, tôi khuyên bạn nên dùng lệnh rsync. Tại sao vậy? Vì rsync có khả năng giữ nguyên được tất cả các thuộc tính quan trọng của tệp tin như quyền sở hữu (ownership) và phân quyền (permissions), điều mà lệnh cp đôi khi có thể bỏ sót nếu không dùng đúng tham số.
Hãy chạy lệnh sau, thay thế /đường_dẫn_mới/ bằng thư mục đích của bạn:
sudo rsync -av /var/lib/mysql /đường_dẫn_mới/
Giải thích nhanh các tham số:
-a (archive): Chế độ lưu trữ, nó là một tổ hợp của nhiều tham số khác, giúp giữ nguyên quyền, chủ sở hữu, dấu thời gian, và sao chép đệ quy.
-v (verbose): Hiển thị chi tiết quá trình sao chép, giúp bạn theo dõi được tiến độ.
Quá trình này có thể mất một chút thời gian tùy thuộc vào dung lượng dữ liệu của bạn. Sau khi hoàn tất, bạn đã có một bản sao hoàn chỉnh của thư mục dữ liệu ở vị trí mới.

Chỉnh sửa tập tin cấu hình MariaDB (my.cnf)
Dữ liệu đã ở nhà mới, nhưng MariaDB vẫn chưa biết điều đó. Chúng ta cần “vẽ lại bản đồ” cho nó bằng cách chỉnh sửa tệp tin cấu hình. Trên CentOS 7, tệp cấu hình chính của MariaDB thường nằm tại /etc/my.cnf. Hãy mở tệp này bằng một trình soạn thảo văn bản như nano hoặc vim:
sudo nano /etc/my.cnf
Bên trong tệp này, bạn cần tìm đến khối [mysqld]. Đây là nơi chứa các cấu hình cốt lõi của server MariaDB. Việc quan trọng nhất là thay đổi giá trị của tham số datadir để trỏ đến thư mục mới mà bạn vừa sao chép dữ liệu vào. Đây là kiến thức về Kernel Linux và cách hệ điều hành quản lý dữ liệu cũng như cấu hình của dịch vụ.
Tìm dòng sau:
datadir=/var/lib/mysql
Và sửa nó thành đường dẫn mới của bạn:
datadir=/đường_dẫn_mới/mysql
Ngoài ra, hãy kiểm tra xem có tham số socket hay không. Nếu có, bạn cũng nên cập nhật đường dẫn của nó cho tương ứng với vị trí mới. Ví dụ:
socket=/đường_dẫn_mới/mysql/mysql.sock
Sau khi chỉnh sửa xong, hãy lưu lại và đóng tệp tin. Bước cấu hình này là cực kỳ quan trọng, nếu sai một ký tự, MariaDB sẽ không thể khởi động được.

Thiết lập quyền truy cập và chủ sở hữu cho thư mục dữ liệu mới
Chỉ di chuyển dữ liệu và sửa cấu hình là chưa đủ. MariaDB cần có quyền truy cập và sở hữu thư mục dữ liệu mới để có thể hoạt động. Nếu bỏ qua bước này, bạn gần như chắc chắn sẽ gặp lỗi “Permission denied”. Đây là bước thiết lập “chìa khóa” cho người dùng hệ thống mysql để nó có thể đọc và ghi vào ngôi nhà mới của mình. Đây cũng là chủ đề liên quan đến phần Linux là gì nói về quyền sở hữu và phân quyền trên hệ thống Linux.
Gán quyền sở hữu người dùng mysql cho thư mục mới
MariaDB trên CentOS 7 chạy dưới một người dùng hệ thống đặc biệt tên là mysql. Do đó, người dùng này phải là chủ sở hữu của thư mục dữ liệu. Chúng ta sẽ sử dụng lệnh chown (change owner) để thực hiện việc này. Lệnh này cần được áp dụng đệ quy cho cả thư mục cha và tất cả các tệp tin, thư mục con bên trong.
Hãy chạy lệnh sau, nhớ thay /đường_dẫn_mới/mysql bằng đường dẫn thực tế của bạn:
sudo chown -R mysql:mysql /đường_dẫn_mới/mysql
Giải thích lệnh:
chown: Lệnh thay đổi chủ sở hữu.
-R (Recursive): Áp dụng thay đổi cho tất cả các tệp và thư mục con.
mysql:mysql: Gán quyền sở hữu cho người dùng mysql và nhóm mysql.
Sau khi chạy lệnh này, người dùng mysql đã chính thức làm chủ thư mục dữ liệu mới.

Thiết lập phân quyền phù hợp với bảo mật và hoạt động MariaDB
Ngoài quyền sở hữu, chúng ta cần thiết lập phân quyền truy cập (permissions) một cách chính xác. Đây là bước quan trọng để bảo vệ dữ liệu của bạn khỏi những truy cập trái phép từ các người dùng khác trên cùng hệ thống, đồng thời vẫn đảm bảo MariaDB có đủ quyền để làm việc.
Một cấu hình phân quyền an toàn và phổ biến là 750. Điều này có nghĩa là:
- Chủ sở hữu (
mysql): Có toàn quyền (đọc, ghi, thực thi).
- Nhóm sở hữu (
mysql): Có quyền đọc và thực thi.
- Những người khác: Không có quyền gì cả.
Sử dụng lệnh chmod (change mode) để áp dụng quyền này:
sudo chmod -R 750 /đường_dẫn_mới/mysql
Tương tự như chown, tham số -R đảm bảo rằng quyền 750 được áp dụng cho toàn bộ thư mục và các tệp tin bên trong. Việc thiết lập đúng quyền sở hữu và phân quyền giống như việc bạn giao chìa khóa nhà cho đúng người và quy định ai được phép vào những phòng nào. Nó vừa đảm bảo an ninh, vừa giúp mọi thứ vận hành trơn tru.
Khởi động lại dịch vụ MariaDB và kiểm tra hoạt động sau di chuyển
Đây là thời khắc của sự thật. Sau khi đã di chuyển, cấu hình và phân quyền, đã đến lúc khởi động lại MariaDB và kiểm tra xem mọi nỗ lực của chúng ta có thành công hay không. Bước này sẽ xác nhận rằng MariaDB đã nhận nhà mới và hoạt động ổn định.
Khởi động lại MariaDB bằng systemctl
Bây giờ, chúng ta sẽ sử dụng lại công cụ systemctl để khởi động dịch vụ MariaDB. Hãy chạy lệnh sau trong terminal:
sudo systemctl start mariadb
Sau khi chạy lệnh, đừng vội mừng. Hãy kiểm tra ngay trạng thái của dịch vụ để đảm bảo nó đã khởi động thành công và không gặp bất kỳ lỗi nào:
sudo systemctl status mariadb
Nếu bạn thấy một màu xanh lá cây cùng với dòng chữ Active: active (running), xin chúc mừng! Bạn đã gần như thành công. MariaDB đã khởi động và đang chạy với thư mục dữ liệu mới. Nếu dịch vụ không khởi động được (trạng thái failed), đừng hoảng sợ. Hãy chuyển sang phần xử lý lỗi để tìm nguyên nhân. Việc quản lý dịch vụ MariaDB có thể so sánh với các kiến thức về Linux là gì hoặc Linux.

Xác minh MariaDB hoạt động ổn định với thư mục mới
Dịch vụ chạy không có nghĩa là dữ liệu đã hoàn toàn ổn. Chúng ta cần thực hiện thêm một vài bước kiểm tra để chắc chắn 100%.
Đầu tiên, hãy thử đăng nhập vào MariaDB:
mysql -u [tên_người_dùng] -p
Nếu bạn đăng nhập thành công, đó là một dấu hiệu rất tốt. Tiếp theo, hãy thử chạy một vài truy vấn đơn giản để xác thực dữ liệu. Ví dụ, hiển thị tất cả các cơ sở dữ liệu:
SHOW DATABASES;
Bạn nên thấy danh sách các database quen thuộc của mình. Hãy chọn một database và kiểm tra một bảng cụ thể:
USE [tên_database];
SELECT * FROM [tên_bảng] LIMIT 5;
Nếu dữ liệu trả về đúng như bạn mong đợi, thì quá trình di chuyển đã thành công về mặt dữ liệu. Cuối cùng, một bước không thể thiếu là kiểm tra tệp tin log của MariaDB để tìm các cảnh báo hoặc lỗi tiềm ẩn:
sudo tail -f /var/log/mariadb/mariadb.log
Nếu không có thông báo lỗi nào đáng ngại, bạn có thể hoàn toàn yên tâm rằng hệ thống đang hoạt động ổn định tại vị trí mới.

Xử lý lỗi thường gặp khi di chuyển thư mục dữ liệu MariaDB
Dù đã chuẩn bị kỹ lưỡng, đôi khi lỗi vẫn xảy ra. Đây là chuyện bình thường trong quản trị hệ thống. Điều quan trọng là biết cách nhận diện và khắc phục chúng một cách bình tĩnh. Dưới đây là hai lỗi phổ biến nhất bạn có thể gặp phải khi di chuyển thư mục dữ liệu MariaDB và cách để xử lý chúng.
Lỗi MariaDB không khởi động được do quyền truy cập
Đây là lỗi phổ biến nhất. Biểu hiện là khi bạn chạy systemctl start mariadb, dịch vụ ngay lập tức báo failed. Để tìm nguyên nhân, bạn cần “lắng nghe” hệ thống nói gì. Hãy kiểm tra nhật ký hệ thống bằng lệnh:
sudo journalctl -xe
Hoặc xem trực tiếp log của MariaDB:
sudo tail -n 50 /var/log/mariadb/mariadb.log
Nếu bạn thấy các thông báo chứa cụm từ như “Permission denied” hoặc “Can’t start server: Bind on TCP/IP port: Can’t create/write to file…”, thì 99% nguyên nhân là do sai quyền. Điều này có thể xảy ra do bạn quên chạy chown hoặc chmod, hoặc do một lớp bảo mật khác như SELinux đang chặn truy cập.
Cách sửa:
- Kiểm tra lại quyền sở hữu và phân quyền: Chạy lại hai lệnh
sudo chown -R mysql:mysql /đường_dẫn_mới/mysql và sudo chmod -R 750 /đường_dẫn_mới/mysql.
- Kiểm tra SELinux: SELinux là một module bảo mật mạnh mẽ trên CentOS, nhưng đôi khi nó cũng gây khó khăn. Tạm thời vô hiệu hóa nó để kiểm tra xem có phải nguyên nhân không:
sudo setenforce 0. Nếu sau khi chạy lệnh này mà MariaDB khởi động được, bạn cần cấu hình lại các quy tắc của SELinux cho thư mục dữ liệu mới. Sau khi cấu hình xong, hãy bật lại SELinux bằng sudo setenforce 1.

Lỗi cấu hình sai đường dẫn datadir
Lỗi này xảy ra khi đường dẫn bạn khai báo trong tệp /etc/my.cnf không chính xác: có thể là một lỗi đánh máy, thiếu dấu gạch chéo, hoặc trỏ đến một thư mục không tồn tại.
Biểu hiện: Khi khởi động, log của MariaDB sẽ báo lỗi tương tự như “Fatal error: Can’t open and lock privilege tables: Table ‘mysql.user’ doesn’t exist” hoặc “Can’t find file…”. Về cơ bản, MariaDB không thể tìm thấy các tệp tin hệ thống cần thiết để hoạt động.
Cách sửa:
- Mở lại tệp cấu hình:
sudo nano /etc/my.cnf.
- Kiểm tra kỹ lưỡng: Rà soát lại từng ký tự trong đường dẫn của tham số
datadir. Hãy chắc chắn rằng nó hoàn toàn trùng khớp với đường dẫn thực tế nơi bạn đã sao chép dữ liệu đến. Bạn có thể dùng lệnh pwd trong thư mục dữ liệu mới để lấy đường dẫn chính xác và sao chép vào tệp cấu hình.
- Lưu lại và thử khởi động lại: Sau khi đã chắc chắn đường dẫn là chính xác, hãy lưu tệp cấu hình và thử khởi động lại MariaDB bằng
sudo systemctl start mariadb.
Việc xử lý lỗi đòi hỏi sự kiên nhẫn và phương pháp loại trừ. Bằng cách đọc kỹ thông báo lỗi, bạn có thể nhanh chóng xác định được nguyên nhân và áp dụng đúng giải pháp.
Best Practices
Để đảm bảo quá trình di chuyển thư mục dữ liệu MariaDB diễn ra suôn sẻ và an toàn, đồng thời tối ưu hóa cho hoạt động lâu dài, hãy luôn ghi nhớ những kinh nghiệm thực tiễn (best practices) sau đây. Đây là những quy tắc được đúc kết từ kinh nghiệm của nhiều quản trị viên hệ thống chuyên nghiệp.
- Luôn sao lưu dữ liệu trước khi thay đổi: Đây là quy tắc vàng không bao giờ được phá vỡ. Một bản sao lưu đầy đủ là mạng lưới an toàn duy nhất của bạn. Nếu có bất kỳ sự cố không lường trước nào xảy ra, bạn luôn có thể khôi phục lại trạng thái ban đầu.
- Dừng hoàn toàn dịch vụ trước khi di chuyển: Đừng bao giờ cố gắng di chuyển dữ liệu khi MariaDB vẫn đang chạy. Điều này chắc chắn sẽ dẫn đến hỏng dữ liệu (data corruption). Hãy dùng
systemctl status mariadb để xác nhận dịch vụ đã ở trạng thái inactive (dead). Thao tác này tương tự với quản lý dịch vụ trên hệ điều hành Linux như trong bài Linux.
- Đảm bảo phân quyền chính xác: Sai sót trong việc thiết lập
chown và chmod là nguyên nhân phổ biến nhất gây ra lỗi khởi động. Hãy kiểm tra kỹ lưỡng để đảm bảo người dùng mysql có đủ quyền trên thư mục dữ liệu mới.
- Kiểm tra kỹ log và test hoạt động sau khi chuyển đổi: Đừng cho rằng việc dịch vụ khởi động thành công là đã xong. Hãy đăng nhập, thực hiện các truy vấn thử và quan trọng nhất là theo dõi tệp log để phát hiện sớm các cảnh báo hoặc lỗi ngầm.
- Tránh di chuyển dữ liệu trong giờ cao điểm: Quá trình này yêu cầu phải tạm dừng dịch vụ, nghĩa là website của bạn sẽ ngoại tuyến. Hãy lên kế hoạch thực hiện vào thời điểm có ít lưu lượng truy cập nhất, ví dụ như đêm khuya hoặc sáng sớm, để giảm thiểu ảnh hưởng đến người dùng.
- Cân nhắc xóa dữ liệu cũ sau khi xác nhận: Sau khi bạn đã chắc chắn 100% rằng hệ thống đang hoạt động ổn định với thư mục dữ liệu mới trong vài ngày, bạn có thể cân nhắc xóa thư mục dữ liệu cũ (
/var/lib/mysql) để giải phóng dung lượng. Tuy nhiên, hãy thực hiện việc này một cách thận trọng và đảm bảo bạn đã có các bản sao lưu cần thiết.

Kết luận
Qua bài viết này, chúng ta đã cùng nhau đi qua toàn bộ quy trình di chuyển thư mục dữ liệu MariaDB trên hệ điều hành CentOS 7. Từ việc nhận thức tầm quan trọng của thư mục dữ liệu, chuẩn bị kỹ lưỡng bằng cách sao lưu và dừng dịch vụ, cho đến các bước thực thi chi tiết như sao chép dữ liệu, chỉnh sửa cấu hình, và thiết lập quyền truy cập. Hy vọng rằng với hướng dẫn từng bước này, bạn có thể tự tin thực hiện tác vụ quan trọng này một cách an toàn và hiệu quả.
Tóm lại, chìa khóa để thành công nằm ở ba điểm cốt lõi: sao lưu cẩn thận, cấu hình chính xác, và kiểm tra toàn diện. Việc di chuyển thư mục dữ liệu không chỉ giúp bạn giải quyết vấn đề về dung lượng mà còn là cơ hội để tối ưu hóa hiệu năng cho website bằng cách chuyển sang các thiết bị lưu trữ tốc độ cao hơn. Đừng quên rằng việc xử lý lỗi là một phần của quá trình, và việc đọc kỹ thông báo lỗi sẽ giúp bạn nhanh chóng tìm ra giải pháp.
Bùi Mạnh Đức hy vọng bài viết này hữu ích cho bạn trong quá trình quản trị và phát triển website của mình. Nếu bạn có bất kỳ thắc mắc nào, đừng ngần ngại để lại bình luận. Hãy tiếp tục theo dõi blog để cập nhật thêm nhiều kiến thức chuyên sâu về quản trị máy chủ, WordPress và Digital Marketing nhé!