Skip to content

MySQL-数据迁移

数据迁移核心概念

MySQL 数据迁移是指将数据库从一个环境转移到另一个环境的过程,包括但不限于:

  • 服务器间迁移
  • 版本升级迁移
  • 云服务迁移
  • 数据库架构变更

主要迁移方法对比

方法适用场景优点缺点
mysqldump中小型数据库/全库迁移简单可靠,兼容性好停机时间长,大库性能差
.ibd文件迁移单表迁移/快速恢复速度极快要求版本/配置严格一致
XtraBackup大型生产环境热备份,增量备份配置复杂
主从复制最小停机迁移几乎零停机需要网络稳定

MySQL .ibd 文件迁移指南

迁移场景说明

.ibd 文件是 InnoDB 引擎的表空间文件,包含表数据和索引。迁移这些文件通常用于以下场景:

  • 单表迁移到新服务器
  • 表空间快速备份恢复
  • 跨版本数据库迁移

标准迁移流程

准备工作

确认表结构一致

sql
-- 查看表结构
SHOW CREATE TABLE table_name;

-- 在终端执行命令将源库导出表结构
-- mysqldump -d -u root -p database_name table_name > table_structure.sql

目标库创建相同表结构

sql
-- 复制查看到的表结构就是完整的建表语句

-- 复制同一个MySQL服务的表结构
CREATE TABLE target_table LIKE source_table;

迁移步骤

源库执行表空间卸载

sql
ALTER TABLE source_table DISCARD TABLESPACE;

传输文件

bash
# 复制.ibd文件到目标服务器
scp -p /var/lib/mysql/database_name/source_table.ibd user@target:/var/lib/mysql/database_name/

目标库导入表空间

sql
ALTER TABLE target_table IMPORT TABLESPACE;

注意事项

版本兼容性

  • MySQL 5.6+ 支持此方法
  • 源和目标服务器必须使用相同页大小(innodb_page_size)
  • 建议相同MySQL版本间迁移

文件权限

bash
chown mysql:mysql /var/lib/mysql/database_name/*.ibd

数据一致性验证

sql
CHECK TABLE target_table;

常见问题解决

错误1: Schema mismatch

  • 原因:表结构不匹配
  • 解决:确保CREATE TABLE语句完全一致

错误2: Tablespace is missing

  • 原因:文件权限或路径错误
  • 解决:检查文件路径和mysql用户权限

错误3: Row format mismatch

  • 原因:源表使用COMPRESSED行格式
  • 解决:目标表需设置相同ROW_FORMAT