1. 準備工作:停止MariaDB服務與備份現有數據
在進行任何恢復操作前,停止MariaDB服務是首要步驟,以避免數據進一步損壞或覆蓋:
sudo systemctl stop mariadb
若當前數據庫仍有可用備份(如邏輯備份.sql
文件或物理備份目錄),務必備份現有數據,防止恢復過程中意外丟失:
sudo cp -R /var/lib/mysql /var/lib/mysql_backup # 備份數據目錄(默認路徑)
或備份特定數據庫的SQL文件:
sudo mysqldump -u root -p --all-databases > full_backup.sql
2. 檢查與修復表級損壞
根據存儲引擎類型選擇對應工具修復:
mysqlcheck
工具自動檢查并修復所有數據庫中的InnoDB表:sudo mysqlcheck -u root -p --auto-repair --check --all-databases
database_name.table_name
),使用myisamchk
工具修復:sudo myisamchk -r /var/lib/mysql/database_name/table_name.MYI
修復完成后,重啟MariaDB服務使更改生效:
sudo systemctl start mariadb
3. 從備份文件恢復數據
若數據損壞嚴重或需恢復至特定時間點,備份文件是最高效的恢復方式:
mysqldump
生成的.sql
文件):mysql -u root -p database_name < /path/to/backup.sql
xtrabackup
/mariabackup
生成的目錄或壓縮包):/var/lib/mysql
),并修復權限:sudo systemctl stop mariadb
sudo rsync -av /path/to/backup/mysql/ /var/lib/mysql/
sudo chown -R mysql:mysql /var/lib/mysql # 確保MariaDB用戶擁有所有權
sudo systemctl start mariadb
4. 使用innodb_force_recovery強制恢復InnoDB數據
若InnoDB存儲引擎的數據文件(如ibdata1
、ib_logfile*
)損壞,可通過配置innodb_force_recovery
參數強制啟動MariaDB,導出數據后再重建數據庫:
/etc/my.cnf
或/etc/mysql/my.cnf
),在[mysqld]
段添加:innodb_force_recovery = 1
innodb_force_recovery
的值(1~6,數值越大恢復力度越強),直到MariaDB能正常啟動:sudo systemctl restart mariadb
mysqldump -u root -p --all-databases > recovered_data.sql
sudo rm -rf /var/lib/mysql/*
innodb_force_recovery
配置,重啟服務:sudo systemctl stop mariadb
sudo sed -i '/innodb_force_recovery/d' /etc/my.cnf # 刪除配置項
sudo systemctl start mariadb
mysql -u root -p < recovered_data.sql
5. 使用專業工具恢復誤刪除或嚴重損壞數據
若常規方法無效,可嘗試專業工具:
.MYD
、.MYI
或InnoDB文件)。需先停止MariaDB服務,避免新數據覆蓋:sudo extundelete /dev/sdXY --restore-file /var/lib/mysql/database_name/table_name.MYD
其中/dev/sdXY
是數據文件所在分區(可通過df -h
查看),table_name.MYD
是被刪除的表數據文件。6. 預防未來數據丟失的建議
mysqldump
、xtrabackup
或mariabackup
工具。