Какво е MySQL главен-главен репликация?
MySQL Master-Master репликацията добавя скорост и излишък за активните уебсайтове. При репликация два отделни MySQL сървъра действат като клъстер. Клъстерирането на бази данни е особено полезно за конфигурации на уебсайтове с висока достъпност. Използвайте два отделни Linode, за да конфигурирате репликация на база данни, всяка с частни IPv4 адреси.
ЗабележкаТова ръководство е написано за потребител без root права. Командите, които изискват повишени привилегии, имат префикс с
sudo
. Ако не сте запознати сsudo
команда, можете да проверите нашето ръководство за потребители и групи.Това ръководство е написано за Debian 9, Ubuntu 18.04 и Ubuntu 20.04.
Ако не сте сигурни коя версия на MySQL е инсталирана на вашата система, когато следвате стъпките по-долу, въведете следната команда:
mysql --version
Инсталирайте MySQL
-
Използвайте следните команди, за да инсталирате MySQL на всеки от Linodes:
sudo apt-get update sudo apt-get upgrade -y sudo apt-get install mysql-server mysql-client
-
Изпълнете командата за защитена инсталация на MySQL. Ще бъдете помолени да създадете root парола. Препоръчително е да изберете да за всички въпроси:
mysql_secure_installation
Редактиране на конфигурацията на MySQL
-
Редактирайте
/etc/mysql/my.cnf
файл на всеки от Linodes. Добавете или променете следните стойности:Сървър 1:
- Файл:/ 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
Забележка Ако използвате MySQL 8.0.25 или по-стара версия, заменете
log_replica_updates
сlog_slave_updates
(в рамките на двата сървъра 1 и 2). Вижте документацията на MySQL за подробности.Сървър 2:
- Файл:/ 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
Забележка Ако използвате MySQL 8.0.25 или по-стара версия, заменете
log_replica_updates
сlog_slave_updates
(в рамките на двата сървъра 1 и 2). Вижте документацията на MySQL за подробности. -
Редактирайте
bind-address
конфигурация, за да се използват частните IP адреси за всеки от Linodes.- Файл:/ etc/mysql/my.cnf
1
bind-address = x.x.x.x
-
След като приключите, рестартирайте приложението MySQL:
sudo systemctl restart mysql
Създаване на потребители за репликация
-
Влезте в MySQL на всеки от Linodes:
mysql -u root -p
-
Конфигурирайте потребителите за репликация на всеки Linode. Заменете
x.x.x.x
с частния IP адрес на противоположния Linode иpassword
със силна парола:MySQL8 и по-горе
CREATE USER 'replication'@'x.x.x.x' IDENTIFIED BY 'password'; GRANT REPLICATION SLAVE ON *.* TO 'replication'@'x.x.x.x';
Под MySQL8
GRANT REPLICATION SLAVE ON *.* TO 'replication'@'x.x.x.x' IDENTIFIED BY 'password';
-
Изпълнете следната команда, за да тествате конфигурацията. Използвайте частния IP адрес на противниковия Linode:
mysql -u replication -p -h x.x.x.x -P 3306
Тази команда трябва да ви свърже с MySQL екземпляр на отдалечения сървър.
Конфигуриране на репликация на база данни
-
Докато сте влезли в MySQL на сървър 1, потърсете главния статус:
SHOW MASTER STATUS;
Обърнете внимание на стойностите на файла и позицията, които се показват:
mysql> SHOW MASTER STATUS; +------------------+----------+--------------+------------------+ | File | Position | Binlog_Do_DB | Binlog_Ignore_DB | +------------------+----------+--------------+------------------+ | mysql-bin.000001 | 277 | | | +------------------+----------+--------------+------------------+ 1 row in set (0.00 sec)
-
На сървър 2 в подканата на MySQL настройте функционалността на репликата за тази база данни. Заменете
x.x.x.x
с частния IP от първия сървър. Заменете също стойността заsource_log_file
със стойността на файла от предишната стъпка и стойността заsource_log_pos
със стойността на позицията.MySQL 8.0.22 или по-нова версия:
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 или по-ранна версия:
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;
-
На сървър 2 потърсете главния статус. Отново отбележете стойностите на файла и позицията.
SHOW MASTER STATUS;
-
Задайте състоянието на базата данни на репликата на сървър 1, като използвате подобни команди като в стъпка 2. Когато въвеждате командите, използвайте IP адреса на сървър 2 и стойностите на файла и позицията, които току-що събрахте в предишната стъпка.
-
Тествайте, като създадете база данни и вмъкнете ред:
Сървър 1:
create database test; create table test.flowers (`id` varchar(10));
Сървър 2:
show tables in test;
Когато бъдете запитани, трябва да видите таблиците от сървър 1, репликирани на сървър 2. Поздравления, вече имате MySQL Master-Master клъстер!
Повече информация
Може да пожелаете да се консултирате със следните ресурси за допълнителна информация по тази тема. Въпреки че те са предоставени с надеждата, че ще бъдат полезни, моля, имайте предвид, че не можем да гарантираме за точността или навременността на външно хостваните материали.
- Справочни ръководства за MySQL