Replikace MySQL je proces, který umožňuje automatické kopírování dat z jednoho databázového serveru na jeden nebo více serverů.
MySQL podporuje řadu replikačních topologií, 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.
Tento tutoriál popisuje základní příklad replikace MySQL Master/Slave s jedním hlavním a jedním podřízeným serverem na Ubuntu 18.04. Stejné kroky platí pro MariaDB.
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 #
Tento příklad předpokládá, že máte dva servery se systémem Ubuntu 18.04, které spolu mohou komunikovat přes privátní síť. Pokud váš poskytovatel hostingu nenabízí soukromé IP adresy, můžete použít veřejné IP adresy a nakonfigurovat firewall tak, aby umožňoval provoz na portu 3306 pouze z důvěryhodných zdrojů.
Servery v tomto příkladu mají následující IP adresy:
Master IP: 192.168.121.190
Slave IP: 192.168.121.236
Instalovat MySQL #
Výchozí úložiště Ubuntu 18.04 obsahuje MySQL verze 5.7. Abyste předešli jakýmkoli problémům, je nejlepší nainstalovat stejnou verzi MySQL na oba servery.
Nainstalujte MySQL na hlavní server:
sudo apt-get update
sudo apt-get install mysql-server
Nainstalujte MySQL na Slave server pomocí stejných příkazů:
sudo apt-get update
sudo apt-get install mysql-server
Nakonfigurujte hlavní server #
Prvním krokem je konfigurace hlavního serveru MySQL. Provedeme následující změny:
- Nastavte server MySQL tak, aby naslouchal na soukromé IP.
- Nastavte jedinečné ID serveru...
- Povolte binární protokolování
Chcete-li tak učinit, otevřete konfigurační soubor MySQL a odkomentujte nebo nastavte následující:
sudo nano /etc/mysql/mysql.conf.d/mysqld.cnf
master:/etc/mysql/mysql.conf.d/mysqld.cnfbind-address = 192.168.121.190
server-id = 1
log_bin = /var/log/mysql/mysql-bin.log
Po dokončení restartujte službu MySQL, aby se změny projevily:
sudo systemctl restart mysql
Dalším krokem je vytvoření nového uživatele replikace. Přihlaste se k serveru MySQL jako uživatel root zadáním:
sudo mysql
Z příkazového řádku MySQL spusťte následující SQL dotazy, které vytvoří replica
a udělte REPLICATION SLAVE
oprávnění pro uživatele:
CREATE USER 'replica'@'192.168.121.236' IDENTIFIED BY 'replica_password';
GRANT REPLICATION SLAVE ON *.* TO 'replica'@'192.168.121.236';
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: 629
Binlog_Do_DB:
Binlog_Ignore_DB:
Executed_Gtid_Set:
1 row in set (0.00 sec)
Poznamenejte si název souboru 'mysql-bin.000001' a Pozice ‘629’ . Tyto hodnoty budete potřebovat při konfiguraci podřízeného serveru. Tyto hodnoty se pravděpodobně na vašem serveru budou lišit.
Konfigurace podřízeného serveru #
Stejně jako u hlavního serveru výše provedeme na podřízeném serveru následující změny:
- Nastavte server MySQL tak, aby naslouchal na soukromé IP adrese
- Nastavte jedinečné ID serveru
- Povolte binární protokolování
Otevřete konfigurační soubor MySQL a upravte následující řádky:
sudo nano /etc/mysql/mysql.conf.d/mysqld.cnf
slave:/etc/mysql/mysql.conf.d/mysqld.cnfbind-address = 192.168.121.236
server-id = 2
log_bin = /var/log/mysql/mysql-bin.log
Restartujte službu MySQL:
sudo systemctl restart mysql
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í MySQL:
sudo mysql
Nejprve zastavte podřízená vlákna:
STOP SLAVE;
Spusťte následující dotaz, který nastaví podřízenou jednotku tak, aby replikovala hlavní:
CHANGE MASTER TO
MASTER_HOST='192.168.121.190',
MASTER_USER='replica',
MASTER_PASSWORD='replica_password',
MASTER_LOG_FILE='mysql-bin.000001',
MASTER_LOG_POS=629;
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.
Abychom ověřili, že vše funguje podle očekávání, vytvoříme na hlavním serveru novou databázi:
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)