linux

Linux下MariaDB如何恢复数据

小樊
42
2025-09-18 18:24:38
栏目: 云计算

Linux下MariaDB数据恢复方法

一、准备工作

  1. 停止MariaDB服务:为避免恢复过程中数据冲突或损坏,需先停止服务。
    sudo systemctl stop mariadb
    
  2. 备份现有数据:恢复前务必备份当前数据目录(默认/var/lib/mysql),防止操作失误导致二次丢失。
    sudo cp -R /var/lib/mysql /var/lib/mysql_backup
    

二、常见恢复场景及步骤

1. 从SQL备份文件恢复

若已有完整的数据库备份(.sql格式,如full_backup.sql),可通过以下命令导入:

mysql -u root -p < /path/to/full_backup.sql

2. 从物理备份恢复

若备份了整个MariaDB数据目录(如/var/lib/mysql的完整副本),可直接覆盖当前数据目录:

sudo rsync -av /path/to/backup_mysql/ /var/lib/mysql/

3. 修复损坏的表

MyISAM表修复

若使用MyISAM存储引擎,可通过myisamchk工具修复损坏的表(如database_name.table_name.MYI):

sudo myisamchk -r /var/lib/mysql/database_name/table_name.MYI

InnoDB表修复

对于InnoDB表,优先使用mysqlcheck工具自动检查和修复:

sudo mysqlcheck -u root -p --auto-repair --check --all-databases

4. 强制恢复InnoDB数据(严重损坏时)

若InnoDB数据文件(如ibdata1ib_logfile*)损坏,可通过innodb_force_recovery参数强制启动MariaDB,导出数据后再重建:

  1. 编辑配置文件(/etc/my.cnf/etc/mysql/my.cnf),在[mysqld]段添加:
    innodb_force_recovery = 1
    
  2. 重启MariaDB:
    sudo systemctl restart mariadb
    
  3. 逐步增加innodb_force_recovery的值(1~6,每次+1),直到能正常启动。
  4. 登录MariaDB,导出所有数据:
    mysqldump -u root -p --all-databases > all_databases_backup.sql
    
  5. 停止服务,删除损坏的数据目录,恢复初始备份,再导入导出的数据。

5. 恢复误删除的数据文件

若数据文件(如表文件)被误删除,可使用extundelete工具恢复(需提前安装):

sudo extundelete /dev/sdXY --restore-file /var/lib/mysql/database_name/table_name.MYD

三、恢复后验证

  1. 登录MariaDB:
    mysql -u root -p
    
  2. 检查数据库和表是否存在:
    SHOW DATABASES;
    USE your_database_name;
    SHOW TABLES;
    
  3. 抽样查看数据:
    SELECT * FROM your_table_name LIMIT 10;
    

四、预防措施

  1. 定期备份:使用mysqldumpmariadb-backup工具定期备份(全量+增量)。
    sudo mysqldump -u root -p --all-databases > /backups/mariadb_$(date +%F).sql
    
  2. 启用高可用性:配置主从复制或集群(如Galera Cluster),减少单点故障影响。
  3. 监控数据一致性:使用mysqlcheck定期检查数据库完整性。

0
看了该问题的人还看了