迁移方法
可以使用多种不同的方法进行数据库迁移,例如联机或脱机迁移、备份和还原迁移,或者使用自定义 SQL 代码或脚本进行迁移。 每种方法都最适合于特定的业务场景。
例如,在你的初创公司中,供应商通信数据库至关重要,你想要尝试在不会对用户造成任何服务中断的情况下进行迁移。 公司的这个部门 24 小时全天候运行,几乎没有可以预测的闲暇时段将数据库脱机。 相反,计算机辅助设计 (CAD) 系统仅在工作日使用,因此你可以在周末将其脱机并迁移到 Azure。
在这里,你将了解可以选择执行迁移的方法、技术和工具。
何时使用导出和导入
凭借导出和导入技术可以控制迁移过程中移动的数据和架构。 如果要选择迁移到新数据库的数据,并且可能会在迁移过程中清理或修改数据,请使用导出和导入工具。
请在以下情况考虑使用导出和导入技术:
想要选择本地数据库中部分表来迁移到云数据库时。
想要迁移数据库对象(例如约束、视图、函数、过程和触发器),并控制如何在云数据库中设置这些对象时。
想要从 MySQL、MariaDB 或 PostgreSQL 以外的外部源导入数据时。
例如,在下列情况中你可能会考虑导出和导入:
你想要执行逐段迁移,先将市场营销工作负载迁移到云并进行测试,然后再迁移销售支持工作负载。 这两个工作负载都使用本地系统中 SalesDB 数据库中的表。 你希望在项目第一个阶段仅迁移市场营销表,而在第二个阶段仅迁移销售表。
本地数据很陈旧,并且与当前业务相关和不相关的数据混杂其中。 你想借此机会删除旧数据,并考虑使用更简化的数据库架构。
你有一个包含与产品相关的数据的大型电子表格。 你需要将此数据迁移到云数据库。
计划导出和导入迁移
使用导出和导入的优点是,可以对被迁移数据拥有额外的控制级别。 不过,缺点是必须更仔细地计划,以确保包含所需的所有对象。
请确保了解以下对象的迁移方式:
- 数据库架构。
- 包括主键、外键和索引的约束。
- 视图、函数、过程和触发器。
- 用户帐户和权限。
MySQL 和 MariaDB 的导出和导入
你可以使用 SQL 脚本进行从一个数据库到另一个数据库的选择性导出和导入。 但如果本地数据库位于 MySQL 或 MariaDB 中,则可以使用几种工具来提供帮助,其中包括:
MySQL Workbench。 这是一款热门的数据库设计工具,其图形用户界面 (GUI) 由 Oracle 公司开发。 它包括一个具有灵活数据选择选项的“数据导出”工具。
Toad Edge。 这是由 Quest 开发的竞争性工具集, 用于在 MySQL 和 PostgreSQL 数据库导出和导入数据。
Navicat。 此数据库管理 GUI 工具也与 MariaDB 数据库兼容。
mysqlimport。 此命令行工具可以从文本文件导入数据。
重要
Azure Database for MySQL 和 Azure Database for MariaDB 仅支持 InnoDB 存储引擎。 如果有任何表使用其他引擎(如 MyISAM 引擎),则在迁移到 Azure 之前,必须先将它们转换为 InnoDB。
PostgreSQL 导出和导入
PostgreSQL 提供了以下用于导出和导入数据的工具:
pgAdmin。 这是适用于 PostgreSQL 管理员的 GUI 实用工具。 它提供用于导出和导入数据的接口。
pg_dump。 这是一款命令行工具,用于以各种格式导出(包括测试)数据库。 可以在使用 psql 实用工具在导入生成的 .sql 文件之前对其进行编辑。
Toad Edge。 这和在 MySQL 中使用的实用工具相同。
备份和还原
执行备份和还原操作通常是为了防止数据库发生灾难。 获取并保存数据库的精确副本。 如果灾难销毁了工作副本,则会还原备份副本,并可恢复正常业务。
通过还原到其他位置,可以使用备份将完整的数据库迁移到其他位置,例如云中的数据库。
何时使用备份和还原
备份工具制作了简单且精确的数据库副本。 在云数据库中还原时,你将获得与在本地系统中完全相同的数据和架构。 请在以下情况使用备份和还原来迁移数据库:
要在一个操作中迁移整个数据库或一组数据库时。
不需要在迁移期间对数据、架构或其他数据库对象进行任何修改时。
在以下情况下,可以考虑使用备份和还原执行迁移:
你只有一个单一数据库系统,并且希望通过尽可能少的修改就可以将其直接迁移到云中。
你想要在具有多个数据库的系统上执行逐段迁移。 每个工作负载均由完整的数据库支持。
将数据库从备份文件还原到云位置时,请考虑必须通过网络发送到云数据库的数据量。 若要优化此数据传输,请将备份的数据库复制到目标数据库所在的同一区域中的虚拟机,并从此处还原。 此还原比使用本地备份文件要快,并且不太可能导致网络带宽争用。
计划 MySQL 和 MariaDB 上的备份和还原
若要在本地服务器上备份数据库,请在命令行中使用 mysqldump
工具。 此操作会创建一个 .sql 文件,你可以通过将该文件作为脚本传递到 mysql
命令来将其还原到云数据库。 如果更喜欢使用 GUI 工具,请选择 PHPMyAdmin 应用程序或 MySQL Workbench。 这些 GUI 工具可以备份和还原数据。
请记住,Azure Database for MySQL 和 Azure Database for MariaDB 仅支持 InnoDB 引擎。 请确保在执行备份之前将所有表转换为 InnoDB。
若要避免任何兼容性问题,请检查云中使用的 MySQL 或 MariaDB 的版本号是否与本地数据库服务器的版本号匹配。 Azure Database for MySQL 支持 5.6、5.7 和 8.0 版本。 Azure Database for MariaDB 支持 10.2 和 10.3 版本。 如果本地服务器使用更低版本,请考虑先将其升级到这些版本,并在迁移到云之前排查任何本地问题。
计划 PostgreSQL 上的备份和还原
PostgreSQL 上的等效命令行备份和还原工具是 pg_dump
和 pg_restore
。 对于 GUI 备份和还原工具,请使用 Toad Edge。
自定义应用程序代码
如果有大量数据转换要求,或者想要执行异常的迁移,请考虑编写你自己的自定义代码,将数据从本地 MySQL、PostgreSQL 或 MariaDB 数据库移动到云中。
你的自定义代码可采用多种形式。 你选择的语言和框架主要取决于开发团队的专业知识:
- 从数据库生成并修改或从头开始开发的 SQL 脚本。
- 来自 .NET 或 Java 等开发框架的已编译代码。
- PHP 或 Node.js 中的脚本。
- 用于 Bash 或 PowerShell 的 Shell 脚本。
自定义代码方法可以实现非常大的灵活性。 你可以自定义筛选、聚合和转换数据的方式,还可以迁移到多个目标或合并来自多个源的数据。 如果你的要求无法通过现成的备份或导出工具满足,请使用这种方法。
此方法的缺点是需要投入更多的开发时间。 若要使自定义代码正确地迁移所有数据,必须在运行实际数据之前对其进行广泛的测试。 此任务需要经验丰富的开发人员和测试人员团队,并经常会增加项目预算。 如果正在考虑编写自定义迁移代码,请不要低估创建可靠代码所需的时间和工作量。
Azure 数据库迁移服务
Azure 包含一项名为 Azure 数据库迁移服务 (DMS) 的灵活服务,可用于从多个数据源到 Azure 数据平台的无缝联机迁移。 这些平台包括 Azure Database for MySQL、Azure Database for MariaDB 和 Azure Database for PostgreSQL。
无论何时想要在 Azure 中执行联机数据库迁移时,请考虑使用 Azure DMS。
初始迁移
若要使用 DMS 执行迁移,请完成以下任务:
- 在所选平台上的 Azure 中创建新的目标数据库。
- 创建新的 Azure 数据库迁移服务 (DMS) 数据迁移项目。
- 从本地源数据库生成架构。 如果使用的是 MySQL,则可以使用
sqldump
生成架构。 如果源数据库为 PostgreSQL,请使用pg_dump
。 - 创建一个空数据库,用作迁移目标。
- 将架构应用于目标数据库。
- 配置 DMS 迁移项目中的源数据库和目标数据库的连接详细信息。
- 运行 DMS 迁移项目。 项目传输数据并生成报表。
- 查看报表并更正它识别到的任何问题。
联机迁移
Azure DMS 是一款好用的联机迁移工具,原始数据库在迁移执行时仍可用。 用户可以继续对源数据库中的数据进行更改。 Azure DMS 使用复制将这些更改与迁移的数据库同步。 迁移完成后,可以重新配置用户应用程序以连接到迁移的数据库。
将 MySQL 或 MariaDB 迁移到 Azure SQL 数据库
如果要将 MySQL 数据库服务器上本地托管的数据库移到 Azure 云中(不需要云数据库来运行 MySQL),请考虑迁移到 Azure SQL 数据库。 Azure SQL 数据库是 Microsoft 行业领先的 SQL Server 数据库引擎的 PaaS 实现。 它包括企业级可用性、可伸缩性和安全性,并且易于监视和管理。
同样,如果本地数据库服务器运行 MariaDB,可以考虑迁移到 Azure SQL 数据库。 此过程非常相似,因为 MariaDB 是 MySQL 的分支。
Azure SQL 数据库的功能比 Azure Database for MySQL 和 Azure Database for MariaDB 更全面。
注意
你可能需要对连接到迁移数据库的任何应用程序进行修改,因为 Azure SQL 数据库使用 MySQL 和 MariaDB 中不同的数据类型、不同的数据库对象和不同的 API。 请咨询开发人员,确定将客户端应用程序从本地 MySQL 或 MariaDB 数据库移植到云 Azure SQL 数据库所需的工作量。
SQL Server Migration Assistant for MySQL
如果决定从 MySQL 迁移到 Azure SQL 数据库,可以使用专门的工具:适用于 MySQL 的 SQL Server 迁移助手。 此 GUI 工具连接到源 MySQL 数据库和可以作为 Azure SQL 数据库服务中的数据库的 SQL Server 数据库。
连接后,该助手会将完整的架构复制到 Azure SQL 数据库,并将任何数据类型转换为 SQL Server 的等效项。 它还迁移视图、过程、触发器和其他对象。 然后,可以开始将数据从 MySQL 迁移到 Azure SQL 数据库。
注意
适用于 MySQL 的 SQL Server 迁移助手未对将 MariaDB 数据库迁移到 Azure SQL 数据库进行测试。