sql >> Databáze >  >> RDS >> Mysql

Jak nakonfigurovat replikaci zdroj-replika v MySQL

MySQL je systém pro správu relačních databází, který je jedním z nejoblíbenějších open-source projektů. Přestože je MySQL známé svou stabilitou, je ještě spolehlivější, pokud je nakonfigurována replikace zdroj-replika. Při replikaci je obvykle jeden MySQL server označen jako zdroj . Zdroj odesílá jakékoli změny databáze a aktualizace dat do jedné nebo více replik databázové servery. Postup replikace dat MySQL je flexibilní a replikační servery nemusí být trvale připojeny ke zdroji. Tato příručka vysvětluje, jak nakonfigurovat replikaci dat zdrojové repliky v MySQL.

Jak funguje replikace dat MySQL

Proces replikace nejprve uloží data do zdrojové databáze a poté je zkopíruje do všech replik. Po zpracování instrukce sleduje zdrojový databázový server změnu v binárním protokolu. Protokol slouží jako sekvenční záznam všech změn ve struktuře a obsahu databáze. VYBRAT příkazy se nezaznamenávají, protože nemění obsah databáze.

Aktualizace probíhají asynchronně, takže repliky nemusí být neustále připojeny. To kontrastuje se synchronními architekturami vysoce spolehlivých systémů. Pokud je vyžadována synchronizace v reálném čase, MySQL doporučuje použít NDB Cluster .

Každá replika stahuje data ze zdroje vyžádáním obsahu binárního protokolu zdroje. Replika pak použije příkazy v pořadí a efektivně přehraje události, ke kterým došlo ve zdroji. Každá replika je nezávislá a sleduje svou aktuální pozici se zdrojovým binárním logem. Každá replika se navíc může synchronizovat se zdrojem podle vlastního plánu. Data lze číst z kteréhokoli ze serverů, včetně replik.

MySQL umožňuje vysoký stupeň granularity. Je možné replikovat přes určité databáze nebo dokonce konkrétní tabulky v rámci databáze. Výchozí formát replikace je Replikace založená na příkazu (SBR), ve kterém je replikován celý SQL příkaz. Nicméně Row Based Replication (RBR) je také k dispozici. Tento formát replikuje řádky, které byly změněny. Je také možné konfigurovat složitější konfigurace many-to-many. Další informace o různých možnostech replikace naleznete v dokumentaci MySQL.

Poznámka MySQL dříve označovalo replikaci zdrojové repliky jako „hlavní-podřízenou replikaci“. Organizace MySQL nedávno změnila terminologii a vysvětlila své úvahy v aktualizaci aterminologie. Starší termín „master“ byl změněn na „source“, zatímco „slave“ je nyní označován jako „replika“. Staré termíny se mohou stále objevovat v určitých příkazech a výstupních zobrazeních, zatímco MySQL aktualizuje svou kódovou základnu. Tato příručka používá v pokynech preferované výrazy MySQL.

Výhody replikace dat MySQL

Povolení replikace zdrojové repliky nabízí mnoho významných výhod oproti neredundantnímu systému. Níže uvedený seznam poskytuje přehled některých výhod:

  • Je snadné vytvořit živou záložní kopii kdykoli. Protože proces replikace je asynchronní, replikace může probíhat podle libovolného plánu. Aby repliky fungovaly spolehlivě, nemusí být synchronizovány se zdrojem.

  • Přidání repliky může zvýšit dobu provozuschopnosti a spolehlivost celého systému. Primární řízení se může přepnout na repliku, pokud je vyžadována údržba nebo je zdrojová databáze nedostupná.

  • Každá replika poskytuje další čitelnou instanci databáze. To umožňuje programům pro dolování nebo analýzu dat dotazovat se na repliku bez dalšího zatížení původní zdrojové databáze.

  • Tato architektura zvyšuje škálovatelnost a výkon. Databáze se načte a VYBERE příkazy mohou být mezi servery vyváženy, což snižuje latenci.

  • Třetí strany mohou získat přístup pouze pro čtení k databázi prostřednictvím repliky a již nevyžadují přístup ke zdroji. Replika databáze může být vytvořena na vyžádání, když je požadována, a zničena, když již není potřeba. Tato technika zvyšuje bezpečnost a zajišťuje, že není možné manipulovat s původními daty.

