Azure Database for MySQL - Enkele server migreren naar Azure Database for MySQL - Flexibele server met opensource-hulpprogramma's
U kunt een exemplaar van Azure Database for MySQL - Enkele server migreren naar Azure Database for MySQL - Flexible Server met minimale downtime voor uw toepassingen met behulp van een combinatie van opensource-hulpprogramma's zoals mydumper/myloader en data-in-replicatie.
Notitie
Dit artikel bevat verwijzingen naar de term slave, een term die Microsoft niet meer gebruikt. Zodra de term uit de software wordt verwijderd, verwijderen we deze uit dit artikel.
Replicatie van inkomende gegevens is een techniek waarmee gegevenswijzigingen van de bronserver naar de doelserver worden gerepliceerd op basis van de positiemethode van het binaire logboekbestand. In dit scenario schrijft het MySQL-exemplaar dat werkt als de bron (waarop de databasewijzigingen afkomstig zijn) updates en wijzigingen als 'gebeurtenissen' naar het binaire logboek. De informatie in het binaire logboek wordt opgeslagen in verschillende indelingen voor logboekregistratie, afhankelijk van de wijzigingen in de database die worden vastgelegd. Replica's zijn geconfigureerd voor het lezen van het binaire logboek uit de bron en voor het uitvoeren van de gebeurtenissen in het binaire teken in de lokale database van de replica.
Als u replicatie van inkomende gegevens instelt om gegevens van het ene exemplaar van Azure Database for MySQL naar een andere te synchroniseren, kunt u een selectieve cutover van uw toepassingen uitvoeren vanuit de primaire (of brondatabase) naar de replica (of doeldatabase).
In deze zelfstudie gebruikt u mydumper/myloader en data-in-replicatie om een voorbeelddatabase (classicmodels) te migreren van een exemplaar van Azure Database for MySQL - Enkele server naar een exemplaar van Azure Database for MySQL - Flexible Server en vervolgens gegevens te synchroniseren.
In deze zelfstudie leert u het volgende:
- Netwerkinstellingen configureren voor replicatie van inkomende gegevens voor verschillende scenario's.
- Configureer replicatie van inkomende gegevens tussen de primaire en replica.
- Test de replicatie.
- Cutover om de migratie te voltooien.
Vereisten
U hebt het volgende nodig om deze zelfstudie te voltooien:
Een exemplaar van Azure Database for MySQL Single Server met versie 5.7 of 8.0.
Notitie
Als u Azure Database for MySQL Single Server versie 5.6 uitvoert, voert u een upgrade uit van uw exemplaar naar 5.7 en configureert u vervolgens gegevens in replicatie. Zie De primaire versie-upgrade in Azure Database for MySQL - Enkele server voor meer informatie.
Een exemplaar van Azure Database for MySQL Flexible Server. Zie het artikel Een exemplaar maken in Azure Database for MySQL Flexible Server voor meer informatie.
Notitie
Het configureren van replicatie van gegevens voor zoneredundante servers met hoge beschikbaarheid wordt niet ondersteund. Als u zone-redundante hoge beschikbaarheid voor uw doelserver wilt hebben, voert u de volgende stappen uit:
- De server maken waarvoor zone-redundante hoge beschikbaarheid is ingeschakeld
- Hoge beschikbaarheid uitschakelen
- Volg het artikel voor het instellen van replicatie van inkomende gegevens
- Na de cutover verwijdert u de configuratie van de inkomende replicatie
- Hoge beschikbaarheid inschakelen
Zorg ervoor dat GTID_Mode dezelfde instelling heeft op de bron- en doelservers.
Een database verbinden en maken met MySQL Workbench. Zie het artikel MySQL Workbench gebruiken om verbinding te maken en gegevens op te vragen voor meer informatie.
Om ervoor te zorgen dat u een Virtuele Linux-machine in dezelfde regio (of op hetzelfde VNet, met privétoegang) hebt die als host fungeert voor uw bron- en doeldatabases.
Als u mysql-client of MySQL Workbench (de clienthulpprogramma's) wilt installeren op uw Azure-VM. Zorg ervoor dat u verbinding kunt maken met zowel de primaire server als de replicaserver. Voor de doeleinden van dit artikel wordt mysql-client geïnstalleerd.
Mydumper/myloader installeren op uw Azure-VM. Zie het artikel mydumper/myloader voor meer informatie.
Als u het voorbeelddatabasescript wilt downloaden en uitvoeren voor de classicmodeldatabase op de bronserver.
Configureer binlog_expire_logs_seconds op de bronserver om ervoor te zorgen dat binlogs niet worden opgeschoond voordat de replica de wijzigingen doorvoert. Na een geslaagde cut kunt u de waarde opnieuw instellen.
Netwerkvereisten configureren
Als u de replicatie van gegevens wilt configureren, moet u ervoor zorgen dat het doel via poort 3306 verbinding kan maken met de bron. Voer de juiste volgende stappen uit op basis van het type eindpunt dat is ingesteld op de bron.
- Als een openbaar eindpunt is ingeschakeld op de bron, moet u ervoor zorgen dat het doel verbinding kan maken met de bron door toegang tot Azure-services in te schakelen in de firewallregel. Zie Firewallregels - Azure Database for MySQL voor meer informatie.
- Als een privé-eindpunt en openbare toegang weigeren is ingeschakeld op de bron, installeert u de privékoppeling in hetzelfde VNet dat als host fungeert voor het doel. Zie Private Link - Azure Database for MySQL voor meer informatie.
Replicatie van inkomende gegevens configureren
Voer de volgende stappen uit om gegevens in replicatie te configureren:
Meld u aan bij de Azure-VM waarop u het hulpprogramma mysql-client hebt geïnstalleerd.
Maak verbinding met de bron en het doel met behulp van het hulpprogramma mysql-client.
Gebruik het hulpprogramma mysql-client om te bepalen of log_bin is ingeschakeld op de bron door de volgende opdracht uit te voeren:
SHOW VARIABLES LIKE 'log_bin';
Notitie
Met Azure Database for MySQL Enkele server met de grote opslag, die ondersteuning biedt voor maximaal 16 TB, is dit standaard ingeschakeld.
Tip
Met Azure Database for MySQL Enkele server, die maximaal 4 TB ondersteunt, is dit niet standaard ingeschakeld. Als u echter een leesreplica voor de bronserver promoveert en vervolgens leesreplica verwijdert, wordt de parameter ingesteld op AAN.
Maak op basis van de SSL-afdwinging voor de bronserver een gebruiker op de bronserver met de replicatiemachtiging door de juiste opdracht uit te voeren.
Als u SSL gebruikt, voert u de volgende opdracht uit:
CREATE USER 'syncuser'@'%' IDENTIFIED BY '<password>'; GRANT REPLICATION SLAVE ON *.* TO ' syncuser'@'%' REQUIRE SSL;
Als u geen SSL gebruikt, voert u de volgende opdracht uit:
CREATE USER 'syncuser'@'%' IDENTIFIED BY '<password>'; GRANT REPLICATION SLAVE ON *.* TO ' syncuser'@'%';
Als u een back-up van de database wilt maken met mydumper, voert u de volgende opdracht uit op de Azure-VM waarop de mydumper\myloader is geïnstalleerd:
mydumper --host=<primary_server>.mysql.database.azure.com --user=<username>@<primary_server> --password=<password> --outputdir=./backup --rows=100000 -G -E -R -z --trx-consistency-only --compress --build-empty-files --threads=16 --compress-protocol --ssl --regex '^(classicmodels\.)' -L mydumper-logs.txt
Tip
De optie --trx-consistency-only is een vereiste voor transactionele consistentie terwijl we een back-up maken.
- Het mydumper-equivalent van mysqldump's --single-transaction.
- Handig als al uw tabellen InnoDB zijn.
- De hoofdthread hoeft alleen de globale vergrendeling te bewaren totdat de 'dump'-threads een transactie kunnen starten.
- Biedt de kortste duur van wereldwijde vergrendeling
De hoofdthread hoeft alleen de globale vergrendeling te bewaren totdat de 'dump'-threads een transactie kunnen starten.
De variabelen in deze opdracht worden hieronder uitgelegd:
PROCEDURE-BEHEREN-FIREWALL-PORTAL --host: naam van de primaire server
- --user: Naam van een gebruiker (in de indeling username@servername omdat op de primaire server Azure Database for MySQL - Enkele server wordt uitgevoerd). U kunt de serverbeheerder of een gebruiker met SELECT- en RELOAD-machtigingen gebruiken.
- --Password: Wachtwoord van de bovenstaande gebruiker
Zie mydumper/myloader voor meer informatie over het gebruik van mydumper
Lees het metagegevensbestand om de naam en verschuiving van het binaire logboekbestand te bepalen door de volgende opdracht uit te voeren:
cat ./backup/metadata
In deze opdracht verwijst ./backup naar de uitvoermap die wordt gebruikt in de opdracht in de vorige stap.
De resultaten moeten worden weergegeven zoals weergegeven in de volgende afbeelding:
Noteer de binaire bestandsnaam voor gebruik in latere stappen.
Herstel de database met behulp van myloader door de volgende opdracht uit te voeren:
myloader --host=<servername>.mysql.database.azure.com --user=<username> --password=<password> --directory=./backup --queries-per-transaction=100 --threads=16 --compress-protocol --ssl --verbose=3 -e 2>myloader-logs.txt
De variabelen in deze opdracht worden hieronder uitgelegd:
- --host: naam van de replicaserver
- --user: Naam van een gebruiker. U kunt serverbeheerder of een gebruiker met lees-/schrijfmachtigingen gebruiken waarmee de schema's en gegevens kunnen worden hersteld naar de database
- --Password: Wachtwoord voor de bovenstaande gebruiker
Afhankelijk van de SSL-afdwinging op de primaire server, maakt u verbinding met de replicaserver met behulp van het hulpprogramma mysql-client en voert u de volgende stappen uit.
Als SSL-afdwinging is ingeschakeld, gaat u als volgt te werk:
i. Download het certificaat dat nodig is om via SSL te communiceren met uw Azure Database for MySQL-server.
ii. Open het bestand in Kladblok en plak de inhoud in de sectie 'PLAATS HIER DE CONTEXT VAN UW OPENBARE SLEUTELCERTIFICAAT'.
SET @cert = '-----BEGIN CERTIFICATE----- PLACE YOUR PUBLIC KEY CERTIFICATE'S CONTEXT HERE -----END CERTIFICATE-----'
iii. Voer de volgende opdracht uit om gegevens in replicatie te configureren:
CALL mysql.az_replication_change_master('<Primary_server>.mysql.database.azure.com', '<username>@<primary_server>', '<password>', 3306, '<File_Name>', <Position>, @cert);
Notitie
Bepaal de positie en bestandsnaam van de informatie die u in stap 6 hebt verkregen.
Als SSL-afdwinging niet is ingeschakeld, voert u de volgende opdracht uit:
CALL mysql.az_replication_change_master('<Primary_server>.mysql.database.azure.com', '<username>@<primary_server>', '<password>', 3306, '<File_Name>', <Position>, '');
Als u de replicatie vanaf de replicaserver wilt starten, roept u de onderstaande opgeslagen procedure aan.
call mysql.az_replication_start;
Voer op de replicaserver de volgende opdracht uit om de replicatiestatus te controleren:
show slave status \G;
Notitie
Als u MySQL Workbench gebruikt, is de \G-modifier niet vereist.
Als de status van Slave_IO_Running en Slave_SQL_Running Ja is en de waarde van Seconds_Behind_Master 0 is, werkt replicatie goed. Seconds_Behind_Master geeft aan hoe laat de replica is. Als de waarde iets anders is dan 0, verwerkt de replica updates.
De replicatie testen (optioneel)
Om te controleren of de replicatie van gegevens correct werkt, kunt u controleren of de wijzigingen in de tabellen in de primaire server zijn gerepliceerd naar de replica.
Identificeer een tabel die moet worden gebruikt voor testen, bijvoorbeeld de tabel Klanten, en controleer vervolgens of het aantal vermeldingen dat deze bevat hetzelfde is op de primaire en replicaservers door de volgende opdracht uit te voeren op elke tabel:
select count(*) from customers;
Noteer het aantal vermeldingen voor latere vergelijking.
Als u de replicatie wilt testen, voegt u enkele gegevens toe aan de klanttabellen op de primaire server en controleert u vervolgens of de nieuwe gegevens worden gerepliceerd. In dit geval voegt u twee rijen toe aan een tabel op de primaire server en bevestigt u dat deze zijn gerepliceerd op de replicaserver.
Voeg in de tabel Klanten op de primaire server rijen in door de volgende opdracht uit te voeren:
insert into `customers`(`customerNumber`,`customerName`,`contactLastName`,`contactFirstName`,`phone`,`addressLine1`,`addressLine2`,`city`,`state`,`postalCode`,`country`,`salesRepEmployeeNumber`,`creditLimit`) values (<ID>,'name1','name2','name3 ','11.22.5555','54, Add',NULL,'Add1',NULL,'44000','country',1370,'21000.00');
Als u de replicatiestatus wilt controleren, roept u de status van de slaaf weergeven \G aan om te bevestigen dat de replicatie werkt zoals verwacht.
Voer op de replicaserver de volgende opdracht uit om te bevestigen dat het aantal hetzelfde is:
select count(*) from customers;
Een geslaagde cutover garanderen
Voer de volgende taken uit om een geslaagde cutover te garanderen:
- Configureer de juiste firewall- en virtuele netwerkregels op serverniveau om verbinding te maken met de doelserver. U kunt de firewallregels voor de bron en het doel vergelijken vanuit de portal.
- Configureer de juiste aanmeldingen en machtigingen op databaseniveau op de doelserver. U kunt SELECT FROM mysql.user uitvoeren op de bron- en doelservers om te vergelijken.
- Zorg ervoor dat alle binnenkomende verbindingen met Azure Database for MySQL Enkele server zijn gestopt.
Tip
U kunt de Azure Database for MySQL Enkele server instellen op alleen-lezen.
- Zorg ervoor dat de replica de primaire replica heeft opgepikt door de status van de slave \G uit te voeren en te bevestigen dat de waarde voor de parameter Seconds_Behind_Master 0 is.
- Clients en clienttoepassingen omleiden naar het doelexemplaren van Azure Database for MySQL Flexible Server.
- Voer de laatste cutover uit door opgeslagen procedure mysql.az_replication_stop uit te voeren, waarmee replicatie vanaf de replicaserver wordt gestopt.
- Roep mysql.az_replication_remove_master aan om de replicatieconfiguratie voor inkomende gegevens te verwijderen.
Op dit moment zijn uw toepassingen verbonden met de nieuwe Flexibele Azure Database for MySQL-server en worden wijzigingen in de bron niet meer gerepliceerd naar het doel. Firewallregels voor Azure Database for MySQL maken via de Azure-portal