modify: Пт 10 апр 2026 12:17:10 MSK

This commit is contained in:
2026-04-10 12:17:12 +03:00
parent 71c620923a
commit 8c1220fc8e

75
mysql_notes.md Normal file
View File

@@ -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)
```