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工具。