MariaDB Master-Master
Понадобилась реплика по типу Master-Master, и тут как раз вышел новый Debian, а в нем появилась MariaDB 10.0.16, которую и решено было использовать. Немного о том что такое Master-Master - это как Master-Slave только в 2 стороны :) если со слейва можно только читать, то тут можно и писать.
Первым делом ставим саму СУБД
Далее я делаю копию оригинального файла
Удаляю комментарии и привязку к интерфейсу
И добавляю в конфиг следущее
Из полезного, значения
Первым делом ставим саму СУБД
apt-get install mariadb-server-10.0 -y
Далее я делаю копию оригинального файла
cp /etc/mysql/my.cnf /etc/mysql/my.cnf.orig
Удаляю комментарии и привязку к интерфейсу
sed -i /^#/d /etc/mysql/my.cnf && sed -i /bind-address/d /etc/mysql/my.cnf
И добавляю в конфиг следущее
/etc/mysql/my.cnf
# ID сервера я предпочитаю начинать с 1 server-id = 1 # Формат лога binlog-format = row # Журнал изменений log_bin = /var/log/mysql/mariadb-bin # Индексный файл журнала, в котором информация о том какой журнал является активным, а какие использовались раннее log_bin_index = /var/log/mysql/mariadb-bin.index # Журнал изменений полученых с реплики relay_log = /var/log/mysql/relay-bin # Таже суть что и для log_bin_index relay_log_index = /var/log/mysql/relay-bin.index # Не пишем в бинлог information_schema binlog-ignore-db = information_schema # И не принимает ее от реплики replicate-ignore-db = information_schema # Чтобы исключить конфликты автоинкремента задаем ID начиная с 1 auto_increment_offset = 1 # прибавляя по 2 auto_increment_increment = 2 # В связи с этой проблемой меняем формат таблиц innodb_file_format = BarracudaПерезапускаем, логинимся под рутом, создаем пользователя для реплики и смотрим состояние репликации
service mysql restart mysql -u root -p Enter password: Welcome to the MariaDB monitor. Commands end with ; or \g. Your MariaDB connection id is 33 Server version: 10.0.16-MariaDB-1-log (Debian) Copyright (c) 2000, 2014, Oracle, MariaDB Corporation Ab and others. Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. MariaDB [(none)]> create user 'replusr'@'%' identified by 'password'; Query OK, 0 rows affected (0.00 sec) MariaDB [(none)]> grant replication slave on *.* to 'replusr'@'%'; Query OK, 0 rows affected (0.00 sec) MariaDB [(none)]> show master status; +--------------------+----------+--------------+--------------------+ | File | Position | Binlog_Do_DB | Binlog_Ignore_DB | +--------------------+----------+--------------+--------------------+ | mariadb-bin.000001 | 639 | | information_schema | +--------------------+----------+--------------+--------------------+ 1 row in set (0.00 sec)Переходим ко 2 ноде
/etc/mysql/my.cnf
server-id = 2 binlog-format = row log_bin = /var/log/mysql/mariadb-bin log_bin_index = /var/log/mysql/mariadb-bin.index relay_log = /var/log/mysql/relay-bin relay_log_index = /var/log/mysql/relay-bin.index binlog-ignore-db = information_schema replicate-ignore-db = information_schema auto_increment_offset = 2 auto_increment_increment = 2 innodb_file_format = BarracudaПерезапускаем, создаем пользователя и запускаем реплику
service mysql restart mysql -u root -p Enter password: Welcome to the MariaDB monitor. Commands end with ; or \g. Your MariaDB connection id is 33 Server version: 10.0.16-MariaDB-1-log (Debian) Copyright (c) 2000, 2014, Oracle, MariaDB Corporation Ab and others. Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. MariaDB [(none)]> create user 'replusr'@'%' identified by 'password'; Query OK, 0 rows affected (0.00 sec) MariaDB [(none)]> grant replication slave on *.* to 'replusr'@'%'; Query OK, 0 rows affected (0.00 sec) MariaDB [(none)]> stop slave; Query OK, 0 rows affected, 1 warning (0.00 sec) MariaDB [(none)]> CHANGE MASTER TO MASTER_HOST='192.168.1.1', MASTER_USER='replusr', MASTER_PASSWORD='password', MASTER_LOG_FILE='mariadb-bin.000001', MASTER_LOG_POS=639; Query OK, 0 rows affected (0.24 sec) MariaDB [(none)]> start slave; Query OK, 0 rows affected (0.00 sec)Далее смотрим состояние реплики
MariaDB [(none)]> show master status; +--------------------+----------+--------------+--------------------+ | File | Position | Binlog_Do_DB | Binlog_Ignore_DB | +--------------------+----------+--------------+--------------------+ | mariadb-bin.000002 | 639 | | information_schema | +--------------------+----------+--------------+--------------------+ 1 row in set (0.00 sec)И проделываем тоже самое на 1 ноде
MariaDB [(none)]> stop slave; Query OK, 0 rows affected, 1 warning (0.00 sec) MariaDB [(none)]> CHANGE MASTER TO MASTER_HOST='192.168.1.2', MASTER_USER='replusr', MASTER_PASSWORD='password', MASTER_LOG_FILE='mariadb-bin.000002', MASTER_LOG_POS=639; Query OK, 0 rows affected (0.29 sec) MariaDB [(none)]> start slave; Query OK, 0 rows affected (0.00 sec)После чего смотрим
SHOW SLAVE STATUS\G
где не должно быть ошибок, и можно тестить.Из полезного, значения
Read_Master_Log_Pos
и Exec_Master_Log_Pos
совпадают, если ноды синхронизированы, а Seconds_Behind_Master
показывает насколько отстаем от мастера, в идеале должно быть 0.