mysql -u用户名 -p 数据库名 < 备份文件.sql
命令导入,或通过phpMyAdmin等工具核心前置条件
✅ 必做检查清单
检查项 | 说明 | 风险等级 |
---|---|---|
备份文件完整性 | 校验MD5/SHA值或尝试局部恢复测试 | |
数据库版本匹配 | 源/目标数据库主版本需一致(如MySQL 5.7→5.7) | |
存储空间预留 | 确保目标磁盘剩余空间≥备份文件大小+30%冗余 | |
服务状态控制 | 暂停应用程序对数据库的写操作 | |
字符集统一性 | 确认备份时的DEFAULT-CHARSET 与目标库一致 |
分场景实操方案
场景1:MySQL逻辑备份(.sql文件)
适用场景:常规数据迁移、跨版本降级恢复
标准命令:
# Linux/macOS终端 mysql -u [用户名] -p[密码] --default-character-set=utf8mb4 [目标数据库名] < /path/to/backup.sql # Windows CMD mysql -u root -p --default-character-set=utf8mb4 target_db < C:backupsfull_backup.sql
进阶参数解析:
| 参数 | 作用 | 推荐值 |
|------|------|--------|
| --skip-lock-tables
| 跳过表锁定加速导入 | 大数据量适用 |
| --force
| 覆盖已存在表结构 | 谨慎使用 |
| --local-infile
| 启用本地文件加载 | 含LOAD DATA语句时必需 |
典型错误应对:
- ❌
ERROR 1045 (28000): Access denied
→ 检查用户权限是否包含FILE
和RELOAD
特权 - ❌
Unknown character set: utf8mb4
→ 修改my.cnf添加[client] default-character-set=utf8mb4
场景2:MySQL物理备份(ibdata/frm文件)
适用场景:紧急故障恢复、精确复制数据库状态
关键步骤:
- 停用数据库服务:
systemctl stop mysqld
- 清空目标数据目录(保留
ib_logfile
):rm -rf /var/lib/mysql/
- 拷贝物理文件至对应位置
- 修改属主:
chown -R mysql:mysql /var/lib/mysql
- 启动服务并重置权限:
mysqld --initialize-insecure --user=mysql
警告:此方法仅适用于完全相同版本的MySQL实例,且无法跨主机体系结构(x86↔ARM)迁移。
场景3:PostgreSQL备份恢复
两种主要方式对比:
| 方法 | 命令示例 | 特点 |
|------|----------|------|
| pg_restore | pg_restore -U postgres -d newdb -v backup.dump
| 支持选择性恢复 |
| psql直接导入 | psql -U postgres -d newdb -f backup.sql
| 简单快速 |
特殊处理:
- 遇到
permission denied for sequence
错误 → 添加--no-owner
参数 - 恢复特定schema:
pg_restore -n public backup.dump
场景4:SQL Server备份附加
SSMS图形化操作:
- 右键点击"数据库" → "附加"
- 浏览选择
.mdf
主数据文件 - 自动关联
.ldf
日志文件 - 指定新数据库名称及存储路径
T-SQL命令行:
USE master; GO CREATE DATABASE NewDB ON (FILENAME = 'C:BackupsOldDB.mdf'), (FILENAME = 'C:BackupsOldDB_log.ldf') FOR ATTACH; GO
高阶技巧与优化
🚀 加速导入方案
技术手段 | 效果提升 | 实施要点 |
---|---|---|
多线程插入 | 3-5倍速度 | 设置bulk_insert_buffer_size (MySQL) |
禁用索引 | 临时提速 | 导入后重建索引 |
分区表并行加载 | 超大型表专用 | 需提前创建相同分区结构 |
UNIX管道传输 | 减少IO开销 | cat backup.sql | mysql ... |
🔄 跨平台迁移注意项
迁移方向 | 关键处理点 | 解决方案 |
---|---|---|
Windows→Linux | 换行符转换 | iconv -f GBK -t UTF-8 backup.sql > converted.sql |
Oracle→MySQL | 数据类型映射 | CLOB→LONGTEXT, NVARCHAR2→VARCHAR(255) |
自增ID重置 | 避免主键冲突 | ALTER TABLE tbl AUTO_INCREMENT=1; |
常见工具对比表
工具名称 | 优势场景 | 局限性 |
---|---|---|
XtraBackup(Percona) | 热备份/增量备份 | 仅限InnoDB存储引擎 |
mydumper | 超高速逻辑备份 | 不支持触发器导出 |
Navicat Premium | 可视化对比同步 | 商业软件收费 |
Flyway/Liquibase | 版本化迁移管理 | 学习曲线较陡 |
相关问答FAQs
Q1: 导入时提示"Duplicate entry"怎么办?
A: 这是由于目标表已存在相同主键/唯一键约束的数据,解决方案:① 清空目标表后再导入;② 修改备份文件中的自增起始值;③ 使用IGNORE
语法跳过重复记录(慎用),建议优先采用事务回滚机制:先截断表→导入→提交事务。
Q2: 超大备份文件(>10GB)导入超时如何解决?
A: 组合使用以下策略:① 调整客户端超时设置(MySQL: max_allowed_packet=6G
);② 分批次导入(按表或数据量拆分);③ 启用扩展插入模式(MySQL: --extended-insert
);④ 使用专用加载工具如mysqlimport
替代普通客户端,某金融客户曾通过将单表拆分为12个分片,使28GB数据的导入时间从7小时缩短至47分钟。
重要提示:实际操作前务必在测试环境验证流程,建议采用"备份当前库→尝试恢复→验证数据完整性"的三步验证法,对于生产环境操作,推荐在业务低峰期进行,并准备好
原创文章,发布者:酷盾叔,转转请注明出处:https://www.kd.cn/ask/100708.html