DirectAdmin phân vùng /Var/Lib/MySQL/ chiếm nhiều dung lượng

4.5/5 – (1084 bình chọn)

/var is full hay còn được gọi là phân vùng var trên linux bị đầy.

  • Cài đặt OPcache Directadmin chạy CustomBuild 2.0
  • Nâng cấp phiên bản CustomBuild từ 1.x lên 2.0
  • Hướng dẫn sử dụng screen trên hệ thống linux

Trong quá trình hoạt động của một hệ thống Directadmin đôi lúc chúng ta không tránh khỏi những vấn đề khi bị đầy dung lượng.

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.

Hình này là sau khi mình đã xử lý vấn đề xong, trước đó / 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.

Hôm nay 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 được dẫn lưu database mặc định. Trước khi tìm ra cách này mình đã thử thay đổi được dẫn mặc định nhưng gặp rất nhiều lỗi, đến mức phải nhờ sự trợ giúp của recovery “innodb_force_recovery = 1 & log_bin=ON” mới có thể bật lại mysqld.

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

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:
  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

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

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:

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.

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:
  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:

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 is full” đã được xử lý xong.
Chúc các bạn thành công.

Comments

No comments yet. Why don’t you start the discussion?

Leave a Reply

Your email address will not be published. Required fields are marked *