Migrera Amazon RDS för MySQL till Azure Database for MySQL med hjälp av datareplikering

GÄLLER FÖR: Azure Database for MySQL – Azure Database for MySQL – enskild server – flexibel server

Viktigt!

Azure Database for MySQL – enskild server är på väg att dras tillbaka. Vi rekommenderar starkt att du uppgraderar till en flexibel Azure Database for MySQL-server. Mer information om hur du migrerar till en flexibel Azure Database for MySQL-server finns i Vad händer med Azure Database for MySQL – enskild server?

Kommentar

Den här artikeln innehåller referenser till termen slav, en term som Microsoft inte längre använder. När termen tas bort från programvaran tar vi bort den från den här artikeln.

Du kan använda metoder som MySQL dump and restore, MySQL Workbench Export and Import eller Azure Database Migration Service för att migrera dina MySQL-databaser till en flexibel Azure Database for MySQL-server. Du kan migrera dina arbetsbelastningar med minimal stilleståndstid med hjälp av en kombination av verktyg med öppen källkod, till exempel mysqldump eller mydumper och myloader med Data-in Replication.

Datareplikering är en teknik som replikerar dataändringar från källservern till målservern baserat på positioneringsmetoden för binär loggfil. I det här scenariot skriver MySQL-instansen som fungerar som källa (där databasändringarna kommer) uppdateringar och ändringar som händelser i den binära loggen. Informationen i den binära loggen lagras i olika loggningsformat enligt de databasändringar som registreras. Repliker konfigureras för att läsa den binära loggen från källan och köra händelserna i den binära loggen på replikens lokala databas.

Konfigurera Datareplikering för att synkronisera data från en MySQL-källserver till en MySQL-målserver. Du kan göra en selektiv snabbhet av dina program från den primära (eller källdatabasen) till repliken (eller måldatabasen).

I den här självstudien får du lära dig hur du konfigurerar datareplikering mellan en källserver som kör Amazon Relational Database Service (RDS) för MySQL och en målserver som kör Azure Database for MySQL – flexibel server.

Prestandaöverväganden

Innan du påbörjar den här självstudien bör du överväga prestandakonsekvenserna av platsen och kapaciteten för den klientdator som du ska använda för att utföra åtgärden.

Klientplats

Utför dump- eller återställningsåtgärder från en klientdator som startas på samma plats som databasservern:

  • För flexibla Azure Database for MySQL-serverinstanser bör klientdatorn finnas i samma virtuella nätverk och tillgänglighetszon som måldatabasservern.
  • För Amazon RDS-källdatabasinstanser bör klientinstansen finnas i samma Amazon Virtual Private Cloud och tillgänglighetszon som källdatabasservern. I föregående fall kan du flytta dumpfiler mellan klientdatorer med hjälp av filöverföringsprotokoll som FTP eller SFTP eller ladda upp dem till Azure Blob Storage. Komprimera filer innan du överför dem för att minska den totala migreringstiden.

Klientkapacitet

Oavsett var klientdatorn finns krävs tillräcklig databehandling, I/O och nätverkskapacitet för att utföra de begärda åtgärderna. De allmänna rekommendationerna är:

  • Om dumpen eller återställningen omfattar realtidsbearbetning av data, till exempel komprimering eller dekomprimering, väljer du en instansklass med minst en CPU-kärna per dump eller återställningstråd.
  • Se till att det finns tillräckligt med nätverksbandbredd för klientinstansen. Använd instanstyper som stöder funktionen för accelererat nätverk. Mer information finns i avsnittet "Accelererat nätverk" i Azure Virtual Machine Networking Guide.
  • Kontrollera att klientdatorns lagringslager ger den förväntade läs-/skrivkapaciteten. Vi rekommenderar att du använder en virtuell Azure-dator med Premium SSD-lagring.

Förutsättningar

