温馨提示×

Linux下MariaDB如何恢复数据

小樊
43
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 
  • 执行后会提示输入root密码,输入正确后自动恢复数据库结构和数据。
  • 恢复完成后,启动MariaDB服务:
    sudo systemctl start mariadb 

2. 从物理备份恢复

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

sudo rsync -av /path/to/backup_mysql/ /var/lib/mysql/ 
  • 注意:需确保备份目录的属主和权限正确,避免MariaDB无法访问:
    sudo chown -R mysql:mysql /var/lib/mysql 
  • 启动服务后验证数据完整性:
    sudo systemctl start mariadb mysql -u root -p -e "SHOW DATABASES;" 

3. 修复损坏的表

MyISAM表修复

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

sudo myisamchk -r /var/lib/mysql/database_name/table_name.MYI 
  • -r参数表示尝试修复,若失败可使用-o(更彻底的修复)。

InnoDB表修复

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

sudo mysqlcheck -u root -p --auto-repair --check --all-databases 
  • --auto-repair:自动修复发现的问题;--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 
  • /dev/sdXY:包含被删除文件的分区(如/dev/sda1);--restore-file:指定被删除文件的路径。
  • 恢复后,将文件放回原数据目录,修复权限并重启服务。

三、恢复后验证

  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