# Заметки к книге Обеспечение высокой доступности систем на основе MySQL Применяя репликацию для масштабирования, важно знать, что репликация MySQL является асинхронной. То есть, сначала транзакции фиксируются на главном сервере, а затем реплицируются на подчиненный сервер и там исполняются. Это означает, что при непрерывной репликации подчиненный сервер будет «отставать» от главного. ## Установка MySQL Подробнее описано здесь - https://git.da2001.ru/da2001/notes/src/branch/master/mysql.md ```bash 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 ``` ## Репликация - первые шаги ### Настройка главного сервера Для работы репликации необходим двоичный жернал и уникальный идентификатор сервера. ```bash cat my.cnf ... log-bin = master-bin log-bin-index = master-bin.index server-id = 1 ``` - `master-bin` - базовое имя для давоичного журнала, журналов может быть несколько - `master-bin.index` - имя индексного файла двоичного журнала, в котором содержится список всех файлов двоичного журнала Для того чтобы подключить подчиненный сервер, на главном сервере должен быть пользователь с особыми полномочиями репликации. Создание пользователя репликации на главном сервере (в книге используется устаревший вариант, предлагаю современный) ```bash 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) ``` ### Настройка подчинённого сервера ```bash cat my.cnf ... relay-log = slave-relay-bin relay-log-index = slave-relay-bin.index server-id = 2 ``` ### Подключение подчинённого сервера к главному В книге используется устаревший вариант, предлагаю современный ```bash 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) ```