从全备文件中恢复单库可用grep和awk提取目标数据库SQL并导入,或直接过滤导入;推荐按库单独备份;增量恢复可利用binlog指定数据库导出后导入。
在 MySQL 中恢复部分数据库,通常是指从一个完整的备份文件中只恢复某个或某些特定的数据库,而不是全部数据。这种情况常见于使用 mysqldump 生成的逻辑备份文件(SQL 文件)。以下是几种实用的方法来实现部分数据库的恢复。
如果你使用 mysqldump --all-databases 备份了所有数据库,但只想恢复其中某一个,可以按以下步骤操作:
USE `database_name`; 和 -- Database: `database_name` 等标记分隔。方法一:使用 grep 提取指定数据库的 SQL 内容
grep "Current Database" full_backup.sql
awk '/^-- Current Database: `target_db`/,/^-- Current Database: `/ {print}' full_backup.sql > target_db.sql
mysql -u root -p
方法二:直接过滤后导入(不生成中间文件)
awk '/^-- Current Database: `target_db`/,/^-- Current Database: `/ && !/^-- Current Database: `/ {print}' full_backup.sql | mysql -u root -p
CREATE DATABASE IF NOT EXISTS target_db;
的最佳实践是平时备份时就按数据库分开,例如:
mysqldump -u root -p db1 > db1.sqlmysqldump -u root -p db2 > db2.sql
mysql -u root -p db1
这种方式最简单、安全,避免了解析大文件的风险。
如果需要恢复某段时间内对特定数据库的操作,可使用二进制日志(binlog):
mysqlbinlog --database=target_db binlog.000001 > recovery.sql
mysqlbinlog --start-datetime="2025-01-01 00:00:00" --stop-datetime="2025-01-02 00:00:00" --database=target_db binlog.000001 > recovery.sql
mysql -u root -p
基本上就这些常用方式。关键是看你用的是哪种备份类型,然后选择合适的提取和导入策略。只要操作细心,恢复部分数据库并不复杂。