MySQL二进制文件跨系统拷贝失败,因InnoDB页格式与字节序、文件系统元数据强绑定;mysqldump是最稳妥跨系统迁移方式,导出SQL文本规避二进制兼容性问题,但需注意字符集、事务锁、存储对象等参数配置。

MySQL二进制文件跨系统直接拷贝会失败
Linux上生成的 ibd 文件在Windows或macOS上无法被MySQL识别,不是权限或路径问题,而是InnoDB页格式与字节序、文件系统元数据强绑定。官方明确不支持跨平台直接复制表空间文件。
mysqldump 是最稳妥的跨系统迁移方式
它导出的是SQL文本,完全规避了二进制兼容性问题,适用于所有MySQL版本和操作系统组合。但要注意以下几点:
- 导出前确认源库字符集(
SHOW CREATE DATABASE db_name),用--default-character-set=utf8mb4显式指定,避免目标库默认字符集不一致导致乱码 - 大表务必加
--single-transaction(InnoDB)或--lock-tables=false(MyISAM),否则锁库时间过长 - 若含存储过程/函数/事件,需额外加
--routines --events,否则不会导出 - 导入时建议先创建空库并指定字符集:
CREATE DATABASE target_db CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci;
mysqlpump 和 mydumper 适合中大型库但有平台限制
mysqlpump(MySQL 5.7+ 自带)支持并行导出,但Windows下性能差、bug多;mydumper 在Linux/macOS表现稳定,却无官方Windows二进制包。两者都依赖本地MySQL客户端协议,跨系统迁移时仍要走SQL重放,本质和 mysqldump 一样安全,但配置稍复杂:
-
mydumper导出后是多个.sql和.metadata文件,必须用配套的myloader导入,不能用mysql命令直读 -
mysqlpump的--set-gtid-purged=OFF在非GTID环境必须显式加,否则导入报错ERROR 1840 (HY000) - 二者均不处理
mysql系统库中的用户权限,迁移后需单独用mysqldump --no-create-info --no-data mysql.user补导
物理备份工具(xtrabackup)只限同构Linux环境
Percona XtraBackup 虽快且支持热备,但它生成的备份严格依赖:相同MySQL大版本(如5.7.x)、相同架构(x86_64)、相同glibc版本、相同InnoDB page size。哪怕从CentOS 7迁到Ubuntu 22.04,也可能因glibc符号变化导致 innobackupex: error while loading shared libraries。它不是跨系统方案,只是高性能同平台迁移选项。
真正容易被忽略的是:即使操作系统相同,容器与宿主机之间也存在glibc和内核参数差异,xtrabackup 备份在Docker里做的,不保证能在裸金属上恢复成功。


















