Před pár dny jsem napsal návod, jak provést replikaci s MariaDB (nebo MySQL). Toto je jednosměrná replikace:z hlavního na slave; to znamená, že podřízený server přijímá transakce od hlavního serveru. Můj klient ale potřebuje obousměrnou replikaci, protože nevíme, který server transakci obdrží a na obou musí být stejná data. Zde vám ukážu, jak nakonfigurovat replikaci master-master pomocí MariaDB, abyste toho dosáhli.
Moje nastavení
Pro případ, že jste přehlédli předchozí článek, toto jsou funkce virtuálních strojů, na kterých spouštím tuto replikaci.
- OS:Testování Debianu ‚Bookworm‘
- Verze MariaDB:10.5.12
- Master1:192.168.122.13
- Master2:192.168.122.223
Hlavní konfigurace
Oba hlavní servery získají stejnou konfiguraci, upravte /etc/mysql/mariadb.conf.d/50-server.cnf
a nahraďte následující hodnoty:
bind-address =X .ip.address>id-serveru =<X>report_host =masterX log_bin =/var/log/mysql/mysql-bin.logrelay_log =/var/lib/mysql/relay-binrelay_log_index =/var/lib/mysql/relay-bin.indexlog-slave-updatesauto_increment_increment=2auto_increment>Xoffset=/em>
Kde X je 1 pro první master a 2 pro druhého.
Hodnoty autoincrementu znamenají, že v polích typu id bude jeden z masterů získávat vždy sudá čísla a druhý vždy lichá čísla. To má zabránit tomu, aby bylo oběma masterům přiřazeno přesně stejné identifikační číslo současně.

Nyní restartujte službu mariadb a přihlaste se do mysql, abyste vytvořili uživatele (esclavo znamená ve španělštině otrok) s oprávněními pro replikaci:
VYTVOŘTE UŽIVATELE 'esclavo1'@'ip.mysql.master.2' IDENTIFIKOVANÉ PODLE 'SlavePass';UDĚLENÍ REPLIKACE SLAVE NA *.* DO 'esclavo1'@'ip.mysql.master.2';FLUSH PRIVILEGES;Opakujte na obou masterech a odpovídajícím způsobem změňte informace (tj. na master2 vytvořte uživatele [email protected] ). Nejprve ale získejte výpis SQL svého prvního hlavního serveru a načtěte jej do druhého:
master1:mysqldump -u root --all-databases -p --master-data> data.sqlmaster2:mysql -urootNyní získejte nějaké informace o tomto masteru, které potřebujeme k povolení režimu slave na druhém hostiteli.
MariaDB [(none)]> ZOBRAZIT STAV HLAVNÍHO;+------------------+----------+----- ---------+------------------+| Soubor | Pozice | Binlog_Do_DB | Binlog_Ignore_DB |+------------------+----------+--------------+-- -----------------+| mysql-bin.000003 | 358 | | |+------------------+----------+--------------+--- ---------------+1 řádek v sadě (0,000 s)STOP SLAVE;![]()
Konfigurace podřízených jednotek
Nyní je čas nakonfigurovat režim slave na obou hostitelích mariadb/mysql:
CHANGE MASTER TO MASTER_HOST='ip.mysql.master.X', MASTER_USER='esclavoX',MASTER_PASSWORD='SlavePass MASTER_LOG_FILE='mysql-bin.000003', MASTER_LOG_POS =358;SLAVEVaule master_host je ip druhého hlavního serveru, hodnota master_user je uživatel, kterého jste vytvořili na druhém hlavním serveru, a nakonec získáte hodnoty master_log_file a master_log_post z
show master sta
příkaz tus.Kontrola všeho
Abych zjistil, zda jsem byl schopen povolit replikaci master-master s MariaDB, provedl jsem velmi jednoduchý test:
Vytvořil jsem databázi na jednom masteru, pak jednoduchou tabulku (pouze 1 pole) a vložil jsem pár záznamů. Poté jsem pomocí výběru zkontroloval, že se data zobrazují na obou hostitelích. Nakonec jsem přidal automatický přírůstkový sloupec id na jednom hostiteli a vložil několik dalších dat, abych viděl, jak to vypadá:
![]()
![]()
Jen pro větší zmatek k těm screenshotům:konfiguraci auto_increment (přírůstek a offset) jsem přidal do my.cnf během tohoto testu a ne od začátku, protože jsem o tom nevěděl, dokud jsem testy nezačal.
Každopádně, takto jsem povolil replikaci master-master s MariaDB, což je také replikace slave-slave. Nebo pán-otrok a slave-master replikace, jak si jen vzpomenete.
Myslím, že dalším logickým krokem je prozkoumat a použít nějaký Galera Cluster.
Co je NFS a jak jej nainstalovat na Linux Jak vytvořit a nakonfigurovat VirtualHost pro server OpenLiteSpeedLinux