如何在迁移过程中避免数据丢失?
美国、香港服务器
如何在迁移过程中避免数据丢失?
07-22 来源:
## 一、迁移前:三层备份(最重要,兜底保障)
### 1. 逻辑全量备份(首选,最安全,出现损坏可随时恢复)
把所有数据库导出为 SQL 文本文件,不受磁盘路径、系统权限影响,任何故障都能导入恢复。
#### ① 宝塔面板操作(最简单)
1. 宝塔 → 数据库 → **全库备份**
2. 备份完成后:把备份压缩包**下载到你本地电脑留存 2 份**(不要只存在服务器里)
3. 额外手动单独导出每个网站数据库,分开备份,防止单文件损坏全部失效。
#### ② 原生 MySQL 命令导出(管理员 CMD 执行)
# 导出所有数据库到D盘
mysqldump -uroot -p --all-databases --routines --events --triggers > D:\mysql_all_backup.sql
参数说明:
--routines:备份存储过程;--events:备份定时事件;--triggers:触发器,完整导出所有数据结构。
### 2. 物理文件备份(拷贝原 data 目录整盘快照)
停掉 MySQL 服务后,完整复制 C 盘原 data 文件夹,打包压缩一份存放 D 盘。
哪怕迁移途中文件拷坏、权限出错,直接解压回 C 盘就能一键复原。
# 管理员CMD打包整个数据目录
xcopy "C:\BtSoft\mysql\MySQL57\data" "D:\mysql_old_data_backup" /E /H /K /Y
## 二、迁移中:禁止数据写入,保证数据一致性(避免一半新数据一半旧数据错乱)
### 标准严格步骤(不可跳过顺序)
1. **关闭网站所有访问入口**
暂停 Nginx/Apache、PHP 服务,访客无法提交订单、留言、修改内容,数据库彻底停止写入;
2. **登录 MySQL 上锁,冻结数据表写入(可选高阶操作)**
FLUSH TABLES WITH READ LOCK;
执行后:所有数据表只读,禁止新增、修改、删除数据;全程不要关闭这个 CMD 窗口,关闭锁就失效;
3. **完全停止 MySQL 服务**
net stop bt-mysql
确认服务状态:必须显示「已停止」,后台无残留 mysqld 进程,否则文件还在读写,拷贝必然损坏;
4. 等待 30 秒,让磁盘 IO 彻底结束,再开始拷贝 data 文件夹到 D 盘;
> 错误大忌:一边运行数据库一边复制文件,文件处于读写状态,拷贝出来一定残缺。
## 三、拷贝文件:保证文件 100% 完整一致
1. 必须用命令拷贝,不要鼠标拖拽复制
Windows 拖拽会漏掉隐藏文件、系统权限文件、InnoDB 日志文件,极易导致数据库启动报错、表丢失:
xcopy "C:\BtSoft\mysql\MySQL57\data" "D:\MySQL_Data\data" /E /H /K /Y /V
新增参数 `/V`:拷贝后自动校验文件哈希,核对源文件与目标文件大小一致,不一致自动提示;
2. 拷贝完成后核对两处信息
- 文件夹总大小:D 盘目录大小 = C 盘原目录大小
- 文件数量完全一致
## 四、修改配置启动后:逐项校验数据完整性
MySQL 启动成功不等于数据完好,必须逐项核验:
1. 查看数据库总列表
show databases;
核对所有库名称和迁移前完全一致;
2. 进入每个网站数据库,查看核心数据表数量
use 你的数据库名;
show tables;
3. 抽样查询业务数据
查询最新订单、文章、会员数据,确认时间、内容完全匹配;
4. 核对 InnoDB 引擎无报错
CHECK TABLE 数据表名;
检测数据表是否损坏;
5. 完整打开网站:浏览页面、提交表单、登录账号,所有交互功能正常。
三二互联专业提供香港VPS,美国VPS主机,香港云服务器租用等业务香港美国到大陆CN2 GIA速度最快