Hướng Dẫn Toàn Diện: Di Chuyển Dữ Liệu MariaDB Và Khắc Phục Lỗi Không...
Hướng Dẫn Toàn Diện: Di Chuyển Dữ Liệu MariaDB Và Khắc Phục Lỗi Không Khởi Động Được Trên DirectAdmin
Khi máy chủ cạn kiệt dung lượng ở phân vùng gốc, việc di chuyển thư mục dữ liệu của MariaDB (datadir) sang phân vùng khác (ví dụ: /home/mysql) là một giải pháp phổ biến. Tuy nhiên, quá trình này rất dễ phát sinh lỗi liên quan đến quyền truy cập, socket, hoặc khởi động thất bại do dữ liệu chưa đồng bộ xong.
Bài viết này sẽ hướng dẫn bạn quy trình chuẩn xác nhất để thực hiện công việc này trên hệ thống sử dụng DirectAdmin.
Bước 1: Đồng Bộ Dữ Liệu An Toàn Với Rsync
Lỗi phổ biến nhất khiến MariaDB không thể khởi động sau khi đổi thư mục là do dữ liệu vẫn đang trong quá trình sao chép hoặc bị lỗi do gián đoạn kết nối SSH. Để khắc phục, bạn cần sử dụng rsync chạy ngầm.
Sử dụng lệnh sau để sao chép dữ liệu giữ nguyên toàn bộ quyền (owner, group, permission) và chạy nền an toàn:
nohup ionice -c2 -n7 nice -n 19 rsync -aHAXvh --numeric-ids --ignore-existing --info=progress2 /home1/home/ /home/ > /root/rsync_home.log 2>&1 &
Các cách kiểm tra tiến độ rsync:
Theo dõi log trực tiếp:
tail -f /root/rsync_home.logKiểm tra xem rsync còn chạy không:
pgrep -af rsyncĐếm số file còn lại cần kiểm tra:
grep "to-check" /root/rsync_home.log | tail
Lưu ý Quan Trọng: Tuyệt đối không khởi động lại dịch vụ MariaDB trong lúc tiến trình
rsyncvẫn đang diễn ra để tránh hỏng hóc cơ sở dữ liệu.
Bước 2: Thiết Lập Quyền Sở Hữu Và SELinux
Sau khi rsync đã báo hoàn tất, bạn cần đảm bảo thư mục đích thuộc đúng quyền sở hữu của MariaDB/MySQL.
1. Cấp quyền sở hữu thư mục:
chown -R mysql:mysql /home/mysql
2. Cập nhật nhãn SELinux (Nếu máy chủ bật SELinux):
restorecon -Rv /home/mysql
Bước 3: Chuẩn Bị Thư Mục Chứa PID Và Socket
Trong quá trình khởi động, MariaDB cần ghi file .pid và .sock. Cấu hình mặc định có thể trỏ tới nhiều nơi khác nhau gây xung đột (như /var/run/mysqld hoặc /run/mysql). Để nhất quán, hãy tạo thư mục chuẩn:
mkdir -p /run/mysql
chown mysql:mysql /run/mysql
chmod 755 /run/mysql
Bước 4: Cập Nhật Cấu Hình MariaDB Và DirectAdmin
Bạn cần sửa hai file cấu hình quan trọng để đảm bảo cả hệ thống MariaDB và DirectAdmin đều sử dụng chung một cấu hình.
1. Chỉnh sửa file /etc/my.cnf:
Thêm hoặc sửa khối [mysqld] với đường dẫn mới:
[mysqld]
datadir=/home/mysql
socket=/run/mysql/mysql.sock
pid-file=/run/mysql/mysqld.pid
log-error=/home/mysql/mysqld.log
2. Chỉnh sửa file /etc/my.cnf.d/directadmin-socket.cnf:
Điều chỉnh đường dẫn socket để DirectAdmin có thể kết nối được cơ sở dữ liệu:
[client]
socket=/run/mysql/mysql.sock
Bước 5: Khởi Động Dịch Vụ Và Kiểm Tra
Sau khi đã hoàn tất các cấu hình, tiến hành nạp lại systemd và khởi động MariaDB:
systemctl daemon-reload
systemctl restart mariadb
systemctl status mariadb
Nếu trạng thái hiển thị Active (running), quá trình đã thành công.
Cách đối chiếu dữ liệu phòng hờ thiếu sót:
Để chắc chắn MariaDB đã nhận đủ các database trong thư mục mới, hãy chạy lệnh liệt kê database thông qua tài khoản quản trị của DirectAdmin (da_admin):
mysql -uda_admin -p -e "SHOW DATABASES;"
(Bạn có thể lấy mật khẩu của da_admin bằng lệnh: grep '^passwd=' /usr/local/directadmin/conf/mysql.conf | cut -d= -f2)
Hãy đối chiếu danh sách trả về với danh sách thư mục vật lý:
ls -1 /home/mysql
Nếu số lượng database giữa câu lệnh SQL và danh sách thư mục vật lý khớp nhau, quá trình di chuyển của bạn đã hoàn thành xuất sắc!