Как настроить репликацию MySQL Master-Master
На этой странице
- Предположения
- Измените SELINUX на разрешительный (если он установлен).
- Остановите и отключите firewalld на каждом сервере.
- Отредактируйте файл /etc/my.cnf на обоих серверах.
- Перезапустите и включите демон MySQL на каждом сервере.
- Создайте пользователя репликатора на каждом сервере.
- Получить информацию о файле журнала для использования на другом сервере.
- Перезагрузите оба сервера.
- На любом сервере создайте свою базу данных
- На другом сервере проверьте наличие базы данных
- Источники
В этой статье собрана информация из нескольких источников в формате, который я использую для настройки MySQL Master/Master Replication. Прелесть Linux и открытого исходного кода в том, что это можно сделать разными способами. Пожалуйста, ознакомьтесь с моими рекомендациями и используйте их для удовлетворения любых ваших потребностей. Если у вас есть какие-либо вопросы или вы столкнулись с какими-либо проблемами, не стесняйтесь, напишите мне в комментариях.
Предположения
В этой статье предполагается, что вы уже установили MySQL на каждый из своих серверов. Если нет, вы можете легко сделать это через веб-сайт MySQL по адресу https://www.mysql.org/downloads. Эта статья не тестировалась на MariaDB, но должна работать, если вы предпочитаете использовать MariaDB.
Измените SELINUX на разрешающий (если установлен)
[ ~]# vi /etc/selinux/config
# This file controls the state of SELinux on the system. # SELINUX= can take one of these three values: # enforcing - SELinux security policy is enforced. # permissive - SELinux prints warnings instead of enforcing. # disabled - No SELinux policy is loaded. SELINUX=permissive # SELINUXTYPE= can take one of these two values: # targeted - Targeted processes are protected, # mls - Multi Level Security protection. SELINUXTYPE=targeted
[ ~]# vi /etc/selinux/config
# This file controls the state of SELinux on the system. # SELINUX= can take one of these three values: # enforcing - SELinux security policy is enforced. # permissive - SELinux prints warnings instead of enforcing. # disabled - No SELinux policy is loaded. SELINUX=permissive # SELINUXTYPE= can take one of these two values: # targeted - Targeted processes are protected, # mls - Multi Level Security protection. SELINUXTYPE=targeted
Остановите и отключите firewalld на каждом сервере
[ ~]# systemctl disable firewalld
Выполните следующую команду, чтобы убедиться, что правила брандмауэра отсутствуют.
[ ~]# iptables -L
Результат должен выглядеть так:
Chain INPUT (policy ACCEPT)
target prot opt source destination
Chain FORWARD (policy ACCEPT)
target prot opt source destination
Chain OUTPUT (policy ACCEPT)
target prot opt source destination
[ ~]# systemctl disable firewalld
Выполните следующую команду, чтобы убедиться в отсутствии правил брандмауэра.
[ ~]# iptables -L
Результат должен выглядеть так:
Chain INPUT (policy ACCEPT)
target prot opt source destination
Chain FORWARD (policy ACCEPT)
target prot opt source destination
Chain OUTPUT (policy ACCEPT)
target prot opt source destination
Отредактируйте файл /etc/my.cnf на обоих серверах.
Добавьте следующую информацию в конец раздела [mysqld]
[ ~]# vi /etc/my.cnf
server-id=1 log-bin="mysql-bin" binlog-do-db=name_of_database replicate-do-db=name_of_database relay-log="mysql-relay-log" auto-increment-offset = 1
[ ~]# vi /etc/my.cnf
server-id=2 log-bin="mysql-bin" binlog-do-db=name_of_database replicate-do-db=name_of_database relay-log="mysql-relay-log" auto-increment-offset = 2
Перезапустите и включите демон MySQL на каждом сервере.
[ ~]# systemctl restart mysqld
[ ~]# systemctl enable mysqld
[ ~]# systemctl restart mysqld
[ ~]# systemctl enable mysqld
Создайте пользователя репликатора на каждом сервере
[ ~]# mysql -u root -p
mysql> CREATE USER 'replicator'@'%' IDENTIFIED BY 'change_me';
mysql> GRANT REPLICATION SLAVE ON foo.* TO 'replicator'@'%'
[ ~]# mysql -u root -p
mysql> CREATE USER 'replicator'@'%' IDENTIFIED BY 'change_me';
mysql> GRANT REPLICATION SLAVE ON foo.* TO 'replicator'@'%'
Получить информацию о файле журнала для использования на другом сервере.
[ ~]# mysql -u root -p
mysql> SHOW MASTER STATUS;
+------------------+----------+------------------+------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+------------------+----------+------------------+------------------+
| mysql-bin.000001 | 154 | name_of_database | |
+------------------+----------+------------------+------------------+
1 row in set (0.00 sec)
[ ~]# mysql -u root -p
mysql> STOP SLAVE;
mysql> CHANGE MASTER TO MASTER_HOST = 'Server A IP Address or HOSTNAME',MASTER_USER = 'replicator', MASTER_PASSWORD = 'change_me', MASTER_LOG_FILE = 'mysql-bin.000001', MASTER_LOG_POS = 154;
mysql> START SLAVE;
Повторите те же действия на сервере B.
[ ~]# mysql -u root -p mysql> SHOW MASTER STATUS;
+------------------+----------+------------------+------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+------------------+----------+------------------+------------------+
| mysql-bin.000001 | 154 | name_of_database | |
+------------------+----------+------------------+------------------+
1 row in set (0.00 sec)
[ ~]# mysql -u root -p
mysql> STOP SLAVE; CHANGE MASTER TO MASTER_HOST = 'Server B IP Address or HOSTNAME', MASTER_USER = 'replicator', MASTER_PASSWORD = 'passw0rd', MASTER_LOG_FILE = 'mysql-bin.000001', MASTER_LOG_POS = 154;
mysql> START SLAVE;
Перезагрузите оба сервера
[ ~]# systemctl reboot
[ ~]# systemctl reboot
На любом сервере создайте свою базу данных
[ ~]# mysql -u root -p
mysql> CREATE DATABASE foo;
На другом сервере проверьте наличие базы данных
[ ~]# mysql -u root -p
mysql> SHOW DATABASES;
+--------------------+
| Database |
+--------------------+
| information_schema |
| foo |
| mysql |
| performance_schema |
| sys |
+--------------------+
5 rows in set (0.00 sec)
Источники
- http://www.ryadel.com/en/mysql-master-master-replication-setup-in-5-easy-steps/