<šablona x-if=visible><šablona x-if=$isMobile()>
Co je replikace MySQL Master-Master?
Replikace MySQL Master-Master zvyšuje rychlost a redundanci pro aktivní webové stránky. Při replikaci fungují dva samostatné servery MySQL jako cluster. Klastrování databází je užitečné zejména pro konfigurace webu s vysokou dostupností. Ke konfiguraci replikace databáze použijte dva samostatné Linody, každý se soukromými adresami IPv4.
PoznámkaTato příručka je napsána pro uživatele bez oprávnění root. Příkazy, které vyžadují zvýšená oprávnění, mají předponu
sudo
. Pokud neznátesudo
příkazu, můžete se podívat na naši příručku pro uživatele a skupiny.Tato příručka je napsána pro Debian 9, Ubuntu 18.04 a Ubuntu 20.04.
Pokud si nejste jisti, která verze MySQL byla ve vašem systému nainstalována, při provádění kroků níže zadejte následující příkaz:
mysql --version
Instalovat MySQL
-
K instalaci MySQL na každý z Linodů použijte následující příkazy:
sudo apt-get update sudo apt-get upgrade -y sudo apt-get install mysql-server mysql-client
-
Spusťte příkaz zabezpečené instalace MySQL. Budete požádáni o vytvoření hesla root. Doporučuje se vybrat ano na všechny otázky:
mysql_secure_installation
Upravit konfiguraci MySQL
-
Upravte
/etc/mysql/my.cnf
soubor na každém z Linodů. Přidejte nebo upravte následující hodnoty:Server 1:
- Soubor:/ etc/mysql/my.cnf
1 2 3 4 5 6 7 8 9 10 11
[mysqld] server_id = 1 log_bin = /var/log/mysql/mysql-bin.log log_bin_index = /var/log/mysql/mysql-bin.log.index relay_log = /var/log/mysql/mysql-relay-bin relay_log_index = /var/log/mysql/mysql-relay-bin.index expire_logs_days = 10 max_binlog_size = 100M log_replica_updates = 1 auto-increment-increment = 2 auto-increment-offset = 1
Poznámka Pokud používáte MySQL 8.0.25 nebo starší, nahraďte
log_replica_updates
slog_slave_updates
(v rámci serverů 1 a 2). Podrobnosti naleznete v dokumentaci MySQL.Server 2:
- Soubor:/ etc/mysql/my.cnf
1 2 3 4 5 6 7 8 9 10 11
[mysqld] server_id = 2 log_bin = /var/log/mysql/mysql-bin.log log_bin_index = /var/log/mysql/mysql-bin.log.index relay_log = /var/log/mysql/mysql-relay-bin relay_log_index = /var/log/mysql/mysql-relay-bin.index expire_logs_days = 10 max_binlog_size = 100M log_replica_updates = 1 auto-increment-increment = 2 auto-increment-offset = 2
Poznámka Pokud používáte MySQL 8.0.25 nebo starší, nahraďte
log_replica_updates
slog_slave_updates
(v rámci serverů 1 a 2). Podrobnosti naleznete v dokumentaci MySQL. -
Upravte
bind-address
konfiguraci za účelem použití soukromých IP adres pro každý z Linodů.- Soubor:/ etc/mysql/my.cnf
1
bind-address = x.x.x.x
-
Po dokončení restartujte aplikaci MySQL:
sudo systemctl restart mysql
Vytvořit uživatele replikace
-
Přihlaste se do MySQL na každém z Linodů:
mysql -u root -p
-
Nakonfigurujte uživatele replikace na každém Linode. Nahraďte
x.x.x.x
se soukromou IP adresou protějšího Linode apassword
se silným heslem:MySQL8 a vyšší
CREATE USER 'replication'@'x.x.x.x' IDENTIFIED BY 'password'; GRANT REPLICATION SLAVE ON *.* TO 'replication'@'x.x.x.x';
Pod MySQL8
GRANT REPLICATION SLAVE ON *.* TO 'replication'@'x.x.x.x' IDENTIFIED BY 'password';
-
Spusťte následující příkaz a otestujte konfiguraci. Použijte soukromou IP adresu protějšího Linode:
mysql -u replication -p -h x.x.x.x -P 3306
Tento příkaz by vás měl připojit k instanci MySQL vzdáleného serveru.
Konfigurace replikace databáze
-
Při přihlášení do MySQL na serveru 1 se dotazujte na hlavní stav:
SHOW MASTER STATUS;
Poznamenejte si zobrazené hodnoty souboru a pozice:
mysql> SHOW MASTER STATUS; +------------------+----------+--------------+------------------+ | File | Position | Binlog_Do_DB | Binlog_Ignore_DB | +------------------+----------+--------------+------------------+ | mysql-bin.000001 | 277 | | | +------------------+----------+--------------+------------------+ 1 row in set (0.00 sec)
-
Na serveru 2 na příkazovém řádku MySQL nastavte funkci repliky pro tuto databázi. Nahradit
x.x.x.x
s privátní IP z prvního serveru. Nahraďte také hodnotu prosource_log_file
s hodnotou souboru z předchozího kroku a hodnotou prosource_log_pos
s hodnotou pozice.MySQL 8.0.22 nebo vyšší:
STOP REPLICA; CHANGE REPLICATION SOURCE TO source_host='x.x.x.x', source_port=3306, source_user='replication', source_password='password', source_log_file='mysql-bin.000001', source_log_pos=106; START REPLICA;
MySQL 8.0.22 nebo starší:
STOP SLAVE; CHANGE MASTER TO master_host='x.x.x.x', master_port=3306, master_user='replication', master_password='password', master_log_file='mysql-bin.000001', master_log_pos=106; START SLAVE;
-
Na serveru 2 dotaz na hlavní stav. Znovu si poznamenejte hodnoty souboru a pozice.
SHOW MASTER STATUS;
-
Nastavte stav databáze replik na Serveru 1 pomocí podobných příkazů jako v kroku 2. Při zadávání příkazů použijte IP adresu Serveru 2 a hodnoty souborů a pozic, které jste právě shromáždili v předchozím kroku.
-
Otestujte vytvořením databáze a vložením řádku:
Server 1:
create database test; create table test.flowers (`id` varchar(10));
Server 2:
show tables in test;
Při dotazu byste měli vidět tabulky ze serveru 1 replikované na serveru 2. Gratulujeme, nyní máte cluster MySQL Master-Master!
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ů.
- Referenční příručky MySQL