Než začnete

  1. Pokud jste tak ještě neučinili, vytvořte si účet Linode a Compute Instance. Podívejte se na naše příručky Začínáme s Linode a Vytvoření výpočetní instance.

  2. Při aktualizaci systému postupujte podle našeho průvodce nastavením a zabezpečením výpočetní instance. Můžete také chtít nastavit časové pásmo, nakonfigurovat název hostitele, vytvořit omezený uživatelský účet a posílit přístup SSH.

  3. Ke konfiguraci replikace zdrojové repliky MySQL musíte mít alespoň dva samostatné linody. Jeden Linode hostí zdrojovou databázi, zatímco další uzel je nezbytný pro replikační server.

Poznámka Kroky v této příručce jsou napsány pro uživatele bez oprávnění root. Příkazy, které vyžadují zvýšená oprávnění, mají předponu sudo . Pokud neznáte sudo naleznete v příručce Uživatelé a skupiny Linuxu.

Konfigurace replikace zdroje v MySQL

Pro konfiguraci replikace zdrojové repliky musí být MySQL nainstalována na dvou samostatných serverech, které spolu mohou komunikovat. Tyto pokyny jsou zaměřeny na distribuci Ubuntu, ale jsou obecně použitelné pro všechny distribuce Linuxu. Proces se skládá z následujících kroků:

  1. Nainstalujte MySQL.
  2. Nakonfigurujte zdrojovou databázi MySQL.
  3. Nakonfigurujte nového uživatele MySQL pro repliku.
  4. Připravte data MySQL pro replikaci.
  5. Nakonfigurujte databázi replik MySQL.
  6. Importujte replikovaná data MySQL a aktivujte replikaci.

Instalovat MySQL

Pokud MySQL ještě není k dispozici na obou Linodech, nainstalujte ji pomocí následujících kroků:

  1. Upgradujte Linodes.

     sudo apt-get update && sudo apt-get upgrade
    
  2. Nainstalujte server MySQL a klientské aplikace na zdrojový i replikační server.

     sudo apt-get install mysql-server mysql-client -y
    
  3. Nakonfigurujte možnosti zabezpečení, včetně hesla uživatele root, pomocí mysql_secure_installation příkaz.

     sudo mysql_secure_installation
    
  4. Pokud používáte firewall, jako je ufw , ujistěte se, že umožňuje provoz MySQL. Přidejte následující pravidlo k otevření portu 3306 na firewallu.

     ufw allow mysql
    

Konfigurace zdrojové databáze MySQL

Chcete-li povolit replikaci MySQL, upravte některé proměnné v hlavním konfiguračním souboru MySQL. Proveďte následující změny konfigurace zdrojové databáze.

  1. Vyhledejte hlavní konfigurační soubor MySQL na zdrojovém databázovém serveru. Tento soubor se obvykle nachází na adrese /etc/mysql/mysql.conf.d/mysqld.cnf . V dřívějších instalacích však může být umístěn na /etc/my.cnf nebo /etc/mysql/my.cnf . Může být také odkazováno z jednoho ze souborů prostřednictvím includedir směrnice.

  2. Otevřete konfigurační soubor MySQL a změňte bind-address na IP adresu zdrojového serveru.

    Soubor:/ etc/mysql/mysql.conf.d/mysqld.cnf
    1
    2
    
    bind-address  = <source_ip_address>
        
  3. Odkomentujte nebo přidejte řádky pro server-id a log-bin . Nastavte id serveru1 a log-bin na /var/log/mysql/mysql-bin.log .

    Poznámka Zajistěte skip_networking proměnná není nikde deklarována. Zakomentujte jej, pokud se objeví v tomto souboru. Chcete-li replikovat jednu databázi, přidejte řádek binlog_do_db = do souboru.
    Soubor:/ etc/mysql/mysql.conf.d/mysqld.cnf
    1
    2
    3
    
    server-id  = 1
    log_bin  = /var/log/mysql/mysql-bin.log
        
  4. Restartujte službu MySQL.

     sudo systemctl restart mysql
    
  5. Ověřte stav MySQL a ujistěte se, že je aktivní .

     sudo systemctl status mysql
    
    mysql.service - MySQL Community Server
    Loaded: loaded (/lib/systemd/system/mysql.service; enabled; vendor preset: enabled)
    Active: active (running) since Sun 2021-05-30 13:06:47 UTC; 1 day 1h ago

