Репликация MySQL в режиме MASTER-MASTER

Дано:
Два сервера;
IP первого 1.1.1.1;
IP второго 2.2.2.2;
Ubuntu Server 14.04;

Начнем

****************ОБЕ НОДЫ****************
1. Ставим сервер
apt-get install mysql-server

2. указываем пароль рута
qwe123

****************ПЕРВАЯ НОДА****************

1. правим конфиг на первой ноде
mcedit /etc/mysql/my.cnf

server-id = 1
log_bin = /var/log/mysql/mysql-bin.log
binlog_do_db = example
bind-address = 1.1.1.1

2. Перезапускаем MySQL
/etc/init.d/mysql restart

3. Теперь необходимо создать пользователя, из под которого будет происходить репликация
# Создаем пользователя replicator с паролем password
mysql -u root -p

create user 'replicator'@'%' identified by 'password';
grant replication slave on *.* to 'replicator'@'%';

4. Проверим статус репликации:
show master status;

вывод:

+----------------------+----------+-------------------+------------------------+
| File                        | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+----------------------+----------+-------------------+------------------------+
| mysql-bin.000003 |        344 | example            |                                  |
+----------------------+----------+------------------+-------------------------+


****************ВТОРАЯ НОДА****************

1. На втором Мастере необходимо внести такие изменения в конфигурацию my.cnf
mcedit /etc/mysql/my.cnf

server-id = 2
log_bin = /var/log/mysql/mysql-bin.log
binlog_do_db = example
bind-address = 2.2.2.2

2. Перезапускаем MySQL:

/etc/init.d/mysql restart

3. Теперь необходимо создать пользователя, из под которого будет происходить репликация
# Создаем пользователя replicator с паролем password
mysql -u root -p

create user 'replicator'@'%' identified by 'password';
grant replication slave on *.* to 'replicator'@'%';

4. Проверим статус репликации:
show master status;

****************НА ПЕРВОЙ НОДЕ****************

1. Создаем базы
create database example;

2. Проверим статус репликации на ВТОРОЙ ноде:
show master status;

+----------------------+----------+-------------------+-----------------------------+
| File                        | Position | Binlog_Do_DB |       Binlog_Ignore_DB |
+----------------------+----------+-------------------+-----------------------------+
| mysql-bin.000001 |        433 | example            |                                        |
+---------------------+-----------+-------------------+-----------------------------+

3. Теперь нам необходимо запустить репликацию со второго. Для этого мы
используем информацию о позиции и названии лога. В шаге 2.

slave stop;

CHANGE MASTER TO MASTER_HOST = '2.2.2.2', MASTER_USER = 'replicator', MASTER_PASSWORD = 'password', MASTER_LOG_FILE = 'mysql-bin.000001', MASTER_LOG_POS = 433;

slave start;


****************НА ВТОРОЙ НОДЕ****************

1. Создаем базы
create database example;

2. Проверим статус репликации на ПЕРВОЙ ноде:
show master status;

+----------------------+----------+-------------------+------------------------+
| File                        | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+----------------------+----------+-------------------+------------------------+
| mysql-bin.000008 |        433 | example             |                                 |
+----------------------+----------+-------------------+------------------------+

2. Теперь нам необходимо запустить репликацию с первого. Для этого мы
используем информацию о позиции и названии лога. В шаге 2.

slave stop;

CHANGE MASTER TO MASTER_HOST = '1.1.1.1', MASTER_USER = 'replicator', MASTER_PASSWORD = 'password', MASTER_LOG_FILE = 'mysql-bin.000008', MASTER_LOG_POS = 433;

slave start;


****************ЛЮБАЯ НОДА****************

1. Проверяем репликация
SHOW SLAVE STATUS\G

2. Создадим таблицу (на одной из нод)
use example;

CREATE TABLE get (name VARCHAR(20), owner VARCHAR(20), species VARCHAR(20), sex CHAR(1), birth DATE, death DATE);


3. Смотрим чего получилось
SHOW TABLES;

+-----------------------+
| Tables_in_example |
+-----------------------+
| pet                           |
+-----------------------+


4. Проверяем структуру таблицы
DESCRIBE pet;

+---------+-------------+------+-----+---------+-------+
| Field      | Type        | Null | Key | Default | Extra |
+---------+-------------+------+-----+---------+-------+
| name     | varchar(20) | YES  |     | NULL    |       |
| owner    | varchar(20) | YES  |     | NULL    |       |
| species  | varchar(20) | YES  |     | NULL    |       |
| sex        | char(1)        | YES  |     | NULL    |       |
| birth      | date             | YES  |     | NULL    |       |
| death     | date             | YES  |     | NULL    |       |
+---------+-------------+------+-----+---------+-------+


5. Проверяем на ДРУГОЙ ноде

SHOW TABLES;
DESCRIBE pet;

6. Создаем таблицу на другой ноде
CREATE TABLE get (name VARCHAR(20), owner VARCHAR(20), species VARCHAR(20), sex CHAR(1), birth DATE, death DATE);

7. Смотрим чего получилось
SHOW TABLES;
+------------------------+
| Tables_in_example |
+-----------------------+
| get                           |
| pet                           |
+-----------------------+

8. Проверяем на другой ноде
SHOW TABLES;
+------------------------+
| Tables_in_example |
+-----------------------+
| get                          |
| pet                          |
+----------------------+

DESCRIBE get;

+---------+--------------+------+-----+---------+-------+
| Field     | Type           | Null | Key | Default | Extra |
+---------+--------------+------+-----+---------+-------+
| name    | varchar(20) | YES  |     | NULL    |       |
| owner   | varchar(20) | YES  |     | NULL    |       |
| species | varchar(20) | YES  |     | NULL    |       |
| sex       | char(1)        | YES  |     | NULL    |       |
| birth    | date             | YES  |     | NULL    |       |
| death   | date             | YES  |     | NULL    |       |
+---------+-------------+------+-----+---------+-------+

Реплика работает в обе стороны. УРА!!! Можно даже одну ноду выключить, создать кучу таблиц, после включения все переедет как надо.

Комментариев нет:

Отправить комментарий