3.4 KiB
Заметки к книге Обеспечение высокой доступности систем на основе MySQL
Применяя репликацию для масштабирования, важно знать, что репликация MySQL является асинхронной. То есть, сначала транзакции фиксируются на главном сервере, а затем реплицируются на подчиненный сервер и там исполняются. Это означает, что при непрерывной репликации подчиненный сервер будет «отставать» от главного.
Установка MySQL
Подробнее описано здесь - https://git.da2001.ru/da2001/notes/src/branch/master/mysql.md
su -
wget https://dev.mysql.com/get/mysql-apt-config_0.8.36-1_all.deb
apt install -y ./mysql-apt-config_0.8.36-1_all.deb
dpkg-reconfigure mysql-apt-config
apt update
apt install mysql-server
Репликация - первые шаги
Настройка главного сервера
Для работы репликации необходим двоичный жернал и уникальный идентификатор сервера.
cat my.cnf
...
log-bin = master-bin
log-bin-index = master-bin.index
server-id = 1
master-bin- базовое имя для давоичного журнала, журналов может быть несколькоmaster-bin.index- имя индексного файла двоичного журнала, в котором содержится список всех файлов двоичного журнала
Для того чтобы подключить подчиненный сервер, на главном сервере должен быть пользователь с особыми полномочиями репликации.
Создание пользователя репликации на главном сервере (в книге используется устаревший вариант, предлагаю современный)
master> CREATE USER 'repl_user'@'%' IDENTIFIED BY 'strong_password';
Query OK, 0 rows affected (0.00 sec)
master> GRANT REPLICATION SLAVE ON *.* TO 'repl_user'@'%' WITH GRANT OPTION;
Query OK, 0 rows affected (0.00 sec)
Настройка подчинённого сервера
cat my.cnf
...
relay-log = slave-relay-bin
relay-log-index = slave-relay-bin.index
server-id = 2
Подключение подчинённого сервера к главному
В книге используется устаревший вариант, предлагаю современный
slave> CHANGE REPLICATION SOURCE TO
SOURCE_HOST = 'master-1',
SOURCE_PORT = 3306,
SOURCE_USER = 'repl_user',
SOURCE_PASSWORD = 'strong_password',
SOURCE_LOG_FILE = 'mysql-bin.000002', # обязательно!
SOURCE_LOG_POS = 158, # обязательно!
SOURCE_CONNECTION_AUTO_FAILOVER = 1, # опционально, для асинхронной реплики
GET_SOURCE_PUBLIC_KEY = 1; # для MySQL 8.0 с sha2
Query OK, 0 rows affected (0.00 sec)
slave> START REPLICA;
Query OK, 0 rows affected (0.15 sec)