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

5次阅读

迁移后需同步max_allowed_packet、sql_mode、时区、字符集及lower_case_table_names等关键参数:旧值需显式配置到my.cnf并重启生效,避免隐式降级或行为偏差。

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

迁移后 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_serverlatin1,新建表/临时表/函数内部字符串仍会降级,引发乱码或索引失效。

  • 比对关键变量:character_set_servercollation_serverinit_connect
  • 推荐统一设为:character_set_server = utf8mb4collation_server = utf8mb4_unicode_ci
  • 注意 init_connect 若含 SET 语句,需确保其语法兼容新版本(如 8.0+ 不允许 SET @var 在 init_connect 中)

实际迁移时最容易被跳过的,是 lower_case_table_namesinnodb_file_per_table 这类影响元数据行为的参数——它们不报错,但会导致后续备份、表拷贝、跨平台恢复失败。务必在初始化实例前就定好,而不是等出问题再调。

text=ZqhQzanResources