Mysql (MariaDB) replication master-slave

Установка MariaDB  и репликация базы. Делаем все на Ubuntu 14.04  и используем базу testdb для примера.

Подробнее про типы репликаций можно почитать в сети. Я покажу только пример репликации Master-Slave, когда работает примерно такая схема:

Приложение использует основной сервер с базой Master, при этом все дублируется на Slave. При это приложение пишет данные на мастер, а читать может со слейва. Таким образом, решается и балансировка. При выходе из строя мастера, приложение не падает и продолжает работать со слейвом, который становится мастером. При этом можно починить мастер и запустить его обратно и он станет слейвом.

Слейвов может быть также несколько, но вроде как не рекомендуют более 20. Итак, приступим.

Так как Mysql перешел в Oracle  и появилась куча форков, то я перешел на MariaDB. Установим на оба сервера MariaDB. У меня сервера тестовые c названиями Master и Slave.

Ставим mariadb

apt-get update
apt-get install mariadb-server

После запускаем

/usr/bin/mysql_secure_installation

Указываем там рутовый пароль и все. Субд готова к использованию. Можно на мастере создать базу и влить данные.

mysql -uroot -p

MariaDB (none)> create database testdb;

И заливаем дамп. Это делаем на обоих серверах.

mysq -uroot -p testdb < testdb_dump.sql

Если у вас уже есть мастер с рабочей базой, а вы хотите добавить слейв и настроить репликацию, то на слейв надо будет перенести копию базы, но для этого надо сделать дамп базы правильно. Заходим в мускул

mysql -u root -p

И лочим таблицы от записи, чтобы данные были актуальны на двух серверах

SET GLOBAL read_only = ON;

Делаем дамп базы.

 mysqldump testdb > testdb_dump.sql

И возвращаем обратно

SET GLOBAL read_only = OFF;

Итак, у нас на двух серверах есть копия базы, нужно только настроить репликацию.

На Master в /etc/mysql/my.cnf добавляем 

server-id = 1

log_bin = /var/log/mysql/mysql-bin.log

binlog_do_db = testdb

И обязательно закомментируем строку

#bind-address = 127.0.0.1

Еще в консоли на мастере делаем. То есть добавляем пользователя для репликации.

echo “GRANT replication slave ON *.* TO ‘replic’@’192.168.56.2’ IDENTIFIED BY ‘Pass’;” | mysql -u root -p

 

Немного поясню. server-id тут просто должно быть уникальное значение для каждого сервера. log-bin это пусть к бинарному логу, потому что репликация работает только через этот лог – мастер пишет данные в этот лог, слейв из него пишет в свой и реплицирует эти данные в базу. Формат лога может быть разный – row, statement, mixed. Statement – пишет запросы sql, row – пишет бинарные данные, mixed пишет и то  и другое.

binlog_do_db – тут пишем базы, которые будем реплицировать.

Теперь на master смотрим в базе

show master status;

 И видим такую таблицу

+——————+———-+————–+——————+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+——————+———-+————–+——————+
| mysql-bin.000003 | 245 | testdb | |
+——————+———-+————–+——————+

Значения из нее нам нужны для Slave.

На Slave делаем практически тоже

server-id = 2

binlog_do_db = testdb
relay-log = /var/log/mysql/mysql-relay-bin
relay-log-index = /var/log/mysql/mysql-relay-bin.index

И комментируем строку

#bind-address = 127.0.0.1

 

И добавим пользователя cо значениями из таблицы выше.

echo “CHANGE MASTER TO MASTER_HOST = ‘192.168.56.1’, MASTER_USER = ‘replic’, \
MASTER_PASSWORD = ‘Pass’, MASTER_LOG_FILE = ‘mysql-bin.000003’, \
MASTER_LOG_POS = 245;” | mysql -u root -p

 

Все. Смотрим статус репликации на слейве. Команда SHOW SLAVE STATUS\G

MariaDB [(none)]> SHOW SLAVE STATUS\G
*************************** 1. row ***************************
Slave_IO_State: Waiting for master to send event
Master_Host: 192.168.56.101
Master_User: replication
Master_Port: 3306
Connect_Retry: 60
Master_Log_File: mysql-bin.000004
Read_Master_Log_Pos: 245
Relay_Log_File: mysql-relay-bin.000005
Relay_Log_Pos: 529
Relay_Master_Log_File: mysql-bin.000004
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
Replicate_Do_DB:
Replicate_Ignore_DB:
Replicate_Do_Table:
Replicate_Ignore_Table:
Replicate_Wild_Do_Table:
Replicate_Wild_Ignore_Table:
Last_Errno: 0
Last_Error:
Skip_Counter: 0
Exec_Master_Log_Pos: 245
Relay_Log_Space: 1107
Until_Condition: None
Until_Log_File:
Until_Log_Pos: 0
Master_SSL_Allowed: No
Master_SSL_CA_File:
Master_SSL_CA_Path:
Master_SSL_Cert:
Master_SSL_Cipher:
Master_SSL_Key:
Seconds_Behind_Master: 0
Master_SSL_Verify_Server_Cert: No
Last_IO_Errno: 0
Last_IO_Error:
Last_SQL_Errno: 0
Last_SQL_Error:
Replicate_Ignore_Server_Ids:
Master_Server_Id: 1
1 row in set (0.01 sec)

 

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *