Hvad er MySQL Master-Master Replication?
MySQL Master-Master-replikering tilføjer hastighed og redundans til aktive websteder. Med replikering fungerer to separate MySQL-servere som en klynge. Databaseklynger er særligt nyttigt til webstedskonfigurationer med høj tilgængelighed. Brug to separate linoder til at konfigurere databasereplikering, hver med private IPv4-adresser.
BemærkDenne guide er skrevet til en ikke-rootbruger. Kommandoer, der kræver forhøjede privilegier, er præfikset med
sudo
. Hvis du ikke er bekendt medsudo
kommando, kan du tjekke vores bruger- og gruppervejledning.Denne vejledning er skrevet til Debian 9, Ubuntu 18.04 og Ubuntu 20.04.
Hvis du er usikker på, hvilken version af MySQL der er blevet installeret på dit system, når du følger nedenstående trin, skal du indtaste følgende kommando:
mysql --version
Installer MySQL
-
Brug følgende kommandoer til at installere MySQL på hver af linoderne:
sudo apt-get update sudo apt-get upgrade -y sudo apt-get install mysql-server mysql-client
-
Kør kommandoen MySQL sikker installation. Du bliver bedt om at oprette en root-adgangskode. Det anbefales, at du vælger ja til alle spørgsmålene:
mysql_secure_installation
Rediger MySQL's konfiguration
-
Rediger
/etc/mysql/my.cnf
fil på hver af linoderne. Tilføj eller rediger følgende værdier:Server 1:
- Fil:/ 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
Bemærk Hvis du bruger MySQL 8.0.25 eller tidligere, skal du erstatte
log_replica_updates
medlog_slave_updates
(inden for både Server 1 og 2). Se MySQL-dokumentationen for detaljer.Server 2:
- Fil:/ 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
Bemærk Hvis du bruger MySQL 8.0.25 eller tidligere, skal du erstatte
log_replica_updates
medlog_slave_updates
(inden for både Server 1 og 2). Se MySQL-dokumentationen for detaljer. -
Rediger
bind-address
konfiguration for at bruge de private IP-adresser for hver af linoderne.- Fil:/ etc/mysql/my.cnf
1
bind-address = x.x.x.x
-
Når du er færdig, genstart MySQL-applikationen:
sudo systemctl restart mysql
Opret replikeringsbrugere
-
Log ind på MySQL på hver af linoderne:
mysql -u root -p
-
Konfigurer replikeringsbrugerne på hver Linode. Erstat
x.x.x.x
med den private IP-adresse på den modsatte Linode ogpassword
med en stærk adgangskode:MySQL8 og derover
CREATE USER 'replication'@'x.x.x.x' IDENTIFIED BY 'password'; GRANT REPLICATION SLAVE ON *.* TO 'replication'@'x.x.x.x';
Under MySQL8
GRANT REPLICATION SLAVE ON *.* TO 'replication'@'x.x.x.x' IDENTIFIED BY 'password';
-
Kør følgende kommando for at teste konfigurationen. Brug den private IP-adresse på den modsatte Linode:
mysql -u replication -p -h x.x.x.x -P 3306
Denne kommando skal forbinde dig til fjernserverens MySQL-instans.
Konfigurer databasereplikering
-
Mens du er logget ind på MySQL på Server 1, skal du forespørge om masterstatus:
SHOW MASTER STATUS;
Bemærk fil- og positionsværdierne, der vises:
mysql> SHOW MASTER STATUS; +------------------+----------+--------------+------------------+ | File | Position | Binlog_Do_DB | Binlog_Ignore_DB | +------------------+----------+--------------+------------------+ | mysql-bin.000001 | 277 | | | +------------------+----------+--------------+------------------+ 1 row in set (0.00 sec)
-
På Server 2 ved MySQL-prompten skal du konfigurere replikafunktionaliteten for den database. Erstat
x.x.x.x
med den private IP fra den første server. Erstat også værdien forsource_log_file
med filværdien fra det forrige trin og værdien forsource_log_pos
med positionsværdien.MySQL 8.0.22 eller nyere:
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 eller tidligere:
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;
-
På server 2 skal du forespørge om masterstatus. Bemærk igen fil- og positionsværdierne.
SHOW MASTER STATUS;
-
Indstil replika-databasestatus på Server 1 ved at bruge lignende kommandoer som i trin 2. Når du indtaster kommandoerne, skal du bruge IP-adressen på Server 2 og de fil- og positionsværdier, du lige har indsamlet i det forrige trin.
-
Test ved at oprette en database og indsætte en række:
Server 1:
create database test; create table test.flowers (`id` varchar(10));
Server 2:
show tables in test;
Når du bliver spurgt, bør du se tabellerne fra Server 1 replikeret på Server 2. Tillykke, du har nu en MySQL Master-Master-klynge!
Flere oplysninger
Du ønsker måske at konsultere følgende ressourcer for yderligere oplysninger om dette emne. Selvom disse leveres i håb om, at de vil være nyttige, bemærk venligst, at vi ikke kan stå inde for nøjagtigheden eller aktualiteten af eksternt hostede materialer.
- MySQL-referencemanualer