Konfigurace replikace dat Azure Database for MySQL

PLATÍ PRO: Jednoúčelový server Azure Database for MySQL

Důležité

Jednoúčelový server Azure Database for MySQL je na cestě vyřazení. Důrazně doporučujeme upgradovat na flexibilní server Azure Database for MySQL. Další informace o migraci na flexibilní server Azure Database for MySQL najdete v tématu Co se děje s jednoúčelovým serverem Azure Database for MySQL?

Tento článek popisuje, jak nastavit replikaci dat ve službě Azure Database for MySQL konfigurací zdrojových serverů a serverů replik. Tento článek předpokládá, že máte zkušenosti se servery a databázemi MySQL.

Poznámka:

Tento článek obsahuje odkazy na termín slave (podřízený) , což je termín, který už Microsoft nepoužívá. Když se termín odebere ze softwaru, odebereme ho z tohoto článku.

Pokud chcete vytvořit repliku ve službě Azure Database for MySQL, synchronizuje replikace dat ze zdrojového místního serveru MySQL, ve virtuálních počítačích nebo v cloudových databázových službách. Replikace příchozích dat je založená na umístění souboru binárního protokolu (binlog) nebo replikaci založené na GTID nativní pro MySQL. Další informace o replikaci binlogu najdete v přehledu replikace binlogu MySQL.

Před provedením kroků v tomto článku si projděte omezení a požadavky replikace příchozích dat.

Vytvoření instance jednoúčelového serveru Azure Database for MySQL pro použití jako repliky

  1. Vytvořte novou instanci jednoúčelového serveru Azure Database for MySQL (například replica.mysql.database.azure.com). Informace o vytvoření serveru Azure Database for MySQL najdete na webu Azure Portal . Tento server je server repliky pro replikaci dat.

    Důležité

    Server Azure Database for MySQL musí být vytvořen v cenových úrovních Pro obecné účely nebo Optimalizováno pro paměť, protože replikace dat je podporována pouze v těchto úrovních. GTID se podporuje ve verzích 5.7 a 8.0 a pouze na serverech, které podporují úložiště až 16 TB (úložiště pro obecné účely v2).

  2. Vytvořte stejné uživatelské účty a odpovídající oprávnění.

    Uživatelské účty se nereplikují ze zdrojového serveru na server repliky. Pokud máte v plánu poskytnout uživatelům přístup k serveru repliky, musíte na tomto nově vytvořeném serveru Azure Database for MySQL vytvořit všechny účty a odpovídající oprávnění ručně.

  3. Přidejte IP adresu zdrojového serveru do pravidel brány firewall repliky.

    Pomocí webu Azure Portal nebo Azure CLI aktualizujte pravidla brány firewall.

  4. Volitelné – Pokud chcete použít replikaci založenou na GTID ze zdrojového serveru na server repliky Azure Database for MySQL, budete muset na serveru Azure Database for MySQL povolit následující parametry serveru:

    • enforce_gtid_consistency
    • gtid_mode

Konfigurace zdrojového serveru MySQL

