We recently announced public preview support for online migrations of MySQL to Azure Database for MySQL by using the Azure Database Migration Service (DMS). Customers can migrate their MySQL workloads hosted on premises, on virtual machines, or on AWS RDS to Azure Database for MySQL while the source databases remain online. This minimizes application downtime and reduces the SLA impact for customers.
Conceptionally, online migration with minimum downtime in DMS uses the following process:
- Migrate initial load using bulk copy.
- While initial load is being migrated, incoming changes are being cache and applied after initial load completes.
- Changes in source database continue to replicate to target database until user decides to cutover.
- During a planned maintenance window, stop the new transactions coming into source database. Application downtime starts with this step.
- Wait for DMS to replicate the last batch of data.
- Complete application cutover by updating the connection string to point to your instance of Azure Database for MySQL.
- Bring the application online.
Below are prerequisites setting up DMS and step-by-step instructions for connecting to a MySQL database source on AWS RDS.
- Create an instance of Azure Database for MySQL. Refer to the article Use MySQL Workbench to connect and query data for details on how to connect and create a database using the Azure portal.
- Create a VNET for the Azure Database Migration Service by using the Azure Resource Manager deployment model, which provides site-to-site connectivity to your on-premises source servers by using either ExpressRoute or VPN.
- Ensure that your Azure Virtual Network (VNET) Network Security Group rules do not block the following communication ports 443, 53, 9354, 445, 12000. For more detail on Azure VNET NSG traffic filtering, see the article Filter network traffic with network security groups.
- Configure your Windows Firewall for database engine access.
- Open your Windows firewall to allow the Azure Database Migration Service to access the source MySQL Server, which by default is TCP port 3306.
- When using a firewall appliance in front of your source database(s), you may need to add firewall rules to allow the Azure Database Migration Service to access the source database(s) for migration.
- Create a server-level firewall rule for the Azure Database for MySQL to allow the Azure Database Migration Service access to the target databases. Provide the subnet range of the VNET used for the Azure Database Migration Service.
- The source MySQL must be on a supported MySQL community edition. To determine the version of the MySQL instance, run SELECT @@version; in the MySQL utility or MySQL Workbench.
- Azure Database for MySQL supports only InnoDB tables. To convert MyISAM tables to InnoDB, see the article Converting Tables from MyISAM to InnoDB.
Setting up AWS RDS MySQL for replication
- Use the following instructions provided by AWS to create a new parameter group (see the binary logging format section).
- MySQL Database Log Files - Amazon Relational Database Service
- When creating the new parameter group, set the following values:
- binlog_format = row
- binlog_checksum= NONE
- Save the new parameter group
Pre-migration steps and setting up DMS
- Please refer to this tutorial to continue with schema migration, setting up DMS to do data movement and how to monitor data movement.
- For known issues and workarounds, please refer to this document.
- Congratulations, you have just performed a MySQL migration from AWS RDS to Azure Database for MySQL successfully!For more information, refer to the resources below. If you have any questions, please email the DMS Feedback alias at firstname.lastname@example.org.
Sign in on Azure portal and set up an instance of DMS for free. We are constantly adding new database source/target pairs to DMS. Stay up-to-date on #AzureDMS news and follow us on Twitter @Data_Migrations. Join the Azure Database Migration Service (DMS) Preview Yammer group, and give us feedback via User Voice or email by contacting us at email@example.com.