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