各位技术伙伴,今天我们把灯光聚焦在一条看似平淡、实则决定企业生死的操作链路——“把备份文件导入数据库”的全过程。作为亲历过数次亿级记录回滚的老兵,我习惯用复盘心态拆解每一步,既为当下止血,也为未来筑坝。
第一步,先锁定“战场影像”。拿到备份文件后,别急着动手。用 file、hexdump 或简单 cat 查看文件头,确认格式:是 mysqldump 生成的 .sql 文本,还是 xtrabackup 产出的 .xbstream 二进制流,抑或是 pg_dump 的 .custom 归档?这一步决定后续所有命令,误判即翻车。
第二步,建立“隔离沙箱”。无论生产库多庞大,先在测试环境还原。用 Docker 拉起同版本镜像,或找一台临时云主机,确保 CPU、内存、磁盘 IO 与生产同构。沙箱里先跑空实例,再导入,避免脏写。
第三步,执行“原子化还原”。以 MySQL 为例,若是 .sql,可直接 mysql -u 用户 -p 库名 < backup.sql;若是 xtrabackup,先解包 xbstream -x < backup.xbstream,再 innobackupex --apply-log ./data,最后停实例、替换 datadir、赋权、启动。每一步都加 set -e 脚本,失败即停,防止半吊子数据污染。
第四步,启动“校验仪式”。用 pt-table-checksum 或自研脚本比对校验和,再抽样跑业务核心查询,确保行数、索引、触发器、存储过程全部对齐。校验通过,再去做主从切换或流量灰度。
第五步,沉淀“作战手册”。把本次耗时、磁盘峰值、内存抖动、报错日志全部记录到 Confluence,并打上标签:版本号、备份时间、文件大小、还原耗时。下次遇到凌晨告警,直接按图索骥。
以上五步,是我多年一线总结的“数据灾难生存指南”。下面,用教程体再手把手带你走一遍,确保零死角。
————————— 极客教程分割线 —————————
教程:如何把备份文件导入数据库(含 MySQL、PostgreSQL、MongoDB 三场景)
一、前期准备
确认数据库版本:mysql --version、psql --version、mongod --version。
准备干净实例:Docker 命令示例
MySQL:docker run -d --name mysql-clean -e MYSQL_ROOT_PASSWORD=root -p 3306:3306 mysql:8.0
PostgreSQL:docker run -d --name pg-clean -e POSTGRES_PASSWORD=root -p 5432:5432 postgres:15
MongoDB:docker run -d --name mongo-clean -e MONGO_INITDB_ROOT_USERNAME=root -e MONGO_INITDB_ROOT_PASSWORD=root -p 27017:27017 mongo:6
把备份文件拷贝进容器
docker cp backup.sql mysql-clean:/tmp/backup.sql
二、MySQL 场景
登录容器:docker exec -it mysql-clean bash
创建空库:mysql -uroot -proot -e "CREATE DATABASE appdb;"
导入:mysql -uroot -proot appdb < /tmp/backup.sql
校验:mysql -uroot -proot appdb -e "SELECT COUNT(*) FROM users;"
三、PostgreSQL 场景
进入容器:docker exec -it pg-clean bash
建库:createdb -U postgres appdb
还原自定义格式:pg_restore -U postgres -d appdb /tmp/backup.custom
还原纯 SQL:psql -U postgres -d appdb -f /tmp/backup.sql
校验:psql -U postgres -d appdb -c "\dt"
四、MongoDB 场景
进入容器:docker exec -it mongo-clean bash
还原:mongorestore --host localhost --port 27017 -u root -p root --drop --gzip --archive=/tmp/backup.gz
校验:mongo localhost:27017/appdb -u root -p root --eval "db.users.countDocuments()"
五、收尾与自动化
把以上命令写成 Makefile 或 GitHub Actions,一键还原。
还原后立刻跑全量回归测试,确认业务指标曲线无抖动。
将脚本、日志、校验结果打包上传到对象存储,打上日期标签,方便下次秒级定位。
照此教程执行,任何备份文件都能在最短时间内完成从“冰冷文件”到“热活数据”的涅槃。愿各位再遇故障时,不再手忙脚乱,而是从容敲下那一行熟悉的命令。