Delen via


Azure Database for MySQL-gegevensreplicatie configureren

VAN TOEPASSING OP: Azure Database for MySQL - enkele server

Belangrijk

Azure Database for MySQL enkele server bevindt zich op het buitengebruikstellingspad. We raden u ten zeerste aan een upgrade uit te voeren naar een flexibele Azure Database for MySQL-server. Zie Wat gebeurt er met Azure Database for MySQL Enkele server voor meer informatie over migreren naar Azure Database for MySQL Flexibele server ?

In dit artikel wordt beschreven hoe u replicatie van gegevens in Azure Database for MySQL instelt door de bron- en replicaservers te configureren. In dit artikel wordt ervan uitgegaan dat u enige ervaring hebt met MySQL-servers en -databases.

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.

Als u een replica wilt maken in de Azure Database for MySQL-service, synchroniseert Data-in Replication gegevens van een on-premises MySQL-bronserver, in virtuele machines (VM's) of in clouddatabaseservices. Replicatie van gegevens is gebaseerd op het binaire logboekbestand (binlog) op basis van positie of GTID-replicatie die systeemeigen is voor MySQL. Zie het overzicht van de replicatie van binlog-binlog in MySQL voor meer informatie over binlog-replicatie.

Bekijk de beperkingen en vereisten van replicatie van gegevens voordat u de stappen in dit artikel uitvoert.

Een exemplaar van azure Database for MySQL met één server maken dat moet worden gebruikt als replica

  1. Maak een nieuw exemplaar van azure Database for MySQL enkele server (bijvoorbeeld replica.mysql.database.azure.com). Raadpleeg Een Azure Database for MySQL-server maken met behulp van Azure Portal voor het maken van een server. Deze server is de replicaserver voor replicatie van inkomende gegevens.

    Belangrijk

    De Azure Database for MySQL-server moet worden gemaakt in de prijscategorieën Algemeen gebruik of Geoptimaliseerd voor geheugen, omdat replicatie van gegevens alleen in deze lagen wordt ondersteund. GTID wordt ondersteund op versies 5.7 en 8.0 en alleen op servers die opslag ondersteunen tot 16 TB (opslag voor algemeen gebruik v2).

  2. Maak dezelfde gebruikersaccounts en bijbehorende bevoegdheden.

    Gebruikersaccounts worden niet van de bronserver naar de replicaserver gerepliceerd. Als u van plan bent om gebruikers toegang te geven tot de replicaserver, moet u alle accounts en bijbehorende bevoegdheden handmatig maken op deze zojuist gemaakte Azure Database for MySQL-server.

  3. Voeg het IP-adres van de bronserver toe aan de firewallregels van de replica.

    Firewallregels bijwerken met de Azure-portal of Azure CLI.

  4. Optioneel: als u gtID-gebaseerde replicatie van de bronserver naar de Azure Database for MySQL-replicaserver wilt gebruiken, moet u de volgende serverparameters inschakelen op de Azure Database for MySQL-server:

    • enforce_gtid_consistency
    • gtid_mode

De MySQL-bronserver configureren

De volgende stappen bereiden en configureren de MySQL-server die on-premises wordt gehost, in een virtuele machine of databaseservice die wordt gehost door andere cloudproviders voor replicatie van gegevens. Deze server is de bron voor replicatie van inkomende gegevens.

  1. Controleer de vereisten voor de bronserver voordat u doorgaat.

  2. Zorg ervoor dat de bronserver zowel inkomend als uitgaand verkeer toestaat op poort 3306 en dat deze een openbaar IP-adres heeft, de DNS openbaar toegankelijk is of dat deze een FQDN (Fully Qualified Domain Name) heeft.

    Test de verbinding met de bronserver door verbinding te maken vanuit een hulpprogramma, zoals de MySQL-opdrachtregel die wordt gehost op een andere computer of vanuit de Azure Cloud Shell die beschikbaar is in Azure Portal.

    Als uw organisatie strikt beveiligingsbeleid heeft en niet alle IP-adressen op de bronserver toestaat om communicatie van Azure naar uw bronserver mogelijk te maken, kunt u de onderstaande opdracht gebruiken om het IP-adres van uw MySQL-server te bepalen.

    1. Meld u aan bij uw Azure Database for MySQL-server met behulp van een hulpprogramma zoals de MySQL-opdrachtregel.

    2. Voer de volgende query uit.

      mysql> SELECT @@global.redirect_server_host;
      

      Hieronder ziet u een voorbeeld van uitvoer:

      +-----------------------------------------------------------+
      | @@global.redirect_server_host                             |
      +-----------------------------------------------------------+
      | e299ae56f000.tr1830.westus1-a.worker.database.windows.net |
       +-----------------------------------------------------------+
      
    3. Sluit af vanaf de MySQL-opdrachtregel.

    4. Voer de volgende opdracht uit in het pinghulpprogramma om het IP-adres op te halen:

      ping <output of step 2b>
      

      Voorbeeld:

      C:\Users\testuser> ping e299ae56f000.tr1830.westus1-a.worker.database.windows.net
      Pinging tr1830.westus1-a.worker.database.windows.net (**11.11.111.111**) 56(84) bytes of data.
      
    5. Configureer de firewallregels van uw bronserver om het uitvoer-IP-adres van de vorige stap op poort 3306 op te nemen.

      Notitie

      Dit IP-adres kan worden gewijzigd vanwege onderhouds-/implementatiebewerkingen. Deze connectiviteitsmethode is alleen bedoeld voor klanten die zich niet kunnen veroorloven om alle IP-adressen op 3306-poort toe te staan.

  3. Schakel binaire logboekregistratie in.

    Controleer of binaire logboekregistratie is ingeschakeld voor de bron door de volgende opdracht uit te voeren:

    SHOW VARIABLES LIKE 'log_bin';
    

    Als de variabele log_bin wordt geretourneerd met de waarde 'AAN', wordt binaire logboekregistratie ingeschakeld op uw server.

    Als log_bin de waarde 'UIT' wordt geretourneerd en uw bronserver on-premises of op virtuele machines wordt uitgevoerd waar u toegang hebt tot het configuratiebestand (my.cnf), volgt u de onderstaande stappen:

    1. Zoek uw MySQL-configuratiebestand (my.cnf) op de bronserver. Bijvoorbeeld: /etc/my.cnf

    2. Open het configuratiebestand om het te bewerken en zoek de sectie mysqld in het bestand.

    3. Voeg in de sectie mysqld de volgende regel toe:

      log-bin=mysql-bin.log
      
    4. Start de MySQL-bronserver opnieuw op om de wijzigingen van kracht te laten worden.

    5. Nadat de server opnieuw is opgestart, controleert u of binaire logboekregistratie is ingeschakeld door dezelfde query uit te voeren als voorheen:

      SHOW VARIABLES LIKE 'log_bin';
      
  4. Configureer de bronserverinstellingen.

    Replicatie van gegevens vereist dat de parameter lower_case_table_names consistent is tussen de bron- en replicaservers. Deze parameter is standaard 1 in Azure Database for MySQL.

    SET GLOBAL lower_case_table_names = 1;
    

    Optioneel: als u gtID-gebaseerde replicatie wilt gebruiken, moet u controleren of GTID is ingeschakeld op de bronserver. U kunt de volgende opdracht uitvoeren op de MySQL-bronserver om te zien of gtid_mode is ingeschakeld.

    show variables like 'gtid_mode';
    

    Belangrijk

    Alle servers hebben gtid_mode ingesteld op de standaardwaarde UIT. U hoeft GTID niet in te schakelen op de MySQL-bronserver om data-in-replicatie in te stellen. Als GTID al is ingeschakeld op de bronserver, kunt u eventueel op GTID gebaseerde replicatie gebruiken om replicatie van gegevens ook in te stellen met Azure Database for MySQL enkele server. U kunt bestandsreplicatie gebruiken om replicatie van gegevens in te stellen voor alle servers, ongeacht de gitd_mode configuratie op de bronserver.

  5. Maak een nieuwe replicatierol en stel de machtiging in.

    Maak een gebruikersaccount op de bronserver die is geconfigureerd met replicatiebevoegdheden. Dit kan worden gedaan via SQL-opdrachten of een hulpprogramma zoals MySQL Workbench. Overweeg of u van plan bent om te repliceren met SSL, omdat dit moet worden opgegeven bij het maken van de gebruiker. Raadpleeg de MySQL-documentatie voor meer informatie over het toevoegen van gebruikersaccounts op uw bronserver.

    In de volgende opdrachten heeft de nieuwe replicatierol die is gemaakt toegang tot de bron vanaf elke computer, niet alleen de computer die als host fungeert voor de bron zelf. Dit wordt gedaan door 'syncuser@'%' op te geven in de opdracht gebruiker maken. Zie de MySQL-documentatie voor meer informatie over het opgeven van accountnamen.

    SQL-opdracht

    Replicatie met SSL

    Als u SSL wilt vereisen voor alle gebruikersverbindingen, gebruikt u de volgende opdracht om een gebruiker te maken:

    CREATE USER 'syncuser'@'%' IDENTIFIED BY 'yourpassword';
    GRANT REPLICATION SLAVE ON *.* TO 'syncuser'@'%' REQUIRE SSL;
    

    Replicatie zonder SSL

    Als SSL niet vereist is voor alle verbindingen, gebruikt u de volgende opdracht om een gebruiker te maken:

    CREATE USER 'syncuser'@'%' IDENTIFIED BY 'yourpassword';
    GRANT REPLICATION SLAVE ON *.* TO 'syncuser'@'%';
    

    MySQL Workbench

    Als u de replicatierol in MySQL Workbench wilt maken, opent u het deelvenster Gebruikers en bevoegdheden in het deelvenster Beheer en selecteert u Account toevoegen.

    Typ de gebruikersnaam in het veld Aanmeldingsnaam .

    Selecteer het deelvenster Beheerdersrollen en selecteer Vervolgens Replication Slave in de lijst met globale bevoegdheden. Selecteer Vervolgens Toepassen om de replicatierol te maken.

  6. Stel de bronserver in op de modus Alleen-lezen.

    Voordat u de database gaat dumpen, moet de server in de modus Alleen-lezen worden geplaatst. In de modus Alleen-lezen kan de bron geen schrijftransacties verwerken. Evalueer de impact op uw bedrijf en plan zo nodig het alleen-lezenvenster in een daltijd.

    FLUSH TABLES WITH READ LOCK;
    SET GLOBAL read_only = ON;
    
  7. Haal de naam en verschuiving van het binaire logboekbestand op.

    Voer de show master status opdracht uit om de naam en verschuiving van het huidige binaire logboekbestand te bepalen.

     show master status;
    

    De resultaten moeten er ongeveer als volgt uitzien. Noteer de binaire bestandsnaam voor gebruik in latere stappen.

    +------------------+----------+--------------+------------------+-------------------+
    | File             | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
    +------------------+----------+--------------+------------------+-------------------+
    | mysql-bin.000002 |      120 |              |                  |                   |
    +------------------+----------+--------------+------------------+-------------------+
    

De bronserver dumpen en herstellen

  1. Bepaal welke databases en tabellen u wilt repliceren naar Azure Database for MySQL en voer de dump uit vanaf de bronserver.

    U kunt mysqldump gebruiken om databases van uw primaire server te dumpen. Raadpleeg Dump & Restore voor meer informatie. Het is niet nodig om de MySQL-bibliotheek en testbibliotheek te dumpen.

  2. Optioneel: als u gtid-gebaseerde replicatie wilt gebruiken, moet u de GTID identificeren van de laatste transactie die op de primaire transactie is uitgevoerd. U kunt de volgende opdracht gebruiken om de GTID te noteren van de laatste transactie die op de hoofdserver is uitgevoerd.

    show global variables like 'gtid_executed';
    
  3. Stel de bronserver in op de lees-/schrijfmodus.

    Nadat de database is gedumpt, wijzigt u de MySQL-bronserver weer in de lees-/schrijfmodus.

    SET GLOBAL read_only = OFF;
    UNLOCK TABLES;
    
  4. Dumpbestand herstellen naar een nieuwe server.

    Herstel het dumpbestand naar de server die is gemaakt in de Azure Database for MySQL-service. Raadpleeg Dump & Restore voor het herstellen van een dumpbestand naar een MySQL-server. Als het dumpbestand groot is, uploadt u het naar een virtuele machine in Azure binnen dezelfde regio als uw replicaserver. Herstel deze vanaf de virtuele machine naar de Azure Database for MySQL-server.

  5. Optioneel : noteer de GTID van de herstelde server in Azure Database for MySQL om ervoor te zorgen dat deze hetzelfde is als de primaire server. U kunt de volgende opdracht gebruiken om de GTID van de door GTID opgeschoonde waarde op de Azure Database for MySQL-replicaserver te noteren. De waarde van gtid_purged moet hetzelfde zijn als gtid_executed op de master die in stap 2 is genoteerd, zodat replicatie op basis van GTID werkt.

    show global variables like 'gtid_purged';
    
  1. Stel de bronserver in.

    Alle functies voor replicatie van gegevens worden uitgevoerd door opgeslagen procedures. U vindt alle procedures in Opgeslagen procedures voor inkomende replicatie. De opgeslagen procedures kunnen worden uitgevoerd in de MySQL-shell of MySQL Workbench.

    Als u twee servers wilt koppelen en replicatie wilt starten, meldt u zich aan bij de doelreplicaserver in de Azure Database for MySQL-service en stelt u het externe exemplaar in als de bronserver. Dit wordt gedaan met behulp van de mysql.az_replication_change_master opgeslagen procedure op de Azure Database for MySQL-server.

    CALL mysql.az_replication_change_master('<master_host>', '<master_user>', '<master_password>', <master_port>, '<master_log_file>', <master_log_pos>, '<master_ssl_ca>');
    

    Optioneel: als u op gtid gebaseerde replicatie wilt gebruiken, moet u de volgende opdracht gebruiken om de twee servers te koppelen

    call mysql.az_replication_change_master_with_gtid('<master_host>', '<master_user>', '<master_password>', <master_port>, '<master_ssl_ca>');
    
    • master_host: hostnaam van de bronserver

    • master_user: gebruikersnaam voor de bronserver

    • master_password: wachtwoord voor de bronserver

    • master_port: poortnummer waarop de bronserver luistert naar verbindingen. (3306 is de standaardpoort waarop MySQL luistert)

    • master_log_file: de naam van het binaire logboekbestand wordt niet uitgevoerd show master status

    • master_log_pos: binaire logboekpositie wordt niet uitgevoerd show master status

    • master_ssl_ca: context van CA-certificaat. Als u geen SSL gebruikt, geeft u een lege tekenreeks door.

      Het is raadzaam om deze parameter door te geven als een variabele. Zie de volgende voorbeelden voor meer informatie.

    Notitie

    Als de bronserver wordt gehost op een Virtuele Azure-machine, stelt u 'Toegang tot Azure-services toestaan' in op AAN, zodat de bron- en replicaservers met elkaar kunnen communiceren. Deze instelling kan worden gewijzigd vanuit de beveiligingsopties voor verbindingen. Zie Firewallregels beheren met behulp van de portal voor meer informatie.

    Voorbeelden

    Replicatie met SSL

    De variabele @cert wordt gemaakt door de volgende MySQL-opdrachten uit te voeren:

    SET @cert = '-----BEGIN CERTIFICATE-----
    PLACE YOUR PUBLIC KEY CERTIFICATE'`S CONTEXT HERE
    -----END CERTIFICATE-----'
    

    Replicatie met SSL wordt ingesteld tussen een bronserver die wordt gehost in het domein 'companya.com' en een replicaserver die wordt gehost in Azure Database for MySQL. Deze opgeslagen procedure wordt uitgevoerd op de replica.

    CALL mysql.az_replication_change_master('master.companya.com', 'syncuser', 'P@ssword!', 3306, 'mysql-bin.000002', 120, @cert);
    

    Replicatie zonder SSL

    Replicatie zonder SSL is ingesteld tussen een bronserver die wordt gehost in het domein 'companya.com' en een replicaserver die wordt gehost in Azure Database for MySQL. Deze opgeslagen procedure wordt uitgevoerd op de replica.

    CALL mysql.az_replication_change_master('master.companya.com', 'syncuser', 'P@ssword!', 3306, 'mysql-bin.000002', 120, '');
    
  2. Filter instellen.

    Als u het repliceren van sommige tabellen uit de hoofdserver wilt overslaan, werkt u de replicate_wild_ignore_table serverparameter op de replicaserver bij. U kunt meer dan één tabelpatroon opgeven met behulp van een door komma's gescheiden lijst.

    Raadpleeg de MySQL-documentatie voor meer informatie over deze parameter.

    Als u de parameter wilt bijwerken, kunt u Azure Portal of Azure CLI gebruiken.

  3. Replicatie starten.

    Roep de mysql.az_replication_start opgeslagen procedure aan om de replicatie te starten.

    CALL mysql.az_replication_start;
    
  4. Controleer de replicatiestatus.

    Roep de show slave status opdracht op de replicaserver aan om de replicatiestatus weer te geven.

    show slave status;
    

    Als de status Slave_IO_Running 'ja' is en Slave_SQL_Running de waarde Seconds_Behind_Master '0' is, werkt de replicatie goed. Seconds_Behind_Master geeft aan hoe laat de replica is. Als de waarde niet '0' is, betekent dit dat de replica updates verwerkt.

Andere nuttige opgeslagen procedures voor replicatiebewerkingen in gegevens

Replicatie stoppen

Gebruik de volgende opgeslagen procedure om de replicatie tussen de bron- en replicaserver te stoppen:

CALL mysql.az_replication_stop;

Replicatierelatie verwijderen

Als u de relatie tussen de bron- en replicaserver wilt verwijderen, gebruikt u de volgende opgeslagen procedure:

CALL mysql.az_replication_remove_master;

Replicatiefout overslaan

Als u een replicatiefout wilt overslaan en replicatie wilt toestaan om door te gaan, gebruikt u de volgende opgeslagen procedure:

CALL mysql.az_replication_skip_counter;

Optioneel: als u op gtid gebaseerde replicatie wilt gebruiken, gebruikt u de volgende opgeslagen procedure om een transactie over te slaan

call mysql. az_replication_skip_gtid_transaction(‘<transaction_gtid>’)

De procedure kan de transactie voor de opgegeven GTID overslaan. Als de GTID-indeling niet juist is of als de GTID-transactie al is uitgevoerd, kan de procedure niet worden uitgevoerd. De GTID voor een transactie kan worden bepaald door het binaire logboek te parseren om de transactie-gebeurtenissen te controleren. MySQL biedt een hulpprogramma mysqlbinlog voor het parseren van binaire logboeken en het weergeven van hun inhoud in tekstindeling, die kan worden gebruikt om GTID van de transactie te identificeren.

Belangrijk

Deze procedure kan slechts worden gebruikt om één transactie over te slaan en kan niet worden gebruikt om gtid-set over te slaan of gtid_purged in te stellen.

Als u de volgende transactie na de huidige replicatiepositie wilt overslaan, gebruikt u de volgende opdracht om de GTID van de volgende transactie te identificeren, zoals hieronder wordt weergegeven.

SHOW BINLOG EVENTS [IN 'log_name'] [FROM pos][LIMIT [offset,] row_count]
mysql> show binlog event is 'mysql-bin.000007' from 194 limit 10;
+------------------+-----+-------------+-----------+-------------+-----------------------------------------------------------------+
| Log_name         | Pos | Event_type  | Server_id | End_log_pos | Info                                                            |
+------------------+-----+-------------+-----------+-------------+-----------------------------------------------------------------+
| mysql-bin.000007 | 194 | Gtid        |         2 |         259 | Set @@SESSION.GTID_NEXT= 'aaaaaaaa-0000-1111-2222-bbbbbbbbbbbb' |
| mysql-bin.000007 | 259 | Query       |         2 |         331 | BEGIN                                                           |
| mysql-bin.000007 | 331 | Table_map   |         2 |         383 | table_id: 108 (test.testgtid)                                   |
| mysql-bin.000007 | 383 | Delete_rows |         2 |         463 | table_id: 108 flags: STMT_END_F                                 |
| mysql-bin.000007 | 463 | Xid         |         2 |         949 | COMMIT /* xid=14 */                                             |
+------------------+-----+-------------+-----------+-------------+-----------------------------------------------------------------+
5 rows in set (0.00 sec)

Volgende stappen

  • Meer informatie over replicatie van inkomende gegevens voor Azure Database for MySQL.