Konfigurace nového uživatele MySQL pro repliku

Na zdrojovém serveru musíte vytvořit nového uživatele, který bude reprezentovat repliku. Noví uživatelé se vytvářejí v prostředí MySQL.

  1. Vstupte do prostředí MySQL.

     sudo mysql -u root -p
    
  2. Přidejte uživatele pro účet repliky pomocí MySQL CREATE USER syntax. Uživatelské jméno se musí skládat z názvu účtu repliky, @ a IP adresa replikačního serveru. Zvolte bezpečnější heslo pro účet namísto REPLICA_PASSWORD .

     CREATE USER 'replica_account_name'@'replica_ip_address‘ IDENTIFIED WITH sha256_password BY 'REPLICA_PASSWORD';
    
    Poznámka Chcete-li, aby se replika mohla připojit z libovolné adresy, zadejte uživatele jako 'replica_account_name'@'%' . % symbol představuje jakoukoli adresu nebo doménu. To poskytuje extra flexibilitu na úkor určitého zabezpečení.
  3. Udělte práva replikace uživateli vzdálené repliky.

     GRANT REPLICATION SLAVE ON *.* TO 'replica_account_name'@'replica_ip_address';
    

Příprava dat MySQL pro replikaci

V tomto okamžiku je nutné vyprázdnit a uzamknout zdrojovou databázi, aby bylo možné připravit data pro replikaci.

  1. Zůstaňte v prostředí MySQL a vyprázdněte oprávnění k opětovnému načtení tabulek grantů bez restartování databáze.

     FLUSH PRIVILEGES;
    
  2. Uzamkněte databázi, aby se databáze zmrazila na stabilním místě, ze kterého lze exportovat data. Nechte klienta MySQL spuštěného, ​​dokud databázi neexportujete. Zadáním libovolného příkazu zápisu nebo opuštěním prostředí MySQL se zámek uvolní.

     FLUSH TABLES WITH READ LOCK;
    
    Pozor Tento příkaz blokuje všechna potvrzení do zdrojové databáze. Exportujte data, než zdroji umožníte zpracovat další potvrzení. V opačném případě by se replikovaná databáze mohla poškodit nebo by mohla být nekonzistentní se zdrojovou databází. Co nejdříve dokončete zbývající dva kroky v této části.
  3. Ověřte stav databáze pomocí následujícího příkazu. Tento příkaz zobrazí aktuální soubor protokolu spolu s pozicí posledního záznamu v tomto souboru. Zaznamenejte si tyto informace, protože je nutné později zahájit replikaci na replice.

     SHOW MASTER STATUS;
    
    +------------------+----------+--------------+------------------+-------------------+
    | File             | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
    +------------------+----------+--------------+------------------+-------------------+
    | mysql-bin.000002 |     1301 |              |                  |                   |
    +------------------+----------+--------------+------------------+-------------------+
    1 row in set (0.00 sec)
  4. Pomocí linuxového shellu z jiné konzole exportujte databázi pomocí mysqldump nářadí. Vyberte zapamatovatelný název pro cílový soubor. Zahrňte –master-data možnost přidat informace o souboru protokolu a pozici aktuálního záznamu do protokolu.

     sudo mysqldump -u root -p -–all-databases -–master-data > databasecopy.sql
    
    Poznámka Chcete-li exportovat jednu databázi, zahrňte --opt spíše než -–all-databases .
  5. Zpět v původním prostředí MySQL odemkněte zdrojovou databázi.

     UNLOCK TABLES;
    
  6. Ukončete prostředí MySQL.

     QUIT;
    
  7. Zkopírujte exportovaný databázový soubor na replikovaný databázový server pomocí ftp , scp , nebo jiný způsob přenosu souboru.

     scp databasecopy.sql [email protected]<replica_ip_address>
    

