我在禁用外键约束检查的情况下将数据导入到 MariaDB 数据库中。这些检查随后启用。然而,数据库中的某些数据似乎已损坏,因为不满足外键约束。
我尝试使用
mysqlcheck
工具来验证所有表,但这不会产生任何错误输出。另外运行 CHECK TABLE someTable
不会显示任何错误或警告。
我仍然可以手动显示不正确的数据,例如通过执行查询:
select count(*) from some_table where id not in (select id from related_table)
其中 some_table 通过
id
对 related_table 有外键约束。
我该如何解决这个问题?
我也尝试过删除和添加(重新创建)索引;那没有帮助。 我的全局foreign_key_checks为“ON”。 就我而言,繁忙的 InnoDB 表似乎偶尔会出现损坏的字节。目前我必须修复它的唯一方法是手动检查每个繁忙的表中是否有需要手动修复的行。
我维护一个脚本来检查带有外键约束的表,我也还没有找到一个通用工具来执行此操作。
我有大约 50 个 MariaDB 服务器。 运行 MariaDB 10.6.5 的服务器可以很好地处理数据。 运行 MariaDB 10.6.10 - 11.1.1 的服务器则不会。
在 Ubuntu 22.04 LTS 上使用 Galera-3 或 Galera -4 集群时,我无法重现该问题。我猜任何损坏都会被 Galera 自动修复。
Mariadb-upgrade 也无法修复/失败。