För att slutföra den här kursen behöver du:

  • Installera mysqlclient på klientdatorn för att skapa en dump och utför en återställningsåtgärd på målinstansen för Azure Database for MySQL – flexibel server.

  • För större databaser installerar du mydumper och myloader för parallell dumpning och återställning av databaser.

    Kommentar

    Mydumper kan bara köras på Linux-distributioner. Mer information finns i Installera mydumper.

  • Skapa en instans av en flexibel Azure Database for MySQL-server som kör version 5.7 eller 8.0.

    Viktigt!

    Om målet är Azure Database for MySQL – flexibel server med zonredundant hög tillgänglighet (HA) bör du tänka på att datareplikering inte stöds för den här konfigurationen. Som en tillfällig lösning konfigurerar du zonredundant HA under serverskapandet:

    1. Skapa servern med zonredundant HA aktiverat.
    2. Inaktivera HA.
    3. Följ artikeln för att konfigurera datareplikering.
    4. Ta bort konfigurationen för datareplikering efter snabb användning.
    5. Aktivera HA.

Se till att flera parametrar och funktioner har konfigurerats och konfigurerats korrekt enligt beskrivningen:

  • Av kompatibilitetsskäl har du käll- och måldatabasservrarna på samma MySQL-version.
  • Ha en primärnyckel i varje tabell. Brist på primära nycklar i tabeller kan göra replikeringsprocessen långsammare.
  • Kontrollera att teckenuppsättningen för källan och måldatabasen är desamma.
  • Ange parametern wait_timeout till en rimlig tid. Tiden beror på hur mycket data eller arbetsbelastning du vill importera eller migrera.
  • Kontrollera att alla tabeller använder InnoDB. Azure Database for MySQL – flexibel server stöder endast InnoDB-lagringsmotorn.
  • För tabeller med många sekundära index eller stora tabeller visas prestandabelastningseffekter under återställningen. Ändra dumpfilerna så att uttrycken CREATE TABLE inte innehåller sekundära nyckeldefinitioner. När du har importerat data skapar du sekundära index igen för att undvika prestandastraffet under återställningsprocessen.

Slutligen, för att förbereda för datareplikering:

  • Kontrollera att azure database for MySQL-målinstansen för flexibel server kan ansluta till Amazon RDS för MySQL-källservern via port 3306.
  • Se till att Amazon RDS for MySQL-källan tillåter både inkommande och utgående trafik på port 3306.
  • Se till att du tillhandahåller plats-till-plats-anslutning till källservern med hjälp av antingen Azure ExpressRoute eller Azure VPN Gateway. Mer information om hur du skapar ett virtuellt nätverk finns i dokumentationen för Azure Virtual Network. Se även snabbstartsartiklarna med stegvis information.
  • Konfigurera källdatabasserverns nätverkssäkerhetsgrupper så att mål-IP-adressen för Azure Database for MySQL för den flexibla servern tillåts.

Viktigt!

Om källan Amazon RDS för MySQL-instansen har GTID_mode inställd på PÅ måste målinstansen för Azure Database for MySQL – flexibel server också ha GTID_mode inställt på PÅ.

Konfigurera målinstansen av Azure Database for MySQL

Så här konfigurerar du målinstansen för Azure Database for MySQL – flexibel server, som är målet för datareplikering:

  1. max_allowed_packet Ange parametervärdet till maximalt 1073741824, vilket är 1 GB. Det här värdet förhindrar eventuella spillproblem som rör långa rader.

  2. Ange parametrarna slow_query_log, general_log, audit_log_enabledoch query_store_capture_mode till AV under migreringen för att eliminera eventuella omkostnader som rör frågeloggning.

  3. Skala upp beräkningsstorleken för azure database for MySQL-instansen för flexibel server till högst 64 virtuella kärnor. Den här storleken ger fler beräkningsresurser när källserverns databasdump återställs.

    Du kan alltid skala tillbaka beräkningen för att uppfylla dina programkrav när migreringen är klar.

  4. Skala upp lagringsstorleken för att få mer IOPS under migreringen eller öka den maximala IOPS för migreringen.

    Kommentar

    Tillgänglig maximal IOPS bestäms av beräkningsstorlek. Mer information finns i avsnittet IOPS i Beräknings- och lagringsalternativ i Azure Database for MySQL – flexibel server.

Konfigurera Amazon RDS-källan för MySQL-servern

