Поиск по сайту:

Как настроить репликацию MySQL Master-Master


На этой странице

  1. Предположения
  2. Измените SELINUX на разрешительный (если он установлен).
  3. Остановите и отключите firewalld на каждом сервере.
  4. Отредактируйте файл /etc/my.cnf на обоих серверах.
  5. Перезапустите и включите демон MySQL на каждом сервере.
  6. Создайте пользователя репликатора на каждом сервере.
  7. Получить информацию о файле журнала для использования на другом сервере.
  8. Перезагрузите оба сервера.
  9. На любом сервере создайте свою базу данных
  10. На другом сервере проверьте наличие базы данных
  11. Источники

В этой статье собрана информация из нескольких источников в формате, который я использую для настройки 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/