必须在windows目标mysql首次启动前设lower_case_table_names=1,否则linux迁移来的大小写混合表名因磁盘文件与元数据不匹配而报“table doesn't exist”;已初始化则需重建数据目录或手动rename表。

Linux 到 Windows 迁移时表名大小写问题怎么处理?
MySQL 在 Linux 上默认区分表名大小写,Windows 默认不区分,直接复制 data 目录会触发 Table 'xxx' doesn't exist 错误。根本原因不是文件缺失,而是 lower_case_table_names 参数不一致。
- 源库(Linux)默认值是
0,目标库(Windows)默认是1,必须统一 - 最稳妥的做法:在目标 MySQL 配置文件(
my.ini或my.cnf)中显式设置lower_case_table_names=1,然后重启服务 - 注意:该参数必须在初始化实例前设置;如果已初始化,不能动态修改,只能重装或重建数据目录
- 迁移前建议把所有表名转为小写,避免后续 SQL 中混用大小写导致隐性错误
跨平台迁移时字符集乱码的真正源头在哪?
乱码往往不是导出导入时才发生,而是从源库建表那一刻就埋了雷。比如老库用 latin1 存 UTF-8 内容,靠客户端“硬解”显示正常,但 mysqldump 会按声明的字符集读取,结果导出就是乱码。
- 先查真实字符集:
SHOW VARIABLES LIKE 'character_set%';和SELECT DEFAULT_CHARACTER_SET_NAME FROM information_schema.SCHEMATA WHERE SCHEMA_NAME = 'your_db'; - 导出时强制指定:
mysqldump --default-character-set=utf8mb4 -u user -p db_name > dump.sql - 导入前确认目标库配置:检查
my.cnf中character-set-server=utf8mb4和collation-server=utf8mb4_0900_ai_ci(MySQL 8.0+) - 不要依赖客户端连接时加
?charset=utf8mb4,那是补救,不是根治
用 mysqldump 迁移时哪些参数容易被忽略?
mysqldump 看似简单,但缺一两个参数,上线后可能查不到数据、触发器失效、甚至主从同步中断。
本文档主要讲述的是Android 操作系统的介绍;Android是基于Linux内核的操作系统,是Google公司在2007年11月5日公布的手机操作系统,早期由Google开发,后由开放手持设备联盟(Open Handset Alliance)开发。它采用了软件堆层(software stack,又名以软件叠层)的架构,主要分为三部分。底层Linux内核只提供基本功能;其他的应用软件则由各公司自行开发,部分程序以Java编写。希望本文档会给有需要的朋友带来帮助;感兴趣的朋友可以过来看看
- 必加:
--single-transaction(InnoDB 一致性快照),否则大表导出会锁表 - 必加:
--routines --triggers --events,否则存储过程、触发器、定时事件全丢 - 避免用
--all-databases直接导出,它会包含mysql系统库,而不同版本间系统表结构可能不兼容 - 如果目标是 MySQL 8.0+,加上
--set-gtid-purged=OFF,否则可能因 GTID 不匹配导致导入失败 - 导出后建议用
head -n 20 dump.sql扫一眼开头,确认有SET NAMES utf8mb4;和正确的CREATE DATABASE语句
物理迁移(data 目录复制)为什么多数情况下不推荐?
直接拷贝 data/ 目录看起来最快,但实际风险极高,尤其跨平台或跨大版本。
- InnoDB 表空间文件(
.ibd)依赖底层文件系统特性,Linux 的 ext4 和 Windows 的 NTFS 处理稀疏文件、权限位方式不同,直接复制可能导致页校验失败 - MySQL 版本差异会导致
ibdata1格式不兼容,比如 MySQL 5.7 和 8.0 的 redo log 结构变化,启动时直接报错InnoDB: Database page corruption on disk - 系统库(
mysql、performance_schema)不能简单覆盖,尤其是认证插件(caching_sha2_passwordvsmysql_native_password)不匹配时,连 root 都登不上 - 唯一可接受的物理迁移场景:同版本、同架构(x86_64)、同文件系统(如都是 ext4)且停机窗口极短——即便如此,也应优先考虑
xtrabackup而非裸拷贝
跨平台迁移最易被忽略的点,其实是环境初始化顺序:先配好 lower_case_table_names 和 character-set-server,再启服务、再建库,而不是等导入失败后再回头改配置。很多问题表面是数据问题,根子在第一步就没对齐。










