将本地 MySQL 迁移到 Azure Database for MySQL:使用 MySQL Workbench 完成数据迁移

适用于:Azure Database for MySQL - 单一服务器 Azure Database for MySQL - 灵活服务器

先决条件

数据迁移

设置

按照安装指南中的所有步骤创建环境,以支持以下步骤。

配置服务器参数(源)

根据选择的迁移类型(脱机和联机),需要评估是否要修改服务器参数以支持快速传出数据。 如果联机迁移,可能无需对服务器参数执行任何操作,因为系统可能会执行 binlog 复制并自行同步数据。 但是,如果脱机迁移,则在停止应用程序流量后,可以将服务器参数从支持工作负荷中切换为支持导出。

配置服务器参数(目标)

在开始向 Azure Database for MySQL 导入进程之前,请查看服务器参数。 可使用 Azure 门户检索和设置服务器参数,或者通过调用 Azure PowerShell for MySQL cmdlet 进行更改。

执行以下 PowerShell 脚本以获取所有参数:

\[Net.ServicePointManager\]::SecurityProtocol = \[Net.SecurityProtocolType\]::Tls
12

Install-Module -Name Az.MySql
Connect-AzAccount -Environment AzureChinaCloud
$rgName = "{RESOURCE\_GROUP\_NAME}";
$serverName = "{SERVER\_NAME}";
Get-AzMySqlConfiguration -ResourceGroupName $rgName -ServerName $serverName
mysql --host {servername}.mysql.database.chinacloudapi.cn --database mysql --user
{u sername}@{servername} -p --ssl-ca=c:\\temp\\DigiCertGlobalRootCA.crt.pem
-A -e "SHOW GLOBAL VARIABLES;" \> c:\\temp\\settings\_azure.txt

在新的 `settings_azure.txt` 文件中,可以看到默认的 Azure Database for MySQL 服务器参数,如附录中所示。

若要支持迁移,请设置目标 MySQL 实例参数以允许更快传入。 在开始数据迁移之前,应设置下列服务器参数:

  • max\_allowed\_packet – 将参数设置为 1073741824(即 1 GB)或数据库中某行的最大大小,以避免因长行导致溢出问题。 如果有需要拉取(或读取)的大型 BLOB 行,请考虑调整此参数。

  • innodb\_buffer\_pool\_size – 在迁移期间从门户的定价层纵向扩展服务器到 32 vCore 内存优化 SKU,以增大 innodb_buffer_pool_size。 只能通过纵向扩展 Azure Database for MySQL 服务器的计算来增大 innodb_buffer_pool_size。 参阅 Azure Database for MySQL 中的服务器参数,以了解该层的最大值。 内存优化 32 vCore 系统中的最大值为 132070244352

  • innodb\_io\_capacity&innodb\_io\_capacity\_max - 将该参数更改为 9000 以提高 IO 利用率,从而优化迁移速度。

  • max\_connections - 如果使用生成多个线程的工具来提高吞吐量,请增加连接以支持该工具。 默认值为 151,最大值为 5000

    注意

    执行缩放时请小心。 某些操作不能撤消,如存储缩放。

可以使用以下 Azure PowerShell cmdlet 更新这些设置:

Install-Module -Name Az.MySql
$rgName = " {RESOURCE\_GROUP\_NAME}";
$serverName = "{SERVER\_NAME}";

Select-AzSubscription -Subscription "{SUBSCRIPTION\_ID}"
Update-AzMySqlConfiguration -Name max\_allowed\_packet -ResourceGroupName
$rgna me -ServerName $serverName -Value 1073741824
Update-AzMySqlConfiguration -Name innodb\_buffer\_pool\_size -ResourceGroupName
$rgname -ServerName $serverName -Value 16106127360
Update-AzMySqlConfiguration -Name innodb\_io\_capacity -ResourceGroupName
$rgna me -ServerName $serverName -Value 9000
Update-AzMySqlConfiguration -Name innodb\_io\_capacity\_max -ResourceGroupName
$ rgname -ServerName $serverName -Value 9000

\#required if You've functions

Update-AzMySqlConfiguration -Name log\_bin\_trust\_function\_creators
-ResourceGr oupName $rgname -ServerName $serverName -Value ON

数据

工具选择

迁移源系统中的数据库对象和用户后,就可以开始迁移。 MySQL 版本 8.0 上运行的数据库无法使用 Azure DMS 来迁移工作负荷。 相反,迁移用户应该使用 MySQL 工作台。

