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