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
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).
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ě.
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.
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.
Než budete pokračovat, zkontrolujte požadavky na zdrojový server.
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.
Přihlaste se k serveru Azure Database for MySQL pomocí nástroje, jako je například příkazový řádek MySQL.
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 | +-----------------------------------------------------------+
Ukončete příkazový řádek MySQL.
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.
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.
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ů:Na zdrojovém serveru vyhledejte konfigurační soubor MySQL (my.cnf). Příklad: /etc/my.cnf
Otevřete konfigurační soubor, který chcete upravit, a vyhledejte v souboru oddíl mysqld .
V části mysqld přidejte následující řádek:
log-bin=mysql-bin.log
Restartujte zdrojový server MySQL, aby se změny projevily.
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';
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.
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.
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;
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
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.
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';
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;
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.
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';
Propojení zdrojových serverů a serverů repliky za účelem spuštění replikace příchozích dat
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, '');
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.
Spusťte replikaci.
Zavolejte uloženou proceduru
mysql.az_replication_start
, aby se spustila replikace.CALL mysql.az_replication_start;
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" aSlave_SQL_Running
hodnotaSeconds_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.