Wat is MySQL Master-Master-replicatie?
MySQL Master-Master-replicatie voegt snelheid en redundantie toe aan actieve websites. Bij replicatie fungeren twee afzonderlijke MySQL-servers als een cluster. Databaseclustering is met name handig voor websiteconfiguraties met hoge beschikbaarheid. Gebruik twee afzonderlijke Linodes om databasereplicatie te configureren, elk met privé IPv4-adressen.
OpmerkingDeze handleiding is geschreven voor een niet-rootgebruiker. Opdrachten die verhoogde bevoegdheden vereisen, worden voorafgegaan door
sudo
. Als je niet bekend bent met desudo
commando, kunt u onze Gids voor Gebruikers en Groepen raadplegen.Deze handleiding is geschreven voor Debian 9, Ubuntu 18.04 en Ubuntu 20.04.
Als u niet zeker weet welke versie van MySQL op uw systeem is geïnstalleerd wanneer u de onderstaande stappen volgt, voert u de volgende opdracht in:
mysql --version
MySQL installeren
-
Gebruik de volgende opdrachten om MySQL op elk van de Linodes te installeren:
sudo apt-get update sudo apt-get upgrade -y sudo apt-get install mysql-server mysql-client
-
Voer de opdracht MySQL veilige installatie uit. U wordt gevraagd om een root-wachtwoord aan te maken. Het wordt aanbevolen om ja te selecteren op alle vragen:
mysql_secure_installation
De configuratie van MySQL bewerken
-
Bewerk de
/etc/mysql/my.cnf
bestand op elk van de Linodes. Voeg de volgende waarden toe of wijzig deze:Server 1:
- Bestand:/ 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
Opmerking Als u MySQL 8.0.25 of eerder gebruikt, vervangt u
log_replica_updates
metlog_slave_updates
(binnen zowel Servers 1 als 2). Zie de MySQL-documentatie voor details.Server 2:
- Bestand:/ 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
Opmerking Als u MySQL 8.0.25 of eerder gebruikt, vervangt u
log_replica_updates
metlog_slave_updates
(binnen zowel Servers 1 als 2). Zie de MySQL-documentatie voor details. -
Bewerk het
bind-address
configuratie om de privé-IP-adressen voor elk van de Linodes te gebruiken.- Bestand:/ etc/mysql/my.cnf
1
bind-address = x.x.x.x
-
Als u klaar bent, start u de MySQL-toepassing opnieuw:
sudo systemctl restart mysql
Maak replicatiegebruikers
-
Log in op MySQL op elk van de Linodes:
mysql -u root -p
-
Configureer de replicatiegebruikers op elke Linode. Vervang
x.x.x.x
met het privé IP-adres van de andere Linode, enpassword
met een sterk wachtwoord:MySQL8 en hoger
CREATE USER 'replication'@'x.x.x.x' IDENTIFIED BY 'password'; GRANT REPLICATION SLAVE ON *.* TO 'replication'@'x.x.x.x';
Onder MySQL8
GRANT REPLICATION SLAVE ON *.* TO 'replication'@'x.x.x.x' IDENTIFIED BY 'password';
-
Voer de volgende opdracht uit om de configuratie te testen. Gebruik het privé IP-adres van de andere Linode:
mysql -u replication -p -h x.x.x.x -P 3306
Deze opdracht zou u moeten verbinden met de MySQL-instantie van de externe server.
Databasereplicatie configureren
-
Terwijl u bent aangemeld bij MySQL op server 1, kunt u de masterstatus opvragen:
SHOW MASTER STATUS;
Let op de bestands- en positiewaarden die worden weergegeven:
mysql> SHOW MASTER STATUS; +------------------+----------+--------------+------------------+ | File | Position | Binlog_Do_DB | Binlog_Ignore_DB | +------------------+----------+--------------+------------------+ | mysql-bin.000001 | 277 | | | +------------------+----------+--------------+------------------+ 1 row in set (0.00 sec)
-
Stel op Server 2 bij de MySQL-prompt de replicafunctionaliteit voor die database in. Vervang
x.x.x.x
met het privé-IP van de eerste server. Vervang ook de waarde voorsource_log_file
met de bestandswaarde van de vorige stap, en de waarde voorsource_log_pos
met de positiewaarde.MySQL 8.0.22 of hoger:
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 of eerder:
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;
-
Vraag op Server 2 de masterstatus op. Noteer nogmaals de bestands- en positiewaarden.
SHOW MASTER STATUS;
-
Stel de status van de replicadatabase in op Server 1, gebruik vergelijkbare opdrachten als in stap 2. Gebruik bij het invoeren van de opdrachten het IP-adres van Server 2 en de bestands- en positiewaarden die u zojuist in de vorige stap hebt verzameld.
-
Test door een database te maken en een rij in te voegen:
Server 1:
create database test; create table test.flowers (`id` varchar(10));
Server 2:
show tables in test;
Wanneer u ernaar vraagt, ziet u de tabellen van Server 1 gerepliceerd op Server 2. Gefeliciteerd, u heeft nu een MySQL Master-Master-cluster!
Meer informatie
U kunt de volgende bronnen raadplegen voor aanvullende informatie over dit onderwerp. Hoewel deze worden verstrekt in de hoop dat ze nuttig zullen zijn, houd er rekening mee dat we niet kunnen instaan voor de nauwkeurigheid of tijdigheid van extern gehost materiaal.
- MySQL-referentiehandleidingen