mysql - 如何处理意外的 MySQL 数据库引擎更改?

标签 mysql postgresql

这个问题我遇到过两三次。我的一位客户恢复了备份,但意外地修改了引擎设置。结果,所有外键约束都丢失了,应用程序开始显示奇怪的结果。

第二个事件发生在我们的现场生产服务器上。 MySQL 停止支持 InnoDB 并显示错误“Unsupported Engine Type”。

我在 Google 上进行了搜索,发现了很多类似的查询。我想知道 MySQL 是否会修复这个错误。现在是转向 PostgreSQL 的合适时机吗?为什么我仍然坚持使用 MySQL 是因为它广泛的用户群。我对 PostgreSQL 了解不多。

谁能建议解决这个 MySQL 问题的方法或替代方法?

最佳答案

这听起来像是一个明确的迹象,表明从备份恢复没有经过适当的测试,这显然需要完成。

也就是说,这不是我第一次听说这种情况,有时结果会比这更糟糕。不幸的是,据我所知,如果 MySQL 无法满足请求,它并不是真正阻止 MySQL“降级”您的表引擎的方法。因此,您只需要小心并检查恢复结果即可。实际上,您应该始终这样做。

这是 MySQL 在很多情况下的运行方式(静默更改表管理器,忽略外键而不是在使用错误的表管理器时抛出“不支持的功能”错误等),并且它不被视为错误。因此,如果您确实认为这是一个您不想忍受的错误,那么是的,可能值得考虑切换数据库。

现在,关于实际问题的提示:我已经看到许多站点只是在他们的监控中部署一个检查(例如 nagios)来验证所有表都是 InnoDB,如果不是的话'我会在通用监控系统中发出严重警报。在您将错误数据输入系统之前,类似的东西很可能已经为您发现了这个问题。它远非完美,但它让您有机会及早发现问题。

关于mysql - 如何处理意外的 MySQL 数据库引擎更改?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1965603/

相关文章:

java - 如何解决无法执行语句; SQL [不适用];约束[patient_id];嵌套异常是 org.hibernate.exception.ConstraintViolationException

python - 如何在 SQLAlchemy 中使用 UUID?

Mysql 查询不适用于 WHERE BETWEEN

mysql - 我如何像格式化程序一样构造 SQL 代码,以使其通过 SQL 命令更好地读取到数据库

Django 未在 Postgres 数据库中创建表

postgresql - 如果不存在则创建聚合

mysql - 如何查询 MySQL 以获得 COUNT 的总和?

php - 使用 php 表单更新 WordPress 插件表行

mysql - 如何将 Spring Boot 应用程序连接到 MySQL 数据库?

postgresql - 如何配置 docker 和 postgres 以使用 pact broker