Files
notes/mysql_notes.md

76 lines
3.4 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Заметки к книге Обеспечение высокой доступности систем на основе 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)
```