From 8c1220fc8ed70abf39d9c3d30fe87d86ca2d64c8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=90=D1=80=D1=82=D1=91=D0=BC=20=D0=94=D0=BE=D0=BB=D0=B3?= =?UTF-8?q?=D0=B8=D0=B9?= Date: Fri, 10 Apr 2026 12:17:12 +0300 Subject: [PATCH] =?UTF-8?q?modify:=20=D0=9F=D1=82=2010=20=D0=B0=D0=BF?= =?UTF-8?q?=D1=80=202026=2012:17:10=20MSK?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- mysql_notes.md | 75 ++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 75 insertions(+) create mode 100644 mysql_notes.md diff --git a/mysql_notes.md b/mysql_notes.md new file mode 100644 index 0000000..ebb40a0 --- /dev/null +++ b/mysql_notes.md @@ -0,0 +1,75 @@ +# Заметки к книге Обеспечение высокой доступности систем на основе 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> RANT REPLICATION SLAVE ON *.* TO 'repl_user'@'%'; +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) +```