While the previous articles
introduced the Azure Database Migration Service for the purpose of migrating
databases between MySQL servers, this article discusses a specific scenario and
the errors and resolutions encountered.
The source server is an Azure MySQL Single Server instance.
It is set up to allow access to all Azure Services. There are no virtual
network rule customizations and the default access over the internet works.
The destination server is an Azure MySQL flexible server. It
has been set up to allow access privately. There is a virtual network and
subnet to which it is connected and registered in the private DNS for lookup by
its name with the privatelink.mysql.database.azure.com. It does not connect
directly over the internet.
The size of the database is small so the duration of the
migration can be assumed to be in the order of a few minutes. There is only one
database with a few tables.
When the database copy activity is attempted to be created
in a new migration project on the console of the Database Migration Service, it
takes the source server parameters and validates the connectivity but fails to
do so for the destination server. The DMS service is deployed to an independent
virtual network without a NAT gateway.
If the flexible server had been set up to allow public
access and with the allowed access to the DMS service, the migration would have
proceeded smoothly. Since the connectivity is private, the DMS service must
make some adjustments and there will be errors encountered.
The first error is encountered by virtue of peering at the
virtual networks between the DMS service and the destination server – a step
necessary to allow traffic both ways over the private networks. Since the
default subnet of both resources might begin with 10.0.0.0/16 CIDR, the peering
cannot be made. It is necessary to create the DMS Service in a subnet with the
address space different from the one that the destination MySQL server uses.
Typically, this is an afterthought and one that escapes attention at the time
of creation of the DMS service instance or the MySQL server.
The second error is encountered once the address space has
been created distinct for both the subnets of the service and the MySQL
flexible server. This error comes from the fact that the creation of a
non-default address space of a virtual network/subnet for the service prevents
the service from communicating to the source server with an error that says
something like “UnauthorizedAccessException - 40103: Invalid authorization token
signature,
Resource:sb://<somename>.servicebus.windows.net:<sometopic>.
Althought this error is cryptic and complains about the way a signature was
created for an api call, it goes away unexplicably when the service is switched
to the default address space.
This leads to a catch-22 situation of not having
simultaneous access to both the source and the destination. The resolution in
this case is to split the migration from source to an interim mysql server with
one service that uses the default address space and then using another service
to use the interim as the source and preferably with the interim in the same
address space as the subnet that the second services uses. The other option is
to keep it public for the duration of migration and then take it private. Or the DMS service could be instantiated in the same virtual network as the destination private MySQL Flexible Server albeit in a separate subnet with a NAT gateway to connect to the source server.
No comments:
Post a Comment