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