ERROR 1193 (HY000): Unknown system variable ‘show_compatibility_56‘


📘 GreatSQL 备份恢复报错问题笔记(已整理)

一、问题背景

在 GreatSQL 容器中执行备份恢复:

mysql -u root -p -S /data/GreatSQL/mysql.sock -f < fullbackup-20251130.sql

恢复过程中出现以下报错:

ERROR 1193 (HY000): Unknown system variable 'show_compatibility_56'
ERROR 1109 (42S02): Unknown table 'INNODB_LOCK_WAITS' in information_schema

备份来源 **MySQL 5.7 **,目标实例为 GreatSQL 8.0.x


解决方案:导出命令去掉sys

二、报错项逐条分析

✔ 1)ERROR 1193: Unknown system variable ‘show_compatibility_56’

原因

  • show_compatibility_56 是 MySQL 5.7 存在的兼容变量

  • MySQL 8.0(以及 GreatSQL 8.0)已彻底删除该变量

  • 备份文件中包含:

    SET @@show_compatibility_56 = 1;
    

是否影响恢复?

不影响业务数据恢复
此变量是兼容性设置,与数据无关。

建议处理

可忽略,也可在导入前清理:

sed -i '/show_compatibility_56/d' fullbackup-20251130.sql

✔ 2)ERROR 1109: Unknown table ‘INNODB_LOCK_WAITS’ in information_schema

原因

  • 在 MySQL 5.7:

    information_schema.INNODB_LOCK_WAITS
    
  • 在 MySQL 8.0 / GreatSQL 8.0 中:

InnoDB 锁视图已被移动到 performance_schema:

MySQL 5.7MySQL 8.0 / GreatSQL
information_schema.INNODB_LOCK_WAITSperformance_schema.data_lock_waits

备份文件中包含类似语句:

SELECT * FROM information_schema.INNODB_LOCK_WAITS;

是否影响恢复?

不影响业务数据恢复
这是 MySQL 工具导出的诊断信息(通常来自 sys 或在线备份工具),无需恢复。

建议处理

忽略即可,如需干净恢复可删除相关语句:

sed -i '/INNODB_LOCK_WAITS/d' fullbackup-20251130.sql

三、这些报错的整体影响评估

报错类型是否影响业务数据是否必须修复原因说明
删除的系统变量(show_compatibility_56)❌ 不影响❌ 否与设置兼容性相关,不作用于真实数据
INFORMATION_SCHEMA 旧表(INNODB_LOCK_WAITS)❌ 不影响❌ 否8.0 已迁移到 performance_schema,此类视图不会恢复
sys/performance_schema 对象导入失败❌ 不影响❌ 否本身不属于用户数据

最终结论:这些报错属于跨版本恢复时的“正常兼容性提示”,不会影响业务数据恢复。


四、推荐的备份文件清洗方法(可选)

如果希望导入过程零报错,可以使用以下清洗脚本:

sed -i '/show_compatibility_56/d' fullbackup.sql
sed -i '/INNODB_LOCK_WAITS/d' fullbackup.sql
sed -i '/INFORMATION_SCHEMA/d' fullbackup.sql
sed -i '/SYS\./d' fullbackup.sql

五、恢复后需要重点检查的内容

✔ 1)数据库是否都恢复成功

show databases;

✔ 2)表是否完整

use yourdb;
show tables;

✔ 3)是否有触发器、存储过程恢复失败

show procedure status;
show trigger status;

✔ 4)MySQL 错误日志是否有结构性错误


六、最终总结(可直接复制到运维记录)

  • 报错来自 MySQL 5.7 → GreatSQL 8.0 的跨版本差异
  • show_compatibility_56 在 8.0 中已移除
  • INNODB_LOCK_WAITS 已从 INFORMATION_SCHEMA 迁移到 performance_schema
  • 报错均不影响表结构和数据恢复,可忽略
  • 如需零报错恢复,可提前清洗 SQL 文件

在 MySQL 的 `performance_schema` 中,`show_compatibility_56` 是一个用于控制性能模式中某些表是否显示的系统变量。该变量默认值为 `OFF`,但可以通过设置为 `ON` 来启用对 MySQL 5.6 版本的兼容性支持,以便在升级过程中提供过渡便利[^1]。 当启用 `show_compatibility_56=ON` 时,`performance_schema` 会显示一些在 MySQL 5.6 中存在的旧表和列,这些对象在后续版本中可能已经被弃用或重构。例如,某些事件等待相关的表如 `events_waits_current`、`events_waits_history` 和 `events_waits_history_long` 会以兼容性模式显示[^2]。 启用该选项的影响包括: 1. **兼容性增强**:对于依赖旧版本性能模式结构的应用程序或监控工具来说,启用该选项可以减少升级到更高版本 MySQL 后的适配工作量。 2. **性能开销**:由于需要维护额外的兼容性对象,可能会带来一定的性能开销,尤其是在高并发或高负载的环境中。因此,建议在生产环境中谨慎使用此选项,并在性能测试后决定是否保留。 3. **功能限制**:启用兼容性模式可能会限制对新版本中改进功能的访问,因为系统会优先保持与旧版本的行为一致[^3]。 要启用 `show_compatibility_56`,可以在 MySQL 配置文件中添加以下配置项,或在运行时通过 SQL 命令动态修改: ```sql SET GLOBAL show_compatibility_56 = ON; ``` 需要注意的是,从 MySQL 8.0 开始,官方逐步减少了对 `show_compatibility_56` 的依赖,并鼓励用户直接使用更新后的性能模式对象,以充分利用新版本的功能改进[^4]。 ### 相关问题 1. MySQL 8.0 中是否还推荐使用 show_compatibility_56? 2. 如何检查当前 performance_schema 中的兼容性设置? 3. 启用 show_compatibility_56 是否会影响数据库的整体性能? 4. 有哪些替代方案可以替代 show_compatibility_56 提供的功能? 5. 在升级 MySQL 版本时,如何处理 performance_schema 的兼容性问题?
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值