Následující kroky připraví a nakonfigurují server MySQL hostovaný místně, na virtuálním počítači nebo v databázové službě hostované jinými poskytovateli cloudu pro replikaci dat. Tento server je "zdrojem" pro replikaci příchozích dat.

  1. Než budete pokračovat, zkontrolujte požadavky na zdrojový server.

  2. Ujistěte se, že zdrojový server umožňuje příchozí i odchozí provoz na portu 3306 a že má veřejnou IP adresu, DNS je veřejně přístupný nebo že má plně kvalifikovaný název domény (FQDN).

    Otestujte připojení ke zdrojovému serveru tak, že se pokusíte připojit z nástroje, jako je příkazový řádek MySQL hostovaný na jiném počítači nebo z Azure Cloud Shellu dostupného na webu Azure Portal.

    Pokud má vaše organizace přísné zásady zabezpečení a neumožňuje všem IP adresám na zdrojovém serveru povolit komunikaci z Azure se zdrojovým serverem, můžete pomocí následujícího příkazu určit IP adresu vašeho serveru MySQL.

    1. Přihlaste se k serveru Azure Database for MySQL pomocí nástroje, jako je například příkazový řádek MySQL.

    2. Spusťte následující dotaz.

      mysql> SELECT @@global.redirect_server_host;
      

      Níže je uveden ukázkový výstup:

      +-----------------------------------------------------------+
      | @@global.redirect_server_host                             |
      +-----------------------------------------------------------+
      | e299ae56f000.tr1830.westus1-a.worker.database.windows.net |
       +-----------------------------------------------------------+
      
    3. Ukončete příkazový řádek MySQL.

    4. Pokud chcete získat IP adresu, spusťte v nástroji ping následující příkaz:

      ping <output of step 2b>
      

      Příklad:

      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. Nakonfigurujte pravidla brány firewall zdrojového serveru tak, aby zahrnovala výstupní IP adresu předchozího kroku na portu 3306.

      Poznámka:

      Tato IP adresa se může změnit kvůli operacím údržby nebo nasazení. Tato metoda připojení je určená jenom pro zákazníky, kteří si nemohou dovolit povolit všechny IP adresy na portu 3306.

  3. Zapněte binární protokolování.

    Spuštěním následujícího příkazu zkontrolujte, jestli je ve zdroji povolené binární protokolování:

    SHOW VARIABLES LIKE 'log_bin';
    

    Pokud se proměnná log_bin vrátí s hodnotou ON, je na vašem serveru povolené binární protokolování.

    Pokud log_bin se vrátí hodnota OFF a váš zdrojový server běží místně nebo na virtuálních počítačích, kde máte přístup ke konfiguračnímu souboru (my.cnf), můžete postupovat podle následujících kroků:

    1. Na zdrojovém serveru vyhledejte konfigurační soubor MySQL (my.cnf). Příklad: /etc/my.cnf

    2. Otevřete konfigurační soubor, který chcete upravit, a vyhledejte v souboru oddíl mysqld .

    3. V části mysqld přidejte následující řádek:

      log-bin=mysql-bin.log
      
    4. Restartujte zdrojový server MySQL, aby se změny projevily.

    5. Po restartování serveru ověřte, že je binární protokolování povolené spuštěním stejného dotazu jako předtím:

      SHOW VARIABLES LIKE 'log_bin';
      
  4. Nakonfigurujte nastavení zdrojového serveru.

    Replikace příchozích dat vyžaduje, aby byl parametr lower_case_table_names konzistentní mezi zdrojovými servery a servery repliky. Tento parametr je ve výchozím nastavení ve službě Azure Database for MySQL 1.

    SET GLOBAL lower_case_table_names = 1;
    

    Volitelné – Pokud chcete použít replikaci založenou na GTID, budete muset zkontrolovat, jestli je na zdrojovém serveru povolené GTID. Na zdrojovém serveru MySQL můžete spustit následující příkaz, abyste zjistili, jestli je gtid_mode ZAPNUTO.

    show variables like 'gtid_mode';
    

    Důležité

    Všechny servery mají gtid_mode nastaveny na výchozí hodnotu VYPNUTO. Pro nastavení replikace dat nemusíte na zdrojovém serveru MySQL povolit GTID. Pokud je na zdrojovém serveru povolené GTID, můžete volitelně použít replikaci založenou na GTID k nastavení replikace příchozích dat pomocí jednoúčelového serveru Azure Database for MySQL. Replikaci založenou na souborech můžete použít k nastavení replikace příchozích dat pro všechny servery bez ohledu na konfiguraci gitd_mode na zdrojovém serveru.

  5. Vytvořte novou roli replikace a nastavte oprávnění.

    Na zdrojovém serveru, který je nakonfigurovaný s oprávněními replikace, vytvořte uživatelský účet. Můžete to provést pomocí příkazů SQL nebo nástroje, jako je MySQL Workbench. Zvažte, jestli plánujete replikaci pomocí PROTOKOLU SSL, protože při vytváření uživatele bude potřeba zadat tuto možnost. Informace o přidávání uživatelských účtů na zdrojovém serveru najdete v dokumentaci k MySQL.

    V následujících příkazech má nová vytvořená role replikace přístup ke zdroji z libovolného počítače, nejen k počítači, který je hostitelem samotného zdroje. To se provádí zadáním "syncuser@"%" v příkazu create user. Další informace o zadávání názvů účtů najdete v dokumentaci k MySQL.

    Příkaz SQL

    Replikace s využitím SSL

    Pokud chcete vyžadovat protokol SSL pro všechna uživatelská připojení, vytvořte uživatele pomocí následujícího příkazu:

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

    Replikace bez SSL

    Pokud pro všechna připojení není vyžadován protokol SSL, vytvořte uživatele pomocí následujícího příkazu:

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

    MySQL Workbench

    Pokud chcete vytvořit roli replikace v aplikaci MySQL Workbench, otevřete na panelu Správa panel Uživatelé a oprávnění a pak vyberte Přidat účet.

    Do pole Přihlašovací jméno zadejte uživatelské jméno.

    Vyberte panel Role pro správu a pak v seznamu globálních oprávnění vyberte Replikační slave. Pak vyberte Použít a vytvořte roli replikace.

  6. Nastavte zdrojový server na režim jen pro čtení.

    Než začnete s výpisem databáze, musí být server umístěn v režimu jen pro čtení. V režimu jen pro čtení nebude zdroj moct zpracovat žádné transakce zápisu. V případě potřeby vyhodnoťte dopad na vaši firmu a naplánujte okno jen pro čtení v době mimo špičku.

    FLUSH TABLES WITH READ LOCK;
    SET GLOBAL read_only = ON;
    
  7. Získejte název a posun souboru binárního protokolu.

    Spuštěním show master status příkazu určete aktuální název souboru binárního protokolu a posun.

     show master status;
    

    Výsledky by se měly podobat následujícímu. Nezapomeňte si poznamenat název binárního souboru pro použití v pozdějších krocích.

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

