Mysql Flyway升级与向在线模式迁移的过渡等

Mysql Flyway升级与向在线模式迁移的过渡等,mysql,database-migration,liquibase,flyway,pt-online-schema-change,Mysql,Database Migration,Liquibase,Flyway,Pt Online Schema Change,我们的主要项目从一开始就使用了现在非常旧的Flyway版本。(v3.2.1) Flyway多年来做了大量改进,v6+似乎包含了许多MySQL模式的有趣特性 在尝试支持的升级路径时,我遇到了一些问题——例如,我们的.sql迁移从开始到结束都拒绝迁移;Flyway v3.2.1认为我们所有的SQL迁移都是有效的,但v4+会被一些奇怪的注释语法所阻塞。当然,为了使迁移工作起来而进行的文件修复将产生不同的校验和,这是安全升级的一个障碍。我很清楚v5中模式表名称的变化;这不是不可克服的 我还关注Liqu

我们的主要项目从一开始就使用了现在非常旧的Flyway版本。(v3.2.1)

  • Flyway多年来做了大量改进,v6+似乎包含了许多MySQL模式的有趣特性
  • 在尝试支持的升级路径时,我遇到了一些问题——例如,我们的.sql迁移从开始到结束都拒绝迁移;Flyway v3.2.1认为我们所有的SQL迁移都是有效的,但v4+会被一些奇怪的注释语法所阻塞。当然,为了使迁移工作起来而进行的文件修复将产生不同的校验和,这是安全升级的一个障碍。我很清楚v5中模式表名称的变化;这不是不可克服的
  • 我还关注Liquibase vs.和在线模式迁移工具;FB、Percona和GitHub的OST(gh OST)看起来很有趣,但我们使用外键,而且我们需要更多的副本,所以这可能不是我们现在的计划
现在,我对一个新的基线和FlywayV7测试版或切换工具感兴趣。如果您在k8s上部署SaaS并有任何通用建议,我会接受,但我对一件事特别感兴趣:


人们如何克服Flyway新版本不再接受现有SQL迁移的问题。或者,是否有人“放弃”了,只是创建了一个新的基线,而不是执行漫长的升级路径?(或者,从Flyway切换到具有类似优点的另一种工具)

这里至少有两个问题,其中有许多运动部件:

  • 处理工具的约束,以及如何处理Flyway 3->7+(遵循工具的文档)
  • 一般来说,如何合并大型prod SQL迁移,这是一个太普遍的问题,无法在这里讨论
  • 如果有人对第一个问题有更好(不太笼统)的建议,我很乐意听

    Re:第二,我们正在寻找我们的infra和现成工具的部署


    我参与的大多数项目都是基于Spring的。(大型生态系统,即使没有k8s位)

    除了SQL Server之外,您还使用其他工具吗?如果是这样的话,那么像liquibase这样支持多种不同db平台的东西也可以通过liquibase generateChangelog使跨平台迁移变得更容易。感谢您的回复。对不起,回复太慢了。MySQL是我们目前的系统,但我知道postgres和Microsoft的SQL也是非常常见的变体。Liquibase非常有趣,我可能会在自己的项目中使用它,但我很好奇人们如何在prod中处理w/k8s。具体来说:如果没有任何DB副本,何时运行SQL迁移?新的或旧的POD似乎总是在零停机场景中执行。这意味着每一次迁移都必须是向前或向后兼容的,而且实际上不存在滚动部署和一般安全保证。简单地只读?我意识到这是一个老化的问题。。。在这里你可以考虑一个蓝色/绿色部署策略。使用2个数据库并运行临时同步脚本,将新条目从旧数据库复制到新数据库(如果可能)。这样,您可以滚动您的pod以引用新的DB服务器。迁移完成后,解散旧服务器。只是想一想…谢谢大家。更新:我们构建了一个Docker映像w/k8s作业来管理迁移,这也确保了我们始终准确地知道我们在进行w.r.t.架构更改的内容和时间。对于在线迁移,这是您需要超过某个成熟度阈值的东西,Percona工具似乎是一个不错的选择,只要您达到~10M行或~10G表+索引/DB。避免(或过多)FK可能会使建议波动——想象一下,当女王指挥交通时,数千只蜜蜂在蜂巢上爬行。(根据系统的需要,您将知道何时DDL太慢)