mysql迁移到新服务器是否需要调整配置_mysql环境调整说明

来源:这里教程网 时间:2026-02-28 20:46:29 作者:

迁移后
max_allowed_packet
突然报错

新服务器默认值常为 4MB,而旧库可能设为 64MB 或更高。若应用执行大 BLOB、长 INSERT 或导出导入操作,会直接触发

Packet too large
错误。

检查旧库:登录原 MySQL,执行
SHOW VARIABLES LIKE 'max_allowed_packet';
新库需同步该值,修改
my.cnf
中的
max_allowed_packet = 64M
(注意单位是
M
,不是
MB
必须重启 MySQL 生效,仅
SET GLOBAL
无法突破启动时上限

sql_mode
不一致导致 INSERT 失败

MySQL 5.7+ 默认启用严格模式(如

STRICT_TRANS_TABLES
),而老环境可能是空或宽松模式。迁移后常见报错:
Incorrect integer value: '' for column 'id' at row 1

导出旧库当前模式:
SELECT @@sql_mode;
新库配置中显式设置
sql_mode = "..."
,不要依赖默认值
若业务依赖宽松行为(如隐式类型转换),不建议直接照搬旧值;应优先修复 SQL,再逐步收紧模式

时区和
timestamp
行为差异

旧服务器可能设为

SYSTEM
(即系统本地时区),新服务器若未配置,
DEFAULT CURRENT_TIMESTAMP
字段可能按 UTC 写入,造成时间偏移。

确认旧库时区:
SELECT @@time_zone, @@system_time_zone;
新库应在
my.cnf
中设置
default-time-zone = '+08:00'
(或
'Asia/Shanghai'
注意:修改后新建连接才生效;已有连接仍用旧时区,需重连

字符集与排序规则未对齐

即使表定义声明了

utf8mb4
,若服务端
character_set_server
latin1
,新建表/临时表/函数内部字符串仍会降级,引发乱码或索引失效。

比对关键变量:
character_set_server
collation_server
init_connect
推荐统一设为:
character_set_server = utf8mb4
collation_server = utf8mb4_unicode_ci
注意
init_connect
若含 SET 语句,需确保其语法兼容新版本(如 8.0+ 不允许 SET @var 在 init_connect 中)
实际迁移时最容易被跳过的,是
lower_case_table_names
innodb_file_per_table
这类影响元数据行为的参数——它们不报错,但会导致后续备份、表拷贝、跨平台恢复失败。务必在初始化实例前就定好,而不是等出问题再调。

相关推荐