从 MySQL 8.0 升到 8.4(LTS):替换复制语法、删除的变量与拆分的 FLUSH 权限
从 MySQL 8.0 升级到 8.4(LTS),整体平滑,但一批被移除的语法和配置会在启动或运行时报错。按复制、过期变量、SQL/结构限制、权限四组逐项核对。
复制相关(最容易报错)
旧复制语法在 8.4 中直接报语法错误:
CHANGE MASTER TO→CHANGE REPLICATION SOURCE TOSHOW SLAVE STATUS→SHOW REPLICA STATUSMASTER_HOST/MASTER_PASSWORD等 →SOURCE_HOST/SOURCE_PASSWORD
复制配置和客户端工具里的关键字都要同步替换。
复制相关的过时选项也会报错,比如已废弃的
SOURCE_*老式选项。SOURCE_RETRY_COUNT默认值改为 10,SOURCE_CONNECT_RETRY默认值为 60 秒;升级后重连节奏和以前不一样。
过期变量 / 配置被删
expire_logs_days已删除:运行时读写该变量会报错,改用binlog_expire_logs_seconds,单位秒,默认 604800(7 天)。default_authentication_plugin不再生效:改用authentication_policy直接指定认证插件,如caching_sha2_password。binlog_transaction_dependency_tracking在 8.0.35 / 8.2 弃用,8.4 移除:多线程复制现在始终用 writeset 生成依赖信息,无需再设置。character-set-client-handshake兼容选项被弃用。
SQL / 结构限制
- 自 8.4 起,
FLOAT/DOUBLE列上的AUTO_INCREMENT直接报错,自增只能用于整数类型。 - 外键限制收紧:默认禁止在非唯一键或部分键上创建外键(
restrict_fk_on_non_standard_key),非标设计需显式关闭该选项。 FLUSH HOSTS语句废弃,改用TRUNCATE TABLE performance_schema.host_cache。
权限
新增 FLUSH_PRIVILEGES 权限;FLUSH_OPTIMIZER_COSTS / FLUSH_STATUS 相关权限拆细。原来靠 RELOAD 一把梭的账号,升级后如果只有旧 RELOAD 权限、缺少新增细分权限,部分 FLUSH 操作会失败。
升级前建议
先 grep 配置和代码里的旧变量/旧语法;再用 mysqldump --no-data 对 schema 预跑一遍校验。8.4 对行宽/默认值校验更严,参见另一篇 8.4.11 行宽变更。
参考:https://dev.mysqlserver.cn/doc/refman/8.4/en/mysql-nutshell.html