Co to jest replikacja MySQL Master-Master?
Replikacja MySQL Master-Master zwiększa szybkość i redundancję aktywnych witryn internetowych. Dzięki replikacji dwa oddzielne serwery MySQL działają jako klaster. Klastrowanie baz danych jest szczególnie przydatne w przypadku konfiguracji witryn sieci Web o wysokiej dostępności. Użyj dwóch oddzielnych Linodów, aby skonfigurować replikację bazy danych, każdy z prywatnymi adresami IPv4.
UwagaTen przewodnik jest napisany dla użytkownika innego niż root. Polecenia wymagające podwyższonych uprawnień są poprzedzone przedrostkiem
sudo
. Jeśli nie znaszsudo
polecenie, możesz sprawdzić nasz przewodnik po użytkownikach i grupach.Ten przewodnik jest napisany dla Debiana 9, Ubuntu 18.04 i Ubuntu 20.04.
Jeśli nie masz pewności, która wersja MySQL została zainstalowana w Twoim systemie, wykonując poniższe czynności, wprowadź następujące polecenie:
mysql --version
Zainstaluj MySQL
-
Użyj następujących poleceń, aby zainstalować MySQL na każdym z Linodes:
sudo apt-get update sudo apt-get upgrade -y sudo apt-get install mysql-server mysql-client
-
Uruchom polecenie bezpiecznej instalacji MySQL. Zostaniesz poproszony o utworzenie hasła roota. Zaleca się wybranie odpowiedzi tak na wszystkie pytania:
mysql_secure_installation
Edytuj konfigurację MySQL
-
Edytuj
/etc/mysql/my.cnf
plik na każdym z Linodes. Dodaj lub zmodyfikuj następujące wartości:Serwer 1:
- Plik:/ 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
Uwaga Jeśli używasz MySQL w wersji 8.0.25 lub wcześniejszej, zastąp
log_replica_updates
zlog_slave_updates
(w ramach obu Serwerów 1 i 2). Zobacz dokumentację MySQL, aby uzyskać szczegółowe informacje.Serwer 2:
- Plik:/ 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
Uwaga Jeśli używasz MySQL w wersji 8.0.25 lub wcześniejszej, zastąp
log_replica_updates
zlog_slave_updates
(w ramach obu Serwerów 1 i 2). Zobacz dokumentację MySQL, aby uzyskać szczegółowe informacje. -
Edytuj
bind-address
konfiguracja w celu korzystania z prywatnych adresów IP dla każdego z Linodes.- Plik:/ etc/mysql/my.cnf
1
bind-address = x.x.x.x
-
Po zakończeniu uruchom ponownie aplikację MySQL:
sudo systemctl restart mysql
Utwórz użytkowników replikacji
-
Zaloguj się do MySQL na każdym z Linod:
mysql -u root -p
-
Skonfiguruj użytkowników replikacji na każdym Linode. Zastąp
x.x.x.x
z prywatnym adresem IP przeciwnego Linode ipassword
z silnym hasłem:MySQL8 i nowsze
CREATE USER 'replication'@'x.x.x.x' IDENTIFIED BY 'password'; GRANT REPLICATION SLAVE ON *.* TO 'replication'@'x.x.x.x';
Poniżej MySQL8
GRANT REPLICATION SLAVE ON *.* TO 'replication'@'x.x.x.x' IDENTIFIED BY 'password';
-
Uruchom następujące polecenie, aby przetestować konfigurację. Użyj prywatnego adresu IP przeciwnego Linode:
mysql -u replication -p -h x.x.x.x -P 3306
To polecenie powinno połączyć Cię z instancją MySQL zdalnego serwera.
Konfiguruj replikację bazy danych
-
Po zalogowaniu się do MySQL na serwerze 1 zapytaj o status główny:
SHOW MASTER STATUS;
Zwróć uwagę na wyświetlane wartości plików i pozycji:
mysql> SHOW MASTER STATUS; +------------------+----------+--------------+------------------+ | File | Position | Binlog_Do_DB | Binlog_Ignore_DB | +------------------+----------+--------------+------------------+ | mysql-bin.000001 | 277 | | | +------------------+----------+--------------+------------------+ 1 row in set (0.00 sec)
-
Na serwerze 2 w wierszu polecenia MySQL skonfiguruj funkcję repliki dla tej bazy danych. Zastąp
x.x.x.x
z prywatnym IP z pierwszego serwera. Zastąp także wartośćsource_log_file
z wartością pliku z poprzedniego kroku i wartościąsource_log_pos
z wartością pozycji.MySQL 8.0.22 lub nowszy:
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 lub starszy:
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 serwerze 2 zapytaj o stan główny. Ponownie zanotuj wartości pliku i pozycji.
SHOW MASTER STATUS;
-
Ustaw status bazy danych replik na Serwer 1, używając podobnych poleceń jak w kroku 2. Podczas wprowadzania poleceń użyj adresu IP Serwera 2 oraz wartości pliku i pozycji, które właśnie zebrałeś w poprzednim kroku.
-
Przetestuj, tworząc bazę danych i wstawiając wiersz:
Serwer 1:
create database test; create table test.flowers (`id` varchar(10));
Serwer 2:
show tables in test;
Po zapytaniu powinieneś zobaczyć tabele z serwera 1 zreplikowane na serwerze 2. Gratulacje, masz teraz klaster MySQL Master-Master!
Więcej informacji
Dodatkowe informacje na ten temat można znaleźć w poniższych zasobach. Chociaż są one dostarczane w nadziei, że będą przydatne, należy pamiętać, że nie możemy ręczyć za dokładność ani aktualność materiałów hostowanych zewnętrznie.
- Podręczniki MySQL