Výpis a obnovení zdrojového serveru

  1. Určete, které databáze a tabulky chcete replikovat do služby Azure Database for MySQL, a proveďte výpis ze zdrojového serveru.

    K výpisu databází z primárního serveru můžete použít mysqldump. Podrobnosti najdete v tématu Výpis a obnovení. Není nutné vysunout knihovnu MySQL a testovací knihovnu.

  2. Volitelné – Pokud chcete použít replikaci založenou na gtid, budete muset identifikovat GTID poslední transakce spuštěné na primárním serveru. Pomocí následujícího příkazu si můžete všimnout GTID poslední transakce spuštěné na hlavním serveru.

    show global variables like 'gtid_executed';
    
  3. Nastavte zdrojový server na režim čtení a zápisu.

    Po výpisu databáze změňte zdrojový server MySQL zpět na režim čtení a zápisu.

    SET GLOBAL read_only = OFF;
    UNLOCK TABLES;
    
  4. Obnovte soubor s výpisem paměti na nový server.

    Obnovte soubor výpisu paměti na server vytvořený ve službě Azure Database for MySQL. Informace o obnovení souboru s výpisem paměti na server MySQL najdete v tématu Výpis a obnovení . Pokud je soubor s výpisem paměti velký, nahrajte ho do virtuálního počítače v Azure ve stejné oblasti jako server repliky. Obnovte ho na server Azure Database for MySQL z virtuálního počítače.

  5. Volitelné – Poznamenejte si GTID obnoveného serveru ve službě Azure Database for MySQL a ujistěte se, že je stejný jako primární server. Pomocí následujícího příkazu si můžete všimnout GTID vyprázdněné hodnoty GTID na serveru repliky Azure Database for MySQL. Hodnota gtid_purged by měla být stejná jako gtid_executed u hlavního serveru, který jste si poznamenali v kroku 2, aby replikace založená na GTID fungovala.

    show global variables like 'gtid_purged';
    
  1. Nastavte zdrojový server.

    Všechny funkce replikace příchozích dat se provádějí uloženými procedurami. Všechny postupy najdete v uložených procedurách replikace příchozích dat. Uložené procedury je možné spustit v prostředí MySQL nebo MySQL Workbench.

    Pokud chcete propojit dva servery a spustit replikaci, přihlaste se k cílovému serveru repliky ve službě Azure Database for MySQL a nastavte externí instanci jako zdrojový server. K tomu slouží uložená mysql.az_replication_change_master procedura na serveru Azure Database for MySQL.

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

    Volitelné – Pokud chcete použít replikaci založenou na gtid, budete muset k propojení dvou serverů použít následující příkaz.

    call mysql.az_replication_change_master_with_gtid('<master_host>', '<master_user>', '<master_password>', <master_port>, '<master_ssl_ca>');
    
    • master_host: název hostitele zdrojového serveru

    • master_user: uživatelské jméno zdrojového serveru

    • master_password: heslo pro zdrojový server

    • master_port: číslo portu, na kterém zdrojový server naslouchá připojení. (3306 je výchozí port, na kterém MySQL naslouchá)

    • master_log_file: Spuštění názvu binárního souboru protokolu show master status

    • master_log_pos: Pozice binárního protokolu od spuštění show master status

    • master_ssl_ca: Kontext certifikátu certifikační autority. Pokud nepoužíváte SSL, předejte prázdný řetězec.

      Tento parametr se doporučuje předat jako proměnnou. Další informace najdete v následujících příkladech.

    Poznámka:

    Pokud je zdrojový server hostovaný na virtuálním počítači Azure, nastavte možnost "Povolit přístup ke službám Azure" na "ZAPNUTO", aby mezi sebou mohly komunikovat zdrojové servery a servery repliky. Toto nastavení lze změnit z možností zabezpečení připojení. Další informace naleznete v tématu Správa pravidel brány firewall pomocí portálu .

    Příklady

    Replikace s využitím SSL

    Proměnná @cert se vytvoří spuštěním následujících příkazů MySQL:

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

    Replikace s protokolem SSL se nastavuje mezi zdrojovým serverem hostovaným v doméně "companya.com" a serverem repliky hostovaným ve službě Azure Database for MySQL. Tato uložená procedura se spouští na replice.

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

    Replikace bez SSL

    Replikace bez PROTOKOLU SSL je nastavená mezi zdrojovým serverem hostovaným v doméně "companya.com" a serverem repliky hostovaným ve službě Azure Database for MySQL. Tato uložená procedura se spouští na replice.

    CALL mysql.az_replication_change_master('master.companya.com', 'syncuser', 'P@ssword!', 3306, 'mysql-bin.000002', 120, '');
    
  2. Nastavte filtrování.

    Pokud chcete přeskočit replikaci některých tabulek z hlavního serveru, aktualizujte replicate_wild_ignore_table parametr serveru na serveru repliky. Pomocí čárkami odděleného seznamu můžete zadat více než jeden vzor tabulky.

    Další informace o tomto parametru najdete v dokumentaci k MySQL.

    K aktualizaci parametru můžete použít Azure Portal nebo Azure CLI.

  3. Spusťte replikaci.

    Zavolejte uloženou proceduru mysql.az_replication_start , aby se spustila replikace.

    CALL mysql.az_replication_start;
    
  4. Zkontrolujte stav replikace.

    Stav replikace zobrazíte voláním show slave status příkazu na serveru repliky.

    show slave status;
    

    Pokud je stav Slave_IO_Running "ano" a Slave_SQL_Running hodnota Seconds_Behind_Master je 0, replikace funguje dobře. Seconds_Behind_Master označuje, jak pozdě je replika. Pokud hodnota není 0, znamená to, že replika zpracovává aktualizace.

