上一篇
📢【2025年8月MySQL技术圈大事件速递】
最近AWS官方宣布,Aurora MySQL 3.05/3.06/3.07版本将于8月31日正式弃用,建议用户主动升级至兼容MySQL 8.0.38的4.0版本,CSDN博主@S4562580分享的"1130-host is not allowed to connect"远程连接修复教程,凭借五步修改root用户权限的简洁操作,已收获2000+收藏,今天咱们就结合这些热点,手把手教你如何从全库备份中精准恢复指定数据库或表!
想象一下这个场景:你误删了生产库中的某个核心表,但手里只有一份包含200个数据库的全量备份,如果直接全量恢复,不仅耗时2小时,还可能覆盖现有数据,这时候就需要「精准打击」的恢复技术!
方案 | 工具 | 速度 | 适用场景 | 注意事项 |
---|---|---|---|---|
mysqldump提取法 | 命令行 | 小型库(<10GB) | 需备份文件包含表结构 | |
XtraBackup切割法 | Percona工具 | 大型InnoDB库 | 需提前安装工具链 | |
Binlog时间旅行 | mysqlbinlog | 误操作恢复 | 需提前开启ROW格式日志 |
步骤1:定位目标库/表
# 查找备份文件中数据库名 grep "CREATE DATABASE `target_db`" full_backup.sql # 查找表结构(以users表为例) grep "CREATE TABLE `users`" full_backup.sql
步骤2:提取指定库
# 提取单个库(含所有表) sed -n '/^-- Current Database: `target_db`/,/^-- Current Database: `/p' full_backup.sql > target_db.sql # 提取单个表(需包含CREATE TABLE) awk '/CREATE TABLE `target_table`/,/UNLOCK TABLES/' full_backup.sql > target_table.sql
步骤3:导入目标库
# 先创建空库 mysql -u root -p -e "CREATE DATABASE target_db;" # 导入数据(支持远程恢复) mysql -h 127.0.0.1 -u root -p target_db < target_db.sql
步骤1:准备环境
# 安装工具(Ubuntu示例) wget https://downloads.percona.com/downloads/XtraBackup/Percona-XtraBackup-8.0.36/binary/tarball/percona-xtrabackup-8.0.36-Linux-x86_64.glibc2.28.tar.gz tar -xzvf percona-xtrabackup-8.0.36-Linux-x86_64.glibc2.28.tar.gz ln -s /opt/percona-xtrabackup-8.0.36-Linux-x86_64.glibc2.28/bin/* /usr/bin/
步骤2:解压并提取数据
# 解压备份(假设备份在/data/backups) xtrabackup --decompress --target-dir=/data/backups/full_backup # 提取指定库文件 mkdir /tmp/extracted_db cp -r /data/backups/full_backup/target_db /tmp/extracted_db/ # 应用日志准备恢复 xtrabackup --prepare --target-dir=/tmp/extracted_db
步骤3:复制数据文件
# 停止MySQL服务 systemctl stop mysqld # 覆盖数据目录(谨慎操作!) cp -rf /tmp/extracted_db/* /var/lib/mysql/ chown -R mysql:mysql /var/lib/mysql # 启动服务 systemctl start mysqld
前提条件:
my.cnf
中配置:[mysqld] log_bin = mysql-bin binlog_format = ROW expire_logs_days = 7
恢复步骤:
# 查找误操作时间点 mysql -u root -p -e "SHOW BINARY LOGS;" # 提取指定时间段日志 mysqlbinlog --start-datetime="2025-08-14 10:00:00" \ --stop-datetime="2025-08-14 10:15:00" \ /var/lib/mysql/mysql-bin.000015 > recovery.sql # 反向操作(示例:将DELETE转为INSERT) sed 's/DELETE FROM/INSERT INTO/' recovery.sql > filtered.sql mysql -u root -p target_db < filtered.sql
--default-character-set=utf8mb4
避免乱码--force
参数前务必确认无活跃连接根据阿里云2025年5月发布的《RDS MySQL数据恢复方案概览》,现在支持将备份文件直接恢复到「新实例」进行数据验证,避免影响生产环境,对于云上用户,还可以通过DTS实现跨地域恢复,将备份文件从北京地域迁移至广州地域的新实例。
📌 今日作业:
你更倾向于哪种恢复方案?欢迎在评论区分享你的实战经验!下期我们将拆解《MySQL 8.2新特性:原子DDL如何拯救崩溃的表结构》,点击关注不错过干货~
本文由 业务大全 于2025-08-14发表在【云服务器提供商】,文中图片由(业务大全)上传,本平台仅提供信息存储服务;作者观点、意见不代表本站立场,如有侵权,请联系我们删除;若有图片侵权,请您准备原始证明材料和公证书后联系我方删除!
本文链接:https://vps.7tqx.com/wenda/617101.html
发表评论