希望你们现在都知道,在过去的11月,当谷歌的数据库迁移服务为MySQL推出GA时,迁移你的SQL数据库变得更加容易。如果你不知道,现在将你的SQL数据库迁移到云SQL更容易了你可能已经注意到了,如果你没有注意到,我也很乐意指出,数据库迁移服务可以让你从许多不同的来源中提取,包括本地、AWS,甚至是云SQL的MySQL。
我们刚刚宣布DMS支持PostgreSQL的Cloud SQL作为一个来源,所以你也可以使用DMS来升级PostgreSQL的主要版本。但是这篇文章是关于MySQL的...
因为我想指出的是......注意这个,它出现在DMS流程的 "创建目的地 "页面。
所以,如果你在这里跟随,我告诉你,你也可以使用DMS对你的MySQL数据库进行主要版本的升级。当然,我们仍然会屏息等待原地升级,但在我们等待的时候,这是一个很好的选择。
有一个陷阱,因为当然有。这里的关键是,因为我们使用一个迁移工具来升级,所以有两个层面的复杂问题需要处理。我们有迁移部分和升级部分。DMS帮助管理了大量的工作,但仍有一些事情你需要考虑。在这篇文章中,我将把你需要考虑的所有问题集中起来,并链接到你使用数据库迁移服务为MySQL进行主要版本升级所需要的一切。
我们为什么在这里?
只是为了涵盖为什么你可能想首先升级MySQL。在性能升级和功能更新之间,有很多理由来做这件事。如果你需要说服力,这里有一份关于MySQL 8.0中的增强功能的漂亮列表。还有一个房间里的大象:今年2月,5.6正式被废弃。你可能在过去的8年里一直使用5.6,看到它在今年正式报废,有点恐慌。这里的好消息是,Cloud SQL将再支持5.6一段时间,但这并不意味着现在不是升级的好时机。
版本兼容性
首先要看的是你要在哪些版本之间升级。所以5.6到5.7或5.7到8.0。5.6到8.0是直接淘汰。MySQL在主要版本之间有重大变化,可能会破坏兼容性,所以你需要三重检查你的数据库是否有一些不兼容的变化。
例如,在5.6和5.7之间,你需要留意你的5.6数据库中的`INFORMATION_SCHEMA`表的任何系统或状态变量。这些都被5.7.6中的性能模式表所取代。还有很多小事情--如果你有一个数据类型为YEAR(2)的列,你需要将所有这些值更新为4位数的YEAR列,然后你才能再次使用这些列。如果你要从5.6到5.7,你可以在这里查看完整的变化列表。
当然,在5.7和8.0之间,还有更多的变化需要注意。对我来说,最大的变化是默认标志在这两个版本之间有很大的变化。虽然其中有很多可能不会破坏分段故障的东西,但它们可能会导致你的应用程序中出现一些意外的行为。另外,你可能想看一下你的AUTO_INCREMENT列。对于 FLOAT 和 DOUBLE 类型,它已经被废弃了。关于这两个版本之间变化的完整列表,请看这里。
连接这些点
如果你打算从一个云SQL实例升级到另一个,你可以跳过这一部分,因为你已经做了我要讲的事情。但是,如果你从一个本地数据库,或者在一些小的边缘案例中,从一个GCE(虚拟机)实例到云SQL,有一些额外的事情需要注意。
第一件事是延时。如果你已经习惯于从你的数据库中获得近乎即时的响应,因为它就在你的应用程序旁边,那么请准备好迎接一个醒目的电话。除非你的应用程序也住在云中,否则现在你的应用程序和数据库之间会有一些额外的时间。这可能是完全好的!或者,它可能会带来一些真正的困难。或者,它可能会在你的应用程序中引入一些非常难以调试的重入错误。我的一位同事写了一篇很好的文章,涵盖了所有你需要注意的事情,以及在将你的数据库从其他来源转移到Cloud SQL时可能发生的变化。
第2个问题是,我现在如何才能进入我的数据库?网络连接可能真的很困难。防火墙、路由和DNS都会给工作带来麻烦。在你这样做之前,所有的东西都连接得很好,而现在突然间你的数据库(有可能)住在互联网的一个完全不同的地方,有不同的要求来连接它。这个特别的兔子洞我已经走得很深了。我在这里写了一篇关于用数据库迁移服务连接源实例和目标实例的深入博文。如果你遇到连接方面的问题,那篇文章应该涵盖了大多数情况。
更多的迁移!
DMS使迁移数据的过程变得简单,但是由于我们依赖于数据库引擎的本地迁移机制,我们也会受到它的限制。这意味着一旦你完成了对数据库的迁移,无论它来自哪里,都有一些步骤需要完成。例如,你知道,你的IP地址会改变。因为我们使用迁移的方法来升级我们的版本,我们正在实例化一个新的实例。一旦我们得到就地升级,这就不是问题了,但同时我们必须记得更新任何指向旧IP地址的应用程序、负载均衡器等。
另一件事是,别忘了,你的用户存储在系统表中,这些表也没有被迁移。一旦DMS部分完成,这些需要被带过来。还有一些零碎的事情,这里有一个完整的帖子,列出了在你的新实例可以使用之前你需要完成的事情。
下一步是什么?
现在你已经有了新升级的实例,是时候让它为生产做好准备了。有一些东西你可能想要,但在云计算SQL实例完全上线之前,是无法进行设置的。
例如,在默认情况下,只用SSL的连接是关闭的,我们知道许多组织都强制要求只用SSL连接。这将需要在服务器上启用,并需要设置证书。这可以在数据迁移后但在DMS目标实例推广前完成。
灾难恢复是生产实例的另一个必要条件。这也是我们保证正常运行时间的SLA的一个要求。绝对需要设置这个。如果你编辑你的实例,它就会出现在主概览页上。
设置为 "多区 "就可以实现这个功能。
同样属于这个类别的还有读复制。优化你的数据基础设施以支持你的应用程序是关键,这是一个不可或缺的部分。如果你有一个重读的应用程序,你会想在这个游戏阶段设置你的读复制。
设置高可用性和读复制只能在你在DMS过程结束时提升实例后进行。
在我离开你之前,还有最后一点。你已经做了所有这些工作来升级你的实例到下一个版本。你已经设置了所有你需要的额外部分。你已经连接了你的应用程序,它完全可以和你的数据库对话。现在还不是按下 "推送 "按钮的时候。这对你们中的许多人来说可能是显而易见的。但我还是要说。测试!测试所有的东西。测试你能想到的所有边缘情况。测试在你的系统中任意添加更多的延迟,以确保你能处理应用程序和数据库之间的随机互联网延迟峰值。一旦高可用性功能开启,你就可以测试自动故障转移,模拟你的主实例发生故障,由后备实例接管。所以要测试。测试所有这些情况,以确保你的新的主要版本的SQL实例能够顺利启动。
希望这一切有助于指导你成功地使用数据库迁移服务将你的MySQL实例升级到一个新的版本如果你有问题或意见,请随时在下面评论或在Twitter上联系我,我的DMs是开放的!谢谢你的阅读。
使用谷歌数据库迁移服务升级MySQL主要版本最初发表在Google Cloud - Communityon Medium,在那里人们通过强调和回应这个故事来继续对话。