Skip to content Skip to main navigation Skip to footer

Hướng dẫn xử lý phân vùng /var bị đầy với 4 bước – Directadmin

LƯU Ý: Hướng dẫn này sẽ thao tác trực tiếp với cơ sở dữ liệu của bạn, bạn nên sao lưu đầy đủ dữ liệu trước khi thực hiện theo hướng dẫn này.

Mô tả chung

Trong quá trình hoạt động của một hệ thống đôi lúc chúng ta không tránh khỏi những vấn đề khi bị đầy dung lượng. Trong bài viết này mình sẽ giúp các bạn xử lý một vấn đề đầy dung lượng liên quan đến Directadmin.

Như trong hình bên dưới là hệ thống Directadmin của mình, mình đã mắc sai lầm khi để CentOS tự chia phân vùng(partition) mặc định. Và nó chỉ chia phân vùng / chỉ 50GB mà thôi.

/var bị đầy
Hình này là sau khi mình đã xử lý vấn đề xong, trước đó phân vùng / của mình chiếm đến 95%

Xem qua hình chắc bạn cũng nhận ra là phân vùng “/” của mình chỉ có 50GB còn “/home” thì còn trống khá nhiều.

Mặc định tất cả các Database Mysql sẽ được lưu trong thư mục /var/lib/mysql/ và mình đã gặp vấn đề lớn đó là có quá nhiều Database nặng đến rất nặng.

Để khắc phục mình sẽ hướng dẫn các bạn cách giải phóng dung lượng cho thư mục /var/lib/mysql/ mà không cần phải thay đổi đường dẫn lưu database mặc định.

Cách xử lý phân vùng /var bị đầy khi thư mục chứa database chiếm quá nhiều dung lượng hệ thống chạy Directadmin:

Bước 1: Tạo một thư mục mysql tại /home và phân quyền với user và group đều là mysql:

AZDIGI Tutorial
cd /home
mkdir mysql
chown mysql:mysql mysql
cd mysql
    

Giải thích các lệnh trên:

  1. Di chuyển đến “/home”
  2. Tạo một thư mục có tên “mysql”
  3. Phân quyền user và group là mysql cho thư mục mới tạo
  4. Di chuyển vào thư mục mysql

Bước 2: Dừng dịch vụ mysqld:

AZDIGI Tutorial
perl -pi -e 's/mysqld=ON/mysqld=OFF/' /usr/local/directadmin/data/admin/services.status
/sbin/service mysqld stop
    

Giải thích các lệnh trên:

  1. Chuyển trạng thái khởi động cùng hệ thống của dịch vụ mysqld từ “ON” sang “OFF”
  2. Dừng dịch vụ mysql

Bước 3: Di chuyển tất cả dữ liệu từ /var/lib/mysql/ đến /home/mysql và tạo lại liên kết  qua nguồn dữ liệu mới:

AZDIGI Tutorial
cd /home/mysql
cp -Rp /var/lib/mysql/* .
cd /var/lib
mv mysql mysql_old
ln -s /home/mysql ./mysql
    

Giải thích các lệnh trên:

  1. Di chuyển đến thư mục “/home/mysql”
  2. Sao chép tất cả dữ liệu từ “/var/lib/mysql/” đến thư mục bạn đang đứng(/home/mysql), giữ nguyên thuộc tính và quyền.
  3. Di chuyển đến thư mục “/var/lib”
  4. Đổi tên thư mục “mysql” thành “mysql_old” trong “/var/lib”
  5. Tạo liên kết tượng trưng “/var/lib/mysql” đến “/home/mysql”

Sau khi làm xong bước 3 bạn thử kiểm tra liên kết đã chính xác chưa nhé, ta dùng lệnh sau:

AZDIGI Tutorial
ll /var/lib/
    

Nếu hiện thị thư mục mysql như hình sau là bạn đã thành công, nếu chưa chính xác bạn xem lại các bước trên xem đã làm nhầm lẫn ở bước nào không nhé.

/var bị đầy

Thư mục mysql mới được link với thư mục mysql cũ, nhằm giúp / giảm dung lượng bị chiếm dụng.

Bước 4: Bật lại dịch vụ mysqld và cho phép khởi động cùng hệ thống

AZDIGI Tutorial
/sbin/service mysqld start
perl -pi -e ‘s/mysqld=OFF/mysqld=ON/’ /usr/local/directadmin/data/admin/services.status
    

Giải thích các lệnh trên:

  1. Bật lại dịch vụ mysql
  2. Chuyển trạng thái khởi động cùng hệ thống của dịch vụ mysqld từ “OFF” sang “ON”

Sau khi hoàn thành bước 4, các bạn kiểm tra các dịch vụ đã hoạt động bình thường hay chưa, nếu mọi thứ đã hoạt động bình thường các bạn có thể xóa thư mục /var/lib/mysql_old với lệnh sau:

AZDIGI Tutorial
rm -rf /var/lib/mysql_old
    

Như vậy là các bạn đã chuyển toàn bộ dữ liệu từ /var/lib/mysql sang phân vùng mới là /home/mysql nhưng dịch vụ mysql vẫn hiểu và hoạt động bình thường. Và vấn đề /var bị đầy đã được xử lý xong.

Chúc các bạn thành công.

Bài viết tham khảo từ nguồn: /var is full

Bình chọn lsvr_kba