Thứ Tư, 3 tháng 5, 2023

Hướng dẫn xử lý database innodb MySQL bị crash

 Trường hợp database sử dụng innodb bị crash bạn có thể xử lý bằng cách sau:

– Bước 1: Bạn cho start mysql với mode readonly bằng cách:

Mở file: /etc/my.cnf > thêm dòng

innodb_force_recovery = 1

Có thể thay 1 bằng  4 hoặc 6 để start mysql

/usr/libexec/mysqld --skip-grant-tables --user=mysql --skip-external-locking --port=3306 --sock=/tmp/mysql.sock

mysqld_safe --skip-grant-tables --user=mysql --skip-external-locking --port=3306 --sock=/tmp/mysql.sock --innodb_force_recovery 4

– Bước 2: Backup toàn bộ database trên server với lệnh:

mysqldump -u root -p --all-databases > alldb.sql

Trường hợp dump bị lỗi có thể dùng cmd dưới đây

mysqldump -u root -p --complete-insert --routines --triggers --single-transaction --all-databases > alldb.sql

Trường hơp việc dump all database bị lỗi, bạn xem xét dump từng database 1

với script

mysql -N -e 'show databases' | while read dbname; do mysqldump --complete-insert --routines --triggers --single-transaction "$dbname" > /root/backup_db_full/"$dbname".sql; done

– Bước 3: Backup lại folder /var/lib/mysql bằng lệnh: cp -r /var/lib/mysql /var/lib/mysql.bk

– Bước 4: Cho rename các file trong /var/lib/mysql: ibdata1, ib_logfile0, ib_logfile1

– Bước 5: Mở lại file /etc/my.cnf > bỏ dòng innodb_force_recovery trước đó đã thêm > restart lại mysql ở chế độ bình thường.

– Bước 6: Chạy lệnh bên dưới để đảm bảo mv hết các table sử dụng inodb

cd /var/lib/mysql/

find . -type f -name "*.ibd" -exec mv {} {}.bak \;

– Bước 7: Xong chạy import lại file alldb.sql

mysql -u root -p < /root/alldb.sql

Read More