Så här förbereder och konfigurerar du MySQL-servern i Amazon RDS, som är källan för datareplikering:

  1. Bekräfta att binär loggning är aktiverat på Amazon RDS för MySQL-källservern. Kontrollera att automatiserade säkerhetskopieringar är aktiverade eller se till att det finns en läsreplik för Amazon RDS för MySQL-källservern.

  2. Se till att de binära loggfilerna på källservern behålls tills ändringarna har tillämpats på målinstansen av Azure Database for MySQL – flexibel server.

    Med datareplikering hanterar inte Azure Database for MySQL flexibel server replikeringsprocessen.

  3. Om du vill kontrollera kvarhållningen av binärloggar på Amazon RDS-källservern för att fastställa antalet timmar som de binära loggarna behålls anropar du den mysql.rds_show_configuration lagrade proceduren:

    mysql> call mysql.rds_show_configuration;
    +------------------------+-------+-----------------------------------------------------------------------------------------------------------+
    | name | value | description |
    +------------------------+-------+-----------------------------------------------------------------------------------------------------------+
    | binlog retention hours | 24 | binlog retention hours specifies the duration in hours before binary logs are automatically deleted. |
    | source delay | 0 | source delay specifies replication delay in seconds between current instance and its master. |
    | target delay | 0 | target delay specifies replication delay in seconds between current instance and its future read-replica. |
    +------------------------+-------            +-----------------------------------------------------------------------------------------------------------+
    3 rows in set (0.00 sec)
    
  4. Om du vill konfigurera kvarhållningsperioden för binär logg kör du den rds_set_configuration lagrade proceduren för att säkerställa att de binära loggarna behålls på källservern under önskad tid. Till exempel:

    Mysql> Call mysql.rds_set_configuration(‘binlog retention hours', 96);
    

    Om du skapar en dump och återställer hjälper föregående kommando dig att snabbt komma ikapp deltaändringarna.

    Kommentar

    Se till att det finns gott om diskutrymme för att lagra de binära loggarna på källservern baserat på den definierade kvarhållningsperioden.

Det finns två sätt att samla in en dump med data från Amazon RDS för MySQL-källservern. En metod innebär att samla in en dump med data direkt från källservern. Den andra metoden handlar om att samla in en dump från en Amazon RDS för MySQL-läsreplik.

  • Så här samlar du in en dump med data direkt från källservern:

    1. Se till att du stoppar skrivningar från programmet i några minuter för att få en transaktionsmässigt konsekvent datadumpning.

      Du kan också tillfälligt ange parametern read_only till värdet 1 så att skrivningar inte bearbetas när du samlar in en datadumpning.

    2. När du har stoppat skrivningar på källservern samlar du in namnet på den binära loggfilen och förskjuter genom att köra kommandot Mysql> Show master status;.

    3. Spara dessa värden för att starta replikeringen från din flexibla Azure Database for MySQL-serverinstans.

    4. Om du vill skapa en dump av data kör mysqldump du genom att köra följande kommando:

      $ mysqldump -h hostname -u username -p –single-transaction –databases dbnames –order-by-primary> dumpname.sql
      
  • Om det inte är ett alternativ att stoppa skrivningar på källservern eller om prestandan för dumpningsdata inte är acceptabel på källservern kan du samla in en dump på en replikserver:

    1. Skapa en Amazon MySQL-läsreplik med samma konfiguration som källservern. Skapa sedan dumpen där.

    2. Låt Amazon RDS for MySQL-läsrepliken komma ikapp Amazon RDS för MySQL-källservern.

    3. När replikfördröjningen når 0 på läsrepliken stoppar du replikeringen genom att anropa den lagrade proceduren mysql.rds_stop_replication.

      Mysql> call mysql.rds_stop_replication;
      
    4. När replikeringen har stoppats ansluter du till repliken. Kör SHOW SLAVE STATUS sedan kommandot för att hämta det aktuella binära loggfilnamnet från fältet Relay_Master_Log_File och loggfilens position från fältet Exec_Master_Log_Pos .

    5. Spara dessa värden för att starta replikeringen från din flexibla Azure Database for MySQL-serverinstans.

    6. Om du vill skapa en dump av data från Amazon RDS for MySQL-läsrepliken kör mysqldump du genom att köra följande kommando:

      $ mysqldump -h hostname -u username -p –single-transaction –databases dbnames –order-by-primary> dumpname.sql
      

    Kommentar

    Du kan också använda mydumper för att samla in en parallelliserad dump av dina data från din Amazon RDS-källdatabas för MySQL. Mer information finns i Migrera stora databaser till en flexibel Azure Database for MySQL-server med mydumper/myloader.

  1. Kör följande kommando för att återställa databasen med hjälp av den inbyggda mysql-återställningen:

    $ mysql -h <target_server> -u <targetuser> -p < dumpname.sql
    
  2. Logga in på Amazon RDS för MySQL-källservern och konfigurera en replikeringsanvändare. Bevilja sedan den här användaren de behörigheter som krävs.

    • Om du använder SSL kör du följande kommandon:

      Mysql> CREATE USER 'syncuser'@'%' IDENTIFIED BY 'userpassword';
      Mysql> GRANT REPLICATION SLAVE, REPLICATION CLIENT on *.* to 'syncuser'@'%' REQUIRE SSL;
      Mysql> SHOW GRANTS FOR syncuser@'%';
      
    • Om du inte använder SSL kör du följande kommandon:

      Mysql> CREATE USER 'syncuser'@'%' IDENTIFIED BY 'userpassword';
      Mysql> GRANT REPLICATION SLAVE, REPLICATION CLIENT on *.* to 'syncuser'@'%';
      Mysql> SHOW GRANTS FOR syncuser@'%';
      

    Lagrade procedurer utför alla datareplikeringsfunktioner. Information om alla procedurer finns i Lagrade procedurer för datareplikering. Du kan köra dessa lagrade procedurer i MySQL-gränssnittet eller MySQL Workbench.

  3. Om du vill länka Amazon RDS for MySQL-källservern och Azure Database for MySQL–målservern för flexibel server loggar du in på azure database for MySQL-målserverinstansen för målservern. Ange Amazon RDS för MySQL-servern som källserver genom att köra följande kommando:

    CALL mysql.az_replication_change_master('source_server','replication_user_name','replication_user_password',3306,'<master_bin_log_file>',master_bin_log_position,'<master_ssl_ca>');
    
  4. Kör följande kommando för att starta replikeringen mellan Amazon RDS för MySQL-källservern och azure database for MySQL-målinstansen för flexibel server:

    Mysql> CALL mysql.az_replication_start;
    
  5. Kör följande kommando för att kontrollera replikeringens status på replikservern:

    Mysql> show slave status\G
    

    Om tillståndet för parametrarna Slave_IO_Running och Slave_SQL_Running är Ja har replikeringen startats och är i ett körningstillstånd.

  6. Kontrollera värdet för parametern Seconds_Behind_Master för att avgöra hur fördröjd målservern är.

    Om värdet är 0 har målet bearbetat alla uppdateringar från källservern. Om värdet är något annat än 0 bearbetar målservern fortfarande uppdateringar.

Se till att snabbväxlingen lyckas

Så här ser du till att snabben lyckas:

  1. Konfigurera lämpliga inloggningar och behörigheter på databasnivå i azure Database for MySQL-instansen för flexibel server.
  2. Stoppa skrivningar till Amazon RDS för MySQL-källservern.
  3. Kontrollera att azure database for MySQL-målinstansen för flexibel server har kommit ikapp källservern och att Seconds_Behind_Master värdet är 0 från show slave status.
  4. Anropa den lagrade proceduren mysql.az_replication_stop för att stoppa replikeringen eftersom alla ändringar har replikerats till azure database for MySQL-målinstansen för flexibel server.
  5. Anropa mysql.az_replication_remove_master för att ta bort konfigurationen för datareplikering.
  6. Omdirigera klienter och klientprogram till azure Database for MySQL-målinstansen för flexibel server.

Nu är migreringen klar. Dina program är anslutna till servern som kör en flexibel Azure Database for MySQL-server.

Nästa steg