2

我正在考虑将我的 MySQL DB 迁移到 Azure Database for MySQL https://azure.microsoft.com/en-us/services/mysql/。它目前驻留在另一家公司托管的服务器上。数据库约为 100 GB。(让我担心的是,Azure 使用术语“相对较大”来表示 1GB。)

有没有办法在没有任何或很少(几个小时,最多)停机时间的情况下迁移数据库?我显然不能进行转储和加载,因为停机时间可能是几天。他们的文档似乎是用于与已经在 MS 服务器上的 MySQL 服务器同步。

如果我以后想使用其他东西,有没有办法将数据从 MS Azure 中导出,而无需大量停机?

4

2 回答 2

0

另一种方法:使用 Azure 数据工厂将数据从 MySQL 源复制到 Azure DB。设置使用新行更新 Azure 数据库的同步过程。同步,使 MYSQL 数据库脱机,再次同步并切换到 Azure 数据库。

请参阅 Microsoft 联机帮助

于 2020-04-11T14:32:10.463 回答
-1

不要低估这种迁移的复杂性。

对于 100GB,可以很好地猜测您的表中的大多数行都不会被更新或删除。

为了让我的建议起作用,您需要一种方法

SELECT * FROM table WHERE (the rows are new or updated since a certain date)

一些仅 INSERT 表将具有自动递增的 ID 值。在这种情况下,您可以计算出新旧之间的 ID 截止值。其他表可能已更新。除非这些表有时间戳说明它们何时更新,否则您将很难弄清楚。您需要了解您的数据才能做到这一点。如果您的WHERE (new or updated)操作需要一些较旧的额外行,那也没关系。如果它错过了 INSERTed 或 UPDATEd 行,那就不行了。

一旦您知道如何为每个大表执行此操作,您就可以开始迁移了。

大规模迁移保持旧系统在线并处于活动状态,您可以使用它mysqldump来将数据迁移到新服务器。只要您需要,您就可以完成它。阅读本文以获取一些建议。即使使用 max_allowed_pa​​cket 参数,在使用 mysqldump 时也会丢失与 mysql 的连接

然后,您将在新服务器上拥有数据的陈旧副本。确保正确构建索引。您可能希望OPTIMIZE TABLE在新加载的表上使用。

更新迁移然后,您可以使用WHERE (the rows are new or updated)查询来迁移自迁移整个表以来已更改的行。同样,您可以根据需要执行此操作,同时保持旧系统在线。它应该比您的第一次迁移花费更少的时间,因为它将处理更少的行。

最终迁移,脱机最后,您可以使系统脱机并迁移剩余的行,即自上次迁移以来更改的行。并再次完全迁移您的小表。然后启动你的新系统。

是的,但是,你说,我怎么知道我做对了?

  1. 为获得最佳结果,您应该编写迁移步骤的脚本,并使用这些脚本。这样,您的最后迁移步骤将很快进行。

  2. 您可以在本地服务器上排练此过程。虽然 100GiB 对于数据库来说很大,但在台式机或服务器机房机器上的磁盘空间量并不算大。

  3. 保存从大规模迁移步骤中提取的非常大的文件,以便在第一次尝试加载它们时重新使用它们。这样,您将节省旧系统上的重复提取负载。

  4. 您应该(在您的新云提供商处)建立已迁移数据库的暂存副本,并使用应用程序的暂存副本对其进行测试。您可以使用一小部分行来执行此操作。但是请务必使用此副本测试您的最终迁移步骤,以确保它有效。

  5. 如果新系统出错,请做好快速回滚到旧系统的准备。

而且,也许这是在迁移之前清除一些旧数据的机会。这种迁移非常困难,您可以在开始迁移之前制定一个从旧服务器中提取然后删除旧行的业务案例。

于 2020-04-11T14:18:51.097 回答