Další užitečné uložené procedury pro operace replikace příchozích dat

Zastavení replikace

Pokud chcete zastavit replikaci mezi zdrojovým serverem a serverem repliky, použijte následující uloženou proceduru:

CALL mysql.az_replication_stop;

Odebrání vztahu replikace

Pokud chcete odebrat vztah mezi zdrojovým serverem a serverem repliky, použijte následující uloženou proceduru:

CALL mysql.az_replication_remove_master;

Chyba přeskočení replikace

Pokud chcete přeskočit chybu replikace a povolit replikaci pokračovat, použijte následující uloženou proceduru:

CALL mysql.az_replication_skip_counter;

Volitelné – Pokud chcete použít replikaci založenou na gtid, přeskočte transakci pomocí následující uložené procedury.

call mysql. az_replication_skip_gtid_transaction(‘<transaction_gtid>’)

Procedura může přeskočit transakci pro dané GTID. Pokud formát GTID není správný nebo transakce GTID již byla provedena, procedura se nezdaří spustit. GTID transakce lze určit parsováním binárního protokolu a zkontrolovat události transakce. MySQL poskytuje nástroj mysqlbinlog k analýze binárních protokolů a zobrazení jejich obsahu v textovém formátu, který lze použít k identifikaci GTID transakce.

Důležité

Tento postup lze použít pouze ke přeskočení jedné transakce a nelze ji použít ke přeskočení sady gtid nebo nastavení gtid_purged.

Pokud chcete přeskočit další transakci po aktuální pozici replikace, pomocí následujícího příkazu identifikujte GTID další transakce, jak je znázorněno níže.

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)

Další kroky

  • Přečtěte si další informace o replikaci příchozích dat pro Službu Azure Database for MySQL.