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.
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:
cd /home mkdir mysql chown mysql:mysql mysql cd mysql
Giải thích các lệnh trên:
- Di chuyển đến “/home”
- Tạo một thư mục có tên “mysql”
- Phân quyền user và group là mysql cho thư mục mới tạo
- Di chuyển vào thư mục mysql
Bước 2: Dừng dịch vụ mysqld:
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:
- Chuyển trạng thái khởi động cùng hệ thống của dịch vụ mysqld từ “ON” sang “OFF”
- 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:
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:
- Di chuyển đến thư mục “/home/mysql”
- 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.
- Di chuyển đến thư mục “/var/lib”
- Đổi tên thư mục “mysql” thành “mysql_old” trong “/var/lib”
- 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:
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é.
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
/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:
- Bật lại dịch vụ mysql
- 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:
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