跨平台MySQL迁移必须用mysqldump逻辑导出导入;关键参数为--single-transaction和--default-character-set=utf8mb4,还需--routines --events导出存储对象;导入前须手动创建utf8mb4字符集数据库,并用相同编码导入。

直接拷贝 data/ 目录几乎必然失败,跨平台迁移必须走逻辑导出导入路径。
mysqldump 导出时必加的两个参数
Windows 上默认客户端编码常为 cp1252 或 gbk,Linux MySQL 服务端默认是 utf8mb4;不显式指定,导出文件里中文会变成 ? 或乱码。InnoDB 表若不加 --single-transaction,会触发 FLUSH TABLES WITH READ LOCK,在 Windows 上可能卡住业务,更关键的是——该锁在 Linux 导入时容易超时中断,导致部分表缺失却无报错。
mysqldump --single-transaction --default-character-set=utf8mb4 -u root -p mydb > mydb.sql- 含存储过程、函数或事件?额外加
--routines --events - 避免用记事本编辑 dump 文件:它会悄悄加 BOM(
ef bb bf),Linux 下执行mysql命令直接报ERROR 1064;可用head -c 3 mydb.sql | xxd检查
导入前必须手动建库并指定字符集
mysqldump --databases 生成的 SQL 虽含 CREATE DATABASE,但 Linux MySQL 默认忽略它(尤其目标库已存在时),也不会校验字符集是否匹配。结果就是:库能建、表能插、数据看着正常,但 SHOW CREATE TABLE 显示 CHARSET=utf8(实为 utf8mb3),emoji 插入失败或被截断。
Zynq‑7000 / Zynq UltraScale+ 硬件调试技能。适用于 Xilinx Zynq(Cortex‑A9/A53 + FPGA)Linux 环境,调试 I2C、I2S、UART、GPIO 等外设。包括设备树配置、内核驱动、用户空间调试工具、交叉编译和常见问题排查,支持 PetaLinux 开发。
- 先登录 Linux MySQL,执行:
CREATE DATABASE `mydb` CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci; - 导入时强制指定客户端编码:
mysql --default-character-set=utf8mb4 -u root -p mydb - 别用 MySQL 客户端内的
source mydb.sql—— 大文件易中断,错误难定位
lower_case_table_names 配置不能跳过
Windows 默认 lower_case_table_names=1(不区分大小写),Linux 默认是 0(区分大小写)。迁移后若未显式设置,表名含大写字母(如 UserInfo)在 Linux 上能创建、能 SELECT,但后续任何 ALTER TABLE 或备份脚本都可能静默失败。
- 在
my.cnf的[mysqld]段落中显式写:lower_case_table_names=1 - 该参数只读:改完必须删掉
data/下的ibdata1、ib_logfile*和mysql/子目录(保留 socket 目录结构),再用mysqld --initialize-insecure重建数据目录 - 验证方法:
CREATE TABLE TestTable (id INT); SHOW TABLES LIKE 'testtable';—— 应返回结果才算生效
真正容易被忽略的不是导出命令怎么写,而是 lower_case_table_names 改完后没重建数据目录,或者建库时漏了 COLLATE = utf8mb4_unicode_ci —— 这两类问题不会立刻报错,但会在后续 DDL 或高并发写入时突然暴露。

















