Replikace MySQL je proces kopírování dat z jednoho databázového serveru (master) na jeden nebo více serverů (slave).
MySQL podporuje několik topologií replikace, přičemž topologie Master/Slave je jednou z nejznámějších topologií, ve které jeden databázový server vystupuje jako hlavní, zatímco jeden nebo více serverů funguje jako podřízené. Ve výchozím nastavení je replikace asynchronní, kdy hlavní server odesílá události, které popisují úpravy databáze, do svého binárního protokolu a podřízené jednotky požadují události, když jsou připraveny.
V této příručce vám ukážeme, jak nastavit replikaci MariaDB Master/Slave s jedním hlavním a jedním podřízeným serverem v Debianu 10. MariaDB je výchozí implementace MySQL v Debianu. Stejné kroky platí pro Oracle MySQL.
Tento typ replikační topologie se nejlépe hodí pro nasazení čtených replik pro škálování čtení, zálohování živých databází pro obnovu po havárii a pro analytické úlohy.
Předpoklady #
Předpokládáme, že máte dva servery se systémem Debian 10, které spolu komunikují přes privátní síť. Pokud váš poskytovatel hostingu nepodporuje soukromé IP adresy, můžete použít veřejné IP adresy a nakonfigurovat firewall tak, aby povoloval provoz na portu 3306 pouze z důvěryhodných zdrojů.
Servery použité v tomto příkladu mají následující adresy IP:
Master IP: 10.10.8.12
Slave IP: 10.10.8.164
Instalace MariaDB #
Výchozí úložiště Debian 10 obsahuje MariaDB verze 10.3. Nejlepší je nainstalovat stejnou verzi MariaDB na oba servery, abyste předešli případným problémům.
Nainstalujte MariaDBon na hlavní i podřízenou jednotku zadáním následujících příkazů:
sudo apt-get update
sudo apt-get install mariadb-server
Konfigurace hlavního serveru #
Prvním krokem je nastavení hlavního serveru. Provedeme následující změny:
- Nastavte server MariaDB tak, aby naslouchal na soukromé IP.
- Nastavte jedinečné ID serveru.
- Povolte binární protokolování.
Otevřete konfigurační soubor MariaDB a zrušte komentář nebo nastavte následující řádky:
sudo nano /etc/mysql/mariadb.conf.d/50-server.cnf
master:/etc/mysql/mariadb.conf.d/50-server.cnfbind-address = 10.10.8.12
server-id = 1
log_bin = /var/log/mysql/mysql-bin.log
Po dokončení uložte soubor a restartujte službu MySQL, aby se změny projevily:
sudo systemctl restart mariadb
Dalším krokem je vytvoření nového uživatele replikace. Přihlaste se k serveru MariaDB jako uživatel root:
sudo mysql
Spuštěním následujících dotazů SQL vytvořte uživatele s názvem replica
a udělte REPLICATION SLAVE
oprávnění pro uživatele:
CREATE USER 'replica'@'10.10.8.164' IDENTIFIED BY 'replica_password';
GRANT REPLICATION SLAVE ON *.* TO 'replica'@'10.10.8.164';
Ujistěte se, že jste změnili IP s vaší podřízenou IP adresou. Uživatele můžete pojmenovat, jak chcete. Zatímco jste stále uvnitř výzvy MySQL, spusťte následující příkaz, který vypíše binární název souboru a pozici.
SHOW MASTER STATUS\G
*************************** 1. row ***************************
File: mysql-bin.000001
Position: 328
Binlog_Do_DB:
Binlog_Ignore_DB:
1 row in set (0.001 sec)
Poznamenejte si název souboru 'mysql-bin.000001' a pozice ‚328‘ . Tyto hodnoty jsou nezbytné při konfiguraci podřízeného serveru a pravděpodobně se na vašem serveru budou lišit.
Konfigurace podřízeného serveru #
Na podřízeném serveru provedeme stejné změny jako na hlavním:
- Nastavte server MySQL tak, aby naslouchal na soukromé IP.
- Nastavte jedinečné ID serveru.
- Povolte binární protokolování.
Otevřete konfigurační soubor MariaDB a upravte následující řádky:
sudo nano /etc/mysql/mariadb.conf.d/50-server.cnf
slave:/etc/mysql/mariadb.conf.d/50-server.cnfbind-address = 10.10.8.164
server-id = 2
log_bin = /var/log/mysql/mysql-bin.log
Restartujte službu MariaDB:
sudo systemctl restart mariadb
Dalším krokem je konfigurace parametrů, které bude podřízený server používat pro připojení k hlavnímu serveru. Přihlaste se do prostředí MariaDB:
sudo mysql
Začněte zastavením podřízených vláken:
STOP SLAVE;
Spusťte následující dotaz pro konfiguraci replikace Master/Slave:
CHANGE MASTER TO
MASTER_HOST='10.10.8.12',
MASTER_USER='replica',
MASTER_PASSWORD='replica_password',
MASTER_LOG_FILE='mysql-bin.000001',
MASTER_LOG_POS=328;
Ujistěte se, že používáte správnou IP adresu, uživatelské jméno a heslo. Název a pozice log souboru musí být stejné jako hodnoty, které jste získali z hlavního serveru.
Po dokončení spusťte podřízená vlákna.
START SLAVE;
Otestujte konfiguraci #
V tomto okamžiku byste měli mít funkční nastavení replikace Master/Slave.
Chcete-li ověřit, že je vše správně nastaveno, vytvořte novou databázi na hlavním serveru:
sudo mysql
CREATE DATABASE replicatest;
Přihlaste se k podřízenému prostředí MySQL:
sudo mysql
Spuštěním následujícího příkazu zobrazíte všechny databáze:
SHOW DATABASES;
Všimnete si, že databáze, kterou jste vytvořili na hlavním serveru, je replikována na podřízeném:
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| performance_schema |
| replicatest |
| sys |
+--------------------+
5 rows in set (0.00 sec)