Replikace MySQL umožňuje, aby více kopií stejné databáze bylo na více serverech současně, a to automatickým kopírováním dat z primárního serveru na "slave" server.
Díky tomuto mechanismu mohou být všechny příkazy prováděné na hlavním serveru, které nějakým způsobem mění data, zaznamenány, přeneseny a provedeny v replikovaných databázích.
Tato příručka vám pomůže nainstalovat MySQL na váš server, správně nakonfigurovat repliku a ověřit její fungování pomocí testovacích dat.
Nejprve se připojte k serveru prostřednictvím připojení SSH. Pokud jste tak ještě neučinili, doporučujeme se podle našeho průvodce bezpečně připojit pomocí protokolu SSH. V případě lokálního serveru přejděte k dalšímu kroku a otevřete svůj serverový terminál.
Instalace MySQL
Chcete-li nastavit replikaci Master / Slave na obou serverech, nainstalujte verzi MySQL a poté spusťte následující instalační postup na obou počítačích, než budete pokračovat k další kapitole.
Aktualizujte distribuční repozitáře, abyste měli jistotu, že si stáhnete nejaktuálnější verzi MySQL:
$ sudo apt update
Pokud jste tento příkaz již spustili dříve, přejděte k dalšímu kroku.
Nyní pokračujte v instalaci MySQL:
$ sudo apt install mysql-server
Abyste se ujistili, že instalace proběhla úspěšně, zkontrolujte verzi MySQL:
$ mysqld --version
Pokud byl postup úspěšně proveden, na obrazovce se vytiskne nainstalovaná verze MySQL.
Pokračujte v zabezpečení MySQL spuštěním skriptu obsaženého v MySQL, který zvýší zabezpečení a omezí přístup k vašim databázím:
$ sudo mysql_secure_installation
V tomto bodě vás řízený postup provede konfigurací úrovně zabezpečení MySQL.
Nejprve budete dotázáni, zda chcete povolit systém ověřování hesla. Pokud je povoleno, při nastavování hesla uživatele se heslo vyhodnotí a pokud nesplňuje bezpečnostní kritéria, je odmítnuto s chybou.
Později budete dotázáni, zda chcete změnit heslo uživatele root pomocí některého z vašich možností (pokud povolíte systém ověřování hesla, musíte zadat heslo, které splňuje bezpečnostní kritéria).
Doporučujeme se řídit několika doporučenými postupy pro vytvoření bezpečného hesla. To zahrnuje:
použití velkých i malých písmen
použití písmen i číslic
použití nealfanumerických znaků jako @ # $% ˆ &!
používání hesel, která nebyla nikdy předtím použita.
Nakonec vyberte, zda chcete odebrat anonymní uživatele, testovat databáze a zda zakázat vzdálené přihlášení uživatele root. Pro odpovídající úroveň zabezpečení se doporučuje potvrdit všechny tyto změny.
V tomto okamžiku potvrďte aktualizace zobrazené tabulky oprávnění, abyste mohli použít všechna nová bezpečnostní kritéria.
Pro použití změn nakonec restartujte službu:
$ sudo service mysql restart
Konfigurace replikace Master/Slave
Po instalaci na oba servery (Master a Slave) pokračujte konfigurací hlavního serveru.
Nejprve upravte konfigurační soubor v /etc/mysql/mysql.conf.d/mysqld.cnf následovně:
server-id = 1
log_bin = /var/log/mysql/mysql-bin.log
expire_logs_days = 10
max_binlog_size = 100M
Vzhledem k tomu, že se podřízený server bude nutně muset vzdáleně připojit k hlavnímu serveru, musíte se ujistit, že služba MySQL může přijímat externí připojení, a to změnou adresy vazby následovně:
bind-address = 0.0.0.0
Po dokončení restartujte službu, aby se změny projevily:
$ sudo service mysql restart
Pro účely demonstrace a hodnocení vytvořte na hlavním serveru testovací databázi (zde nazvanou „výukový program“) s tabulkou s názvem „čísla“ s fiktivními daty. Po dokončení konfiguračního postupu zkontrolujte, zda jsou všechna zde zadaná data synchronizována se Slave serverem:
$ sudo mysql -u root -p
mysql> CREATE DATABASE tutorial;
Query OK, 1 row affected (0.00 sec)
mysql> USE tutorial;
Database changed
mysql> CREATE TABLE numbers ( value REAL );
Query OK, 0 rows affected (0.09 sec)
mysql> INSERT INTO numbers VALUES ( 1 ), ( 2 ), ( 3 );
Query OK, 3 rows affected (0.04 sec)
Records: 3 Duplicates: 0 Warnings: 0
Ujistěte se tedy, že hodnoty, které jste právě zadali, jsou přítomny v testovací tabulce:
mysql> SELECT * FROM numbers;
+-------+
| value |
+-------+
| 1 |
| 2 |
| 3 |
+-------+
3 rows in set (0.00 sec)
Tabulka čísel by měla obsahovat 3 vzorové řádky, jak je uvedeno výše.
Poté pokračujte vytvořením přístupových údajů pro uživatele, které bude používat Slave databáze:
mysql> GRANT REPLICATION SLAVE ON *.* TO 'usr_replica'@'%' IDENTIFIED BY 'SMDipmf#23$42';
mysql> FLUSH PRIVILEGES;
Než budete pokračovat s konfigurací Slave serveru, bude na obrazovce vytištěn aktuální stav Master a budou uloženy následující informace:
mysql> SHOW MASTER STATUS;
+------------------+----------+--------------+------------------+-------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+------------------+----------+--------------+------------------+-------------------+
| mysql-bin.000001 | 1238 | | | |
+------------------+----------+--------------+------------------+-------------------+
1 row in set (0.00 sec)
Tato data budete potřebovat při konfiguraci Slave serveru.
Pokračujte k ukončení prostředí MySQL:
mysql> exit
Bye
Potom uložte kompletní výpis databáze, abyste jej mohli později načíst na podřízený server:
$ sudo mysqldump -u root -p --opt tutorial > slave-init.sql
Enter password:
Přeneste nově vytvořený soubor na podřízený počítač a pokračujte v jeho konfiguraci, upravte soubor /etc/mysql/mysql.conf.d/mysqld.cnf:
server-id = 2
log_bin = /var/log/mysql/mysql-bin.log
expire_logs_days = 10
max_binlog_size = 100M
Upozorňujeme, že ID serveru bylo změněno pomocí čísla 2 a také nezapomeňte změnit adresu vazby, jak je znázorněno zde:
bind-address = 0.0.0.0
Nyní restartujte Slave, aby se změny projevily:
$ sudo service mysql restart
Nyní pokračujte vytvořením databáze se stejným názvem jako hlavní server:
$ sudo mysql -u root -p
mysql> create database tutorial;
Query OK, 1 row affected (0.00 sec)
mysql> exit
Bye
Nyní importujte nově vytvořenou zálohu a spusťte Slave pomocí informací dříve uložených v hlavní databázi (MASTER_LOG_FILE a MASTER_LOG_POS):
$ sudo mysql -u root tutorial < /root/slave.sql
$ sudo mysql -u root -p
mysql> CHANGE MASTER TO MASTER_HOST='195.231.4.201', MASTER_USER='usr_replica', MASTER_PASSWORD='SMDipmf#23$42', MASTER_LOG_FILE='mysql-bin.000001', MASTER_LOG_POS= 1238;
Query OK, 0 rows affected, 2 warnings (0.10 sec)
mysql> START SLAVE;
Query OK, 0 rows affected (0.00 sec)
Od této chvíle jsou databáze synchronizovány v reálném čase a můžete opustit prostředí MySQL.
Ověření správného fungování replikace
Chcete-li ověřit fungování replikace, můžete zkusit vložit data do Master a zkontrolovat, zda správně dorazí do Slave databáze. Začněte zadáním nových dat na Master následovně:
$ sudo mysql -u root -p
mysql> use tutorial;
Reading table information for completion of table and column names
Turn off this feature to get a quicker startup with -A
Database changed
mysql> INSERT INTO numbers VALUES ( 4 ) , ( 5 );
Query OK, 2 rows affected (0.03 sec)
Records: 2
Duplicates: 0
Warnings: 0
Potom pokračujte dotazem na Slave databázi:
$ sudo mysql -u root -p
mysql> use tutorial;
Reading table information for completion of table and column names
Turn off this feature to get a quicker startup with -A
changed
mysql> SELECT * FROM numbers;
+-------+
| value |
+-------+
| 1 |
| 2 |
| 3 |
| 4 |
| 5 |
+-------+
5 rows in set (0.00 sec)
Jak vidíte, nové hodnoty (4 a 5) dorazily do Slave databáze, takže synchronizace funguje správně.