手动导入和导出步骤

  • 打开 MySQL Workbench 并连接为本地数据库的根用户。

  • 在“管理”下,选择“数据导出”********。 选择 reg_app 架构。

  • 在“导出对象”中,选择“转储存储过程和函数”、“转储事件”和“转储触发器”。

  • 在“导出选项”下,选择“导出到独立文件”。

  • 同时,选中“包括创建架构”复选框。 请参阅下图以查看正确的 mysqldump 配置。

    包含创建架构的屏幕截图。

    Test

  • 如果这些选项中的任何一个不可用,它们可能是受到“输出”窗格的阻碍。 只需更改编辑器布局即可。

    编辑器布局的屏幕截图。

    Test

  • 选择“导出进度”选项卡。

  • 选择“开始导出”,并注意 MySQL Workbench 会调用 mysqldump 工具。

  • 打开新创建的导出脚本。

  • 查找所有 DEFINER 语句,并将其更改为有效用户或完全删除。

注意

可以通过在 mysqldump 命令中传递 --skip-definer 来完成此操作。 这不是 MySQL 工作台中的选项;因此需要在导出命令中手动删除这些行。 尽管我们在此处指出了要删除的四项,但从一个 MySQL 版本迁移到另一个版本(如新保留字)时,会出现其他可能失败的项。

  • 查找 SET GLOBAL 语句,并将其更改为有效用户或完全删除。

  • 确保未将 sql\_mode 设置为 NO\_AUTO\_CREATE\_USER

  • 删除 hello\_world 函数。

  • 在 MySQL Workbench 中,创建与 Azure Database for MySQL 的新连接。

    • 对于“主机名”,输入完整服务器 DNS(例如:servername.mysql.database.chinacloudapi.cn)。

    • 输入用户名(例如:sqlroot@servername)。

    • 选择“SSL”选项卡。

    • 对于 SSL CA 文件,请浏览到 DigiCertGlobalRootCA.crt.pem 密钥文件。

    • 选择“测试连接”,确保完成连接。

    • 选择“确定”

      MySQL 连接对话框的屏幕截图。

      “MySQL 连接”对话框如上所示。

  • 选择“文件 -> 打开 SQL 脚本”。

  • 浏览找到转储文件,然后选择“打开”。

  • 选择“执行”。

更新应用程序以支持 SSL

  • 使用 Visual Studio Code 切换到 Java 服务器 API。

  • 打开“launch.json”文件。

  • 将 DB_CONNECTION_URL 更新为 jdbc:mysql://serverDNSname:3306/reg\_app?useUnicode=true\&useJDBCCompliantT imezoneShift=true\&useLegacyDatetimeCode=false\&serverTimezone=UTC\&verifySe rverCertificate=true\&useSSL=true\&requireSSL=true\&noAccessToProcedureBodie s=true.。注意其他 SSL 参数。

  • 将 DB_USER_NAME 更新为 conferenceuser@servername。

  • 启动“调试”配置,并确保应用程序使用新数据库在本地运行。

修改服务器参数

可以更改 Azure Database for MySQL 目标实例上的以下参数。 可以通过 Azure 门户或使用 Azure PowerShell for MySQL cmdlet 来设置这些参数。

$rgName = "YourRGName";
$serverName = "servername";
Update-AzMySqlConfiguration -Name max\_allowed\_packet -ResourceGroupName
$rgna me -ServerName $serverName -Value 536870912
Update-AzMySqlConfiguration -Name innodb\_buffer\_pool\_size -ResourceGroupName
$rgname -ServerName $serverName -Value 16106127360
Update-AzMySqlConfiguration -Name innodb\_io\_capacity -ResourceGroupName $rgna
me -ServerName $serverName -Value 200
Update-AzMySqlConfiguration -Name innodb\_io\_capacity\_max -ResourceGroupName
$ rgname -ServerName $serverName -Value 2000

更改 Java API 的连接字符串

  • 使用以下命令更改应用服务 Java API 的连接字符串
$rgName = "YourRGName";
$app_name = "servername";
az webapp config appsettings set -g $rgName -n $app_name
--settings DB_CONNECTION_URL={DB_CONNECTION_URL}

注意

请记住,可以在门户中设置连接字符串。

  • 重启应用服务 API
az webapp restart -g $rgName -n $app\_name

已成功完成本地 Azure Database for MySQL 迁移!

下一步