结论

这里列举的是默认设置,如果在创建数据库的时候在Linux平台上设置–lower_case_table_names=1,在MySQL8上也可以把Linux平台上的数据拷贝到Windows平台。


需要关注的几个细节

  1. 数据库状态
  2. 字节序
  3. 表名大小写敏感问题
  4. MySQL 的版本号
  5. 目标机器是 Linux 系统的时候 注意数据文件的所属用户
  6. binlog.index里面的路径分隔符从\改/

数据库状态

  1. 关闭(可以)
  2. 只读( MyIsam 表可以; Innodb 还需要处理 flush ,比较麻烦不推荐这样做 例如这个操作案例

字节序

windows 和 linux 都是小字节序,所以没影响

表名大小写敏感问题

系统参数 lower_case_table_names

  1. 如果设置为0,表名将按指定方式存储,并且比较区分大小写。
  2. 如果设置为1,表名在磁盘上以小写形式存储,比较不区分大小写。
  3. 如果设置为2,表名按给定的格式存储,但以小写形式进行比较。此选项也适用于数据库名称和表别名。

这个参数在在不同的平台上有不同的默认值∶

  1. 在Windows上,默认值为1,不支持0。
  2. 在macOS上,默认值为2。
  3. 在Linux上,默认值为0,不支持值2。

在 MySQL 8 之前可以通可以通过配置文件修改这个参数,修改后重启数据库生效。8.0 之后的版本,只允许在数据库初始化时指定,之后就不允许修改了。

MySQL 的版本号

目标数据库的版本号要大于等于源数据库的版本号,不同版本号之间迁移不支持crash recovery

启动 mysqld 的一些参数说明

--no-default                  不使用配置文件,所有配置使用命令行参数传递
--console                     错误信息直接输出到屏幕
--datadir=<path>              指定数据目录
--lower_case_table_names=0    指定lower_case_table_names为0
--user=mysql                  数据库启动用户为 mysql
--log-error-verbosity=3       5.7.2 开始推荐使用, 分别对应:
                                1. 错误信息;
                                2. 错误信息和告警信息; 
                                3. 错误信息、告警信息和通知信息。
                              原来的–log-warnings选项或log_warnings系统变量,从MySQL 8.0.3开始被移除了

转载来源