Konfigurace databáze replik MySQL

Následující konfigurace by měla být použita pro konfiguraci replikované databáze. Chcete-li nainstalovat MySQL na replikovaný server, viz část Instalace MySQL.

  1. Otevřete hlavní soubor MySQL, který se obvykle nachází na adrese /etc/mysql/mysql.conf.d/mysqld.cnf a změňte bind-address aby odpovídala IP adrese replikačního serveru.

    Soubor:/ etc/mysql/mysql.conf.d/mysqld.cnf
    1
    2
    
    bind-address  = xx.xx.xx.xx
        
  2. Odkomentujte nebo přidejte řádky pro server-id a log-bin . ID serveru musí být nastaveno na 2 na replice, zatímco log-bin proměnná musí být nastavena na /var/log/mysql/mysql-bin.log . Přidejte proměnnou pro relay-log a nastavte jej na /var/log/mysql/mysql-relay-bin.log .

    Poznámka Zajistěte skip_networking proměnná není nikde v tomto souboru nastavena. Chcete-li replikovat jednu databázi, přidejte následující direktivu do souboru binlog_do_db =database_name . Chcete-li nakonfigurovat více než jednu repliku, očíslujte id-serveru hodnoty postupně rostoucím způsobem. Například druhá replika by měla id serveru z 3 .
    Soubor:/ etc/mysql/mysql.conf.d/mysqld.cnf
    1
    2
    3
    4
    
    server-id        = 2
    log_bin    = /var/log/mysql/mysql-bin.log
    relay-log        = /var/log/mysql/mysql-relay-bin.log
        
  3. Restartujte službu MySQL, aby se změny začlenily.

     sudo systemctl restart mysql
    
  4. Ověřte stav MySQL a ujistěte se, že je aktivní .

     sudo systemctl status mysql
    
    mysql.service - MySQL Community Server
         Loaded: loaded (/lib/systemd/system/mysql.service; enabled; vendor preset:>
         Active: active (running) since Mon 2021-05-31 16:29:48 UTC; 6s ago
  5. (Volitelné ) MySQL doporučuje používat SSL pro připojení ke zdroji pro větší bezpečnost. Další informace o konfiguraci SSL naleznete v dokumentaci MySQL SSL. Nástroj pro nastavení RSA lze použít k urychlení tohoto procesu.

Importovat replikovaná data MySQL a aktivovat replikaci

Dalším krokem je import kopie databázových dat, nastavení zdroje replikace a restartování replikovaného databázového serveru. Replika by pak měla být synchronizovaná a připravená k použití.

  1. Zadejte následující příkaz z prostředí Linux pro import zdrojové databáze. Zadejte název databáze použité k exportu dat dříve.

     sudo mysql -u root -p < databasecopy.sql
    
  2. Přihlaste se do prostředí MySQL.

     sudo mysql -u root -p
    
  3. Zastavte repliku.

     STOP REPLICA;
    
  4. Zadejte ZMĚNIT ZDROJ REPLICACE příkaz spolu s následujícími podrobnostmi. Nahraďte IP adresu zdrojového databázového serveru místo source_ip_address . Pro SOURCE_USER a SOURCE_PASSWORD , zadejte uživatelské jméno a heslo repliky z v části Konfigurace nového uživatele MySQL pro repliku. Pro SOURCE_LOG_FILE a SOURCE_LOG_POS hodnoty, zadejte informace, které jste zaznamenali z SHOW MASTER STATUS; příkaz.

     CHANGE REPLICATION SOURCE TO SOURCE_HOST='source_ip_address',SOURCE_USER='replica_account_name', SOURCE_PASSWORD='REPLICA_PASSWORD', SOURCE_LOG_FILE='log_file_name', SOURCE_LOG_POS=log_position;
    
    Poznámka Chcete-li pro připojení použít SSL, které doporučuje MySQL, přidejte atribut SOURCE_SSL=1 na příkaz. Další informace o používání SSL v kontextu replikace zdrojové repliky lze nalézt v dokumentaci MySQL.
  5. Restartujte repliku.

     START REPLICA;
    
  6. Ověřte stav repliky. Replika by měla čekat na události a neměla by existovat žádná Last_IO_Error nebo Last_Error Události. Slave_SQL_Running_State položka by měla uvádět, že replika přečetla protokol přenosu.

     SHOW REPLICA STATUS\G
    
    Slave_IO_State: Waiting for master to send event
                      Master_Host: 178.79.153.39
                      Master_User: replica
                      Master_Port: 3306
                    Connect_Retry: 60
                  Master_Log_File: mysql-bin.000006
              Read_Master_Log_Pos: 156
                   Relay_Log_File: mysql-relay-bin.000006
                    Relay_Log_Pos: 371
            Relay_Master_Log_File: mysql-bin.000006
                 Slave_IO_Running: Yes
                Slave_SQL_Running: Yes
    ..
                       Last_Errno: 0
                       Last_Error:
    ..
            Seconds_Behind_Master: 0
    Master_SSL_Verify_Server_Cert: No
                    Last_IO_Errno: 0
                    Last_IO_Error:
                   Last_SQL_Errno: 0
                   Last_SQL_Error:
      Replicate_Ignore_Server_Ids:
                 Master_Server_Id: 1
                      Master_UUID: 5bed9d10-c140-11eb-bc63-f23c92a2a6ac
                 Master_Info_File: mysql.slave_master_info
                        SQL_Delay: 0
              SQL_Remaining_Delay: NULL
          Slave_SQL_Running_State: Slave has read all relay log; waiting for more updates

Test replikace zdroje MySQL a repliky

Pokud byla zdrojová databáze již naplněna před vytvořením instance repliky, je vyžadováno další testování. V tomto případě po importu dat ověřte, že databáze a tabulky, které existují ve zdroji, jsou v replice přítomny. V ZOBRAZIT STAV REPLIKY zobrazení Slave_SQL_Running_State položka by měla znít Slave přečetl celý protokol relé .

Chcete-li ověřit, zda replikace probíhá správně, vytvořte ve zdroji novou databázi nebo tabulku. Po několika sekundách by měla být na replice přítomna nová položka. Ověřte přítomnost databáze pomocí SHOW DATABASES; příkaz. Pro potvrzení přítomnosti tabulky přepněte do databáze pomocí USE databasename; a zadejte ZOBRAZIT TABULKY; . Je také dobré spustit ZOBRAZIT STAV REPLIKA a prozkoumejte výstup, zda neobsahuje nějaké chyby. Last_Error a Last_IO_Error pole by měla být prázdná a replika by měla zůstat připojená.

Další informace o replikaci zdrojové repliky MySQL

Nejlepším zdrojem informací o replikaci zdrojové repliky je oficiální dokumentace MySQL. Část o replikaci obsahuje rozsáhlejší informace o architektuře a procesu instalace. Užitečná mohou být také fóra MySQL.

Další informace

Další informace o tomto tématu můžete získat v následujících zdrojích. Přestože jsou poskytovány v naději, že budou užitečné, vezměte prosím na vědomí, že nemůžeme ručit za přesnost nebo aktuálnost externě hostovaných materiálů.

  • Dokumentace MySQL

  1. Při spouštění aplikace ověřte připojení k databázi pomocí pg-promise

  2. Jak můžeme zobrazit tělo šifrované uložené procedury v SSMS?

  3. Příklady DATEPART() v SQL Server

  4. Postgresql vybírejte, dokud nedosáhnete určitého celkového množství