能把 MySQL 数据库从 Windows 拷贝到 Linux 吗?
结论
这里列举的是默认设置,如果在创建数据库的时候在Linux平台上设置–lower_case_table_names=1,在MySQL8上也可以把Linux平台上的数据拷贝到Windows平台。
需要关注的几个细节
- 数据库状态
- 字节序
- 表名大小写敏感问题
- MySQL 的版本号
- 目标机器是 Linux 系统的时候 注意数据文件的所属用户
- binlog.index里面的路径分隔符从\改/
数据库状态
- 关闭(可以)
- 只读( MyIsam 表可以; Innodb 还需要处理 flush ,比较麻烦不推荐这样做 例如这个操作案例 )
字节序
windows 和 linux 都是小字节序,所以没影响
表名大小写敏感问题
系统参数 lower_case_table_names
- 如果设置为0,表名将按指定方式存储,并且比较区分大小写。
- 如果设置为1,表名在磁盘上以小写形式存储,比较不区分大小写。
- 如果设置为2,表名按给定的格式存储,但以小写形式进行比较。此选项也适用于数据库名称和表别名。
这个参数在在不同的平台上有不同的默认值∶
- 在Windows上,默认值为1,不支持0。
- 在macOS上,默认值为2。
- 在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开始被移除了