mod
parent
af41705fb7
commit
9b4fb459c3
248
mysql.md
248
mysql.md
|
@ -14,15 +14,20 @@
|
||||||
- [Репликация - общие настройки](#репликация---общие-настройки)
|
- [Репликация - общие настройки](#репликация---общие-настройки)
|
||||||
- [Пользователь для выполнения задач репликации](#пользователь-для-выполнения-задач-репликации)
|
- [Пользователь для выполнения задач репликации](#пользователь-для-выполнения-задач-репликации)
|
||||||
- [Настройка мастера для репликации](#настройка-мастера-для-репликации)
|
- [Настройка мастера для репликации](#настройка-мастера-для-репликации)
|
||||||
- [Настройка слейва для репликации](#настройка-слейва-для-репликации)
|
|
||||||
- [Репликация средствами mysqldump](#репликация-средствами-mysqldump)
|
- [Репликация средствами mysqldump](#репликация-средствами-mysqldump)
|
||||||
- [Дамп БД средствами mysqldump](#дамп-бд-средствами-mysqldump)
|
- [Дамп БД средствами mysqldump](#дамп-бд-средствами-mysqldump)
|
||||||
- [Настройка репликации mysqldump](#настройка-репликации-mysqldump)
|
- [Настройка репликации mysqldump](#настройка-репликации-mysqldump)
|
||||||
|
- [Настройка слейва для репликации](#настройка-слейва-для-репликации)
|
||||||
- [Запуск воспроизведения журнала ретрансляции, и проверка статуса репликации mysqldump](#запуск-воспроизведения-журнала-ретрансляции-и-проверка-статуса-репликации-mysqldump)
|
- [Запуск воспроизведения журнала ретрансляции, и проверка статуса репликации mysqldump](#запуск-воспроизведения-журнала-ретрансляции-и-проверка-статуса-репликации-mysqldump)
|
||||||
- [Проверка репликации mysqldump](#проверка-репликации-mysqldump)
|
- [Проверка репликации mysqldump](#проверка-репликации-mysqldump)
|
||||||
- [Репликация - Percona XtraBackup](#репликация---percona-xtrabackup)
|
- [Репликация - Percona XtraBackup](#репликация---percona-xtrabackup)
|
||||||
- [Установка Percona XtraBackup](#установка-percona-xtrabackup)
|
- [Установка Percona XtraBackup](#установка-percona-xtrabackup)
|
||||||
- [Настройка репликации xtrabackup](#настройка-репликации-xtrabackup)
|
- [Настройка репликации xtrabackup](#настройка-репликации-xtrabackup)
|
||||||
|
- [Подготовка резервной копии перед восстановлением](#подготовка-резервной-копии-перед-восстановлением)
|
||||||
|
- [Копирование резервной копии на слейв](#копирование-резервной-копии-на-слейв)
|
||||||
|
- [Восстановление БД на слейве](#восстановление-бд-на-слейве)
|
||||||
|
- [Настройка репликации](#настройка-репликации)
|
||||||
|
- [Проверка репликации xtrabackup](#проверка-репликации-xtrabackup)
|
||||||
|
|
||||||
## Установка сервера MySQL 8 в Debian 12
|
## Установка сервера MySQL 8 в Debian 12
|
||||||
|
|
||||||
|
@ -208,7 +213,35 @@ SHOW BINARY LOG STATUS;
|
||||||
- <https://habr.com/ru/articles/532216/>
|
- <https://habr.com/ru/articles/532216/>
|
||||||
- <https://www.k-max.name/linux/replikaciya-mysql-master-slave/>
|
- <https://www.k-max.name/linux/replikaciya-mysql-master-slave/>
|
||||||
|
|
||||||
### Настройка слейва для репликации
|
## Репликация средствами mysqldump
|
||||||
|
|
||||||
|
### Дамп БД средствами mysqldump
|
||||||
|
|
||||||
|
Для того, чтобы начать репликацию данных, необходимо “подтянуть” слейв до состояния мастера. Для этого, нужно временно заблокировать сам мастер, чтобы сделать слепок актуальных данных.
|
||||||
|
|
||||||
|
```shell
|
||||||
|
FLUSH TABLES WITH READ LOCK;
|
||||||
|
```
|
||||||
|
|
||||||
|
Далее, с помощью mysqldump сделать экспорт данных из базы.
|
||||||
|
|
||||||
|
```shell
|
||||||
|
mysqldump -u root -p sape_test_db > sape_test_db.db
|
||||||
|
```
|
||||||
|
|
||||||
|
После этого, необходимо еще раз выполнить команду `SHOW BINARY LOG STATUS;`, и запомнить или записать значения File и Position. Это, так называемые координаты двоичного журнала. Именно от них далее будет указано стартовать слейву.
|
||||||
|
|
||||||
|
Теперь мастер можно разблокировать.
|
||||||
|
|
||||||
|
```shell
|
||||||
|
UNLOCK TABLES;
|
||||||
|
```
|
||||||
|
|
||||||
|
Мастер настроен, и готов реплицироваться на другие сервера.
|
||||||
|
|
||||||
|
### Настройка репликации mysqldump
|
||||||
|
|
||||||
|
#### Настройка слейва для репликации
|
||||||
|
|
||||||
В первую очередь на слейв необходимо загрузить дамп, полученный с мастера
|
В первую очередь на слейв необходимо загрузить дамп, полученный с мастера
|
||||||
|
|
||||||
|
@ -242,34 +275,6 @@ read_only = 1 # переводим слейв в режим “только ч
|
||||||
systemctl restart mysql.service
|
systemctl restart mysql.service
|
||||||
```
|
```
|
||||||
|
|
||||||
## Репликация средствами mysqldump
|
|
||||||
|
|
||||||
### Дамп БД средствами mysqldump
|
|
||||||
|
|
||||||
Для того, чтобы начать репликацию данных, необходимо “подтянуть” слейв до состояния мастера. Для этого, нужно временно заблокировать сам мастер, чтобы сделать слепок актуальных данных.
|
|
||||||
|
|
||||||
```shell
|
|
||||||
FLUSH TABLES WITH READ LOCK;
|
|
||||||
```
|
|
||||||
|
|
||||||
Далее, с помощью mysqldump сделать экспорт данных из базы.
|
|
||||||
|
|
||||||
```shell
|
|
||||||
mysqldump -u root -p sape_test_db > sape_test_db.db
|
|
||||||
```
|
|
||||||
|
|
||||||
После этого, необходимо еще раз выполнить команду `SHOW BINARY LOG STATUS;`, и запомнить или записать значения File и Position. Это, так называемые координаты двоичного журнала. Именно от них далее будет указано стартовать слейву.
|
|
||||||
|
|
||||||
Теперь мастер можно разблокировать.
|
|
||||||
|
|
||||||
```shell
|
|
||||||
UNLOCK TABLES;
|
|
||||||
```
|
|
||||||
|
|
||||||
Мастер настроен, и готов реплицироваться на другие сервера.
|
|
||||||
|
|
||||||
### Настройка репликации mysqldump
|
|
||||||
|
|
||||||
Необходимо указать слейву, какой сервер будет являться для него мастером, и откуда начинать реплицировать данные. Вместо `MASTER_LOG_FILE` и `MASTER_LOG_POS` необходимо подставить значения, полученные из `SHOW BINARY LOG STATUS;` на мастере. Эти параметры вместе называются координатами двоичного журнала.
|
Необходимо указать слейву, какой сервер будет являться для него мастером, и откуда начинать реплицировать данные. Вместо `MASTER_LOG_FILE` и `MASTER_LOG_POS` необходимо подставить значения, полученные из `SHOW BINARY LOG STATUS;` на мастере. Эти параметры вместе называются координатами двоичного журнала.
|
||||||
|
|
||||||
Адрес мастера указан в `hosts`, поэтому достаточно указать его имя
|
Адрес мастера указан в `hosts`, поэтому достаточно указать его имя
|
||||||
|
@ -277,7 +282,13 @@ UNLOCK TABLES;
|
||||||
Начиная с MySQL 8.4+: `GET_SOURCE_PUBLIC_KEY` является обязательным параметром, который необходимо добавить - <https://stackoverflow.com/questions/69936021/error-002061-authentication-plugin-caching-sha2-password-reported-error-aut>
|
Начиная с MySQL 8.4+: `GET_SOURCE_PUBLIC_KEY` является обязательным параметром, который необходимо добавить - <https://stackoverflow.com/questions/69936021/error-002061-authentication-plugin-caching-sha2-password-reported-error-aut>
|
||||||
|
|
||||||
```shell
|
```shell
|
||||||
CHANGE REPLICATION SOURCE TO SOURCE_HOST='master', SOURCE_USER='repl_user', SOURCE_PASSWORD='repl_passwd', SOURCE_LOG_FILE='mysql-bin.000002', SOURCE_LOG_POS=158, GET_SOURCE_PUBLIC_KEY=1;
|
CHANGE REPLICATION SOURCE TO
|
||||||
|
SOURCE_HOST='master',
|
||||||
|
SOURCE_USER='repl_user',
|
||||||
|
SOURCE_PASSWORD='repl_passwd',
|
||||||
|
SOURCE_LOG_FILE='mysql-bin.000002',
|
||||||
|
SOURCE_LOG_POS=158,
|
||||||
|
GET_SOURCE_PUBLIC_KEY=1;
|
||||||
```
|
```
|
||||||
|
|
||||||
В более ранних версиях используется команда - `CHANGE MASTER TO...`
|
В более ранних версиях используется команда - `CHANGE MASTER TO...`
|
||||||
|
@ -481,10 +492,14 @@ xtrabackup version 8.4.0-2 based on MySQL server 8.4.0 Linux (x86_64) (revision
|
||||||
|
|
||||||
### Настройка репликации xtrabackup
|
### Настройка репликации xtrabackup
|
||||||
|
|
||||||
|
<https://docs.percona.com/percona-xtrabackup/8.4/set-up-replication.html>
|
||||||
|
|
||||||
```shell
|
```shell
|
||||||
xtrabackup --backup --user=repl_user --password=repl_passwd --slave-info --use-memory=1GB --parallel=2 --compress --compress-threads=2 --compress --stream=xbstream --target-dir=/tmp
|
xtrabackup --backup --user=root --password --target-dir=/tmp/dump
|
||||||
```
|
```
|
||||||
|
|
||||||
|
параметров достаточно много, вот некоторые из них:
|
||||||
|
|
||||||
`--backup` - создание резервной копии;
|
`--backup` - создание резервной копии;
|
||||||
`--compress` - сжатие резервной копии;
|
`--compress` - сжатие резервной копии;
|
||||||
`--stream=xbstream` - собрать файлы резервной копии в единый архив;
|
`--stream=xbstream` - собрать файлы резервной копии в единый архив;
|
||||||
|
@ -493,37 +508,166 @@ xtrabackup --backup --user=repl_user --password=repl_passwd --slave-info --use-m
|
||||||
|
|
||||||
также могут использоваться дополнительные параметры, например
|
также могут использоваться дополнительные параметры, например
|
||||||
|
|
||||||
`--slave-info` - ?
|
`--slave-info` - указывает, что нужно сохранить информацию о репликации (например, позицию бинарного лога) в резервной копии. Это полезно, если планируется использовать резервную копию для настройки реплики;
|
||||||
`--use-memory` - ограничения на использование памяти;
|
`--use-memory` - ограничения на использование памяти;
|
||||||
`--parallel` - использование нескольких ядер процессора для ускорения процесса создания резервной копии;
|
`--parallel` - использование нескольких ядер процессора для ускорения процесса создания резервной копии;
|
||||||
`--compress-threads` - сжатие в несколько потоков.
|
`--compress-threads` - сжатие в несколько потоков.
|
||||||
|
|
||||||
|
### Подготовка резервной копии перед восстановлением
|
||||||
|
|
||||||
|
```shell
|
||||||
|
xtrabackup --prepare --target-dir=/tmp/dump
|
||||||
|
```
|
||||||
|
|
||||||
https://docs.percona.com/percona-xtrabackup/8.4/set-up-replication.html
|
### Копирование резервной копии на слейв
|
||||||
https://itproblog.ru/%D0%BE%D0%BF%D1%82%D0%B8%D0%BC%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D1%8F-mysql-%D1%81%D0%B5%D1%80%D0%B2%D0%B5%D1%80%D0%B0-%D1%87%D0%B0%D1%81%D1%82%D1%8C-7-%D1%80%D0%B5%D0%B7%D0%B5%D1%80%D0%B2%D0%BD%D0%BE/#Percona_XtraBackup
|
|
||||||
https://serveradmin.ru/polnyj-i-inkrementnyj-backup-mysql/
|
|
||||||
https://www.slingacademy.com/article/mysql-8-how-to-create-a-replica-using-percona-xtrabackup/
|
|
||||||
https://stupin.su/wiki/mysql_slave_xtrabackup/
|
|
||||||
|
|
||||||
|
```shell
|
||||||
|
rsync -avpP -e ssh /tmp/dump slave:/tmp
|
||||||
|
```
|
||||||
|
|
||||||
https://jira.sapient.ru/browse/SA-3031
|
### Восстановление БД на слейве
|
||||||
https://wiki.sapient.ru/pages/viewpage.action?pageId=51511379
|
|
||||||
https://jira.sapient.ru/browse/DEVOPS-1771
|
|
||||||
|
|
||||||
|
Остановить сервер БД и переместить имеющиеся данные на слейве
|
||||||
|
|
||||||
***
|
```shell
|
||||||
|
systemctl stop mysql
|
||||||
|
|
||||||
Материалы для ознакомления
|
mkdir /root/mysql_old && mv /var/lib/mysql/* /root/mysql_old
|
||||||
|
```
|
||||||
|
|
||||||
- <https://habr.com/ru/companies/oleg-bunin/articles/309326/>
|
Позднее, если не будет ошибок, перемещённые данные можно будет удалить
|
||||||
- <https://habr.com/ru/articles/56702/>
|
|
||||||
- <https://habr.com/ru/companies/otus/articles/600153/>
|
|
||||||
- <https://habr.com/ru/companies/selectel/articles/708434/>
|
|
||||||
|
|
||||||
ещё
|
```shell
|
||||||
|
rm -rf /root/mysql_old
|
||||||
|
```
|
||||||
|
|
||||||
- <https://habr.com/ru/articles/532216/>
|
копирование дампа в целевой каталог слейва
|
||||||
- <https://timeweb.cloud/tutorials/mysql/kak-nastroit-replikatsiyu-v-mysql>
|
|
||||||
- <https://www.k-max.name/linux/replikaciya-mysql-master-slave/>
|
```shell
|
||||||
- <https://stackoverflow.com/questions/69936021/error-002061-authentication-plugin-caching-sha2-password-reported-error-aut>
|
xtrabackup --move-back --target-dir=/tmp/dump --datadir=/var/lib/mysql
|
||||||
|
```
|
||||||
|
|
||||||
|
установить корректные права
|
||||||
|
|
||||||
|
```shell
|
||||||
|
chown -R mysql:mysql /var/lib/mysql
|
||||||
|
```
|
||||||
|
|
||||||
|
### Настройка репликации
|
||||||
|
|
||||||
|
Изменить конфигурацию слейва /etc/mysql/my.cnf (из других конфиг.файлов конфигурация не применялась) в секции [mysqld]
|
||||||
|
|
||||||
|
```shell
|
||||||
|
[mysqld]
|
||||||
|
server_id = 2
|
||||||
|
```
|
||||||
|
|
||||||
|
Запустить сервер БД
|
||||||
|
|
||||||
|
```shell
|
||||||
|
systemctl start mysql
|
||||||
|
```
|
||||||
|
|
||||||
|
Убедиться в том, что нужные параметры применились можно запросом в БД
|
||||||
|
|
||||||
|
```shell
|
||||||
|
mysql> SHOW VARIABLES LIKE 'server_id';
|
||||||
|
+---------------+-------+
|
||||||
|
| Variable_name | Value |
|
||||||
|
+---------------+-------+
|
||||||
|
| server_id | 2 |
|
||||||
|
+---------------+-------+
|
||||||
|
1 row in set (0,00 sec)
|
||||||
|
```
|
||||||
|
|
||||||
|
Уточнить значение и позицию `bin-log` в каталоге, в который скопировали резервную копию с мастера, в данном примере - `/tmp/dump`
|
||||||
|
|
||||||
|
```shell
|
||||||
|
root@slave:~# cat /tmp/dump/xtrabackup_binlog_info
|
||||||
|
mysql-bin.000002 158
|
||||||
|
```
|
||||||
|
|
||||||
|
Команда для запуска репликации в консоли mysql
|
||||||
|
|
||||||
|
```shell
|
||||||
|
mysql -u root -p
|
||||||
|
```
|
||||||
|
|
||||||
|
```shell
|
||||||
|
CHANGE REPLICATION SOURCE TO
|
||||||
|
SOURCE_HOST='master',
|
||||||
|
SOURCE_USER='repl_user',
|
||||||
|
SOURCE_PASSWORD='repl_passwd',
|
||||||
|
SOURCE_LOG_FILE='mysql-bin.000002',
|
||||||
|
SOURCE_LOG_POS=158,
|
||||||
|
GET_SOURCE_PUBLIC_KEY=1;
|
||||||
|
```
|
||||||
|
|
||||||
|
```shell
|
||||||
|
START REPLICA;
|
||||||
|
```
|
||||||
|
|
||||||
|
```shell
|
||||||
|
SHOW REPLICA STATUS\G
|
||||||
|
```
|
||||||
|
|
||||||
|
на что обратить внимание в выводе:
|
||||||
|
|
||||||
|
```shell
|
||||||
|
mysql> SHOW REPLICA STATUS\G
|
||||||
|
*************************** 1. row ***************************
|
||||||
|
Replica_IO_State: Waiting for source to send event
|
||||||
|
Source_Host: master
|
||||||
|
Source_User: repl_user
|
||||||
|
...
|
||||||
|
Replica_IO_Running: Yes
|
||||||
|
Replica_SQL_Running: Yes
|
||||||
|
...
|
||||||
|
Replica_SQL_Running_State: Replica has read all relay log; waiting for more updates
|
||||||
|
...
|
||||||
|
```
|
||||||
|
|
||||||
|
### Проверка репликации xtrabackup
|
||||||
|
|
||||||
|
На мастере добавить данные и убедиться, что они появились на слейве
|
||||||
|
|
||||||
|
```shell
|
||||||
|
mysql -u root -p
|
||||||
|
use sape_test_db;
|
||||||
|
|
||||||
|
INSERT admin_table(name, surname, city) VALUES ('Nikita', 'Samoilov', 'Sankt-Petersburg');
|
||||||
|
```
|
||||||
|
|
||||||
|
```shell
|
||||||
|
mysql> select * from admin_table;
|
||||||
|
+----+--------+-----------+------------------+
|
||||||
|
| id | name | surname | city |
|
||||||
|
+----+--------+-----------+------------------+
|
||||||
|
| 1 | Andrei | Ahmadulin | Ekaterinburg |
|
||||||
|
| 2 | Kit | Root | Georgia |
|
||||||
|
| 3 | Ilya | Paramonov | Moscow |
|
||||||
|
| 4 | Andrei | Zharkov | Moscow |
|
||||||
|
| 5 | Artem | Dolgiy | Zelenograd |
|
||||||
|
| 6 | Nikita | Samoilov | Sankt-Petersburg |
|
||||||
|
+----+--------+-----------+------------------+
|
||||||
|
6 rows in set (0,00 sec)
|
||||||
|
```
|
||||||
|
|
||||||
|
Проверить данные на слейве
|
||||||
|
|
||||||
|
```shell
|
||||||
|
mysql> select * from admin_table;
|
||||||
|
+----+--------+-----------+------------------+
|
||||||
|
| id | name | surname | city |
|
||||||
|
+----+--------+-----------+------------------+
|
||||||
|
| 1 | Andrei | Ahmadulin | Ekaterinburg |
|
||||||
|
| 2 | Kit | Root | Georgia |
|
||||||
|
| 3 | Ilya | Paramonov | Moscow |
|
||||||
|
| 4 | Andrei | Zharkov | Moscow |
|
||||||
|
| 5 | Artem | Dolgiy | Zelenograd |
|
||||||
|
| 6 | Nikita | Samoilov | Sankt-Petersburg |
|
||||||
|
+----+--------+-----------+------------------+
|
||||||
|
6 rows in set (0,00 sec)
|
||||||
|
```
|
||||||
|
|
||||||
|
[вверх](#mysql)
|
||||||
|
|
|
@ -0,0 +1,389 @@
|
||||||
|
# MySQL 5.7 на Debian 12
|
||||||
|
|
||||||
|
Описан процесс установки MySQL 5.7 и настройка репликации с помощью Percona xtrabackup мастер -> слейв
|
||||||
|
|
||||||
|
- [MySQL 5.7 на Debian 12](#mysql-57-на-debian-12)
|
||||||
|
- [Установка MySQL 5.7 на Debian 12](#установка-mysql-57-на-debian-12)
|
||||||
|
- [xtrabackup на mysql 5.7](#xtrabackup-на-mysql-57)
|
||||||
|
- [Установка Percona xtrabackup](#установка-percona-xtrabackup)
|
||||||
|
- [Создание тестовой БД и наполнение данными](#создание-тестовой-бд-и-наполнение-данными)
|
||||||
|
- [Подключение к СУБД](#подключение-к-субд)
|
||||||
|
- [Создание базы данных](#создание-базы-данных)
|
||||||
|
- [Переключение на созданную базу данных](#переключение-на-созданную-базу-данных)
|
||||||
|
- [Создание таблицы в базе данных](#создание-таблицы-в-базе-данных)
|
||||||
|
- [Добавление записей в таблицу](#добавление-записей-в-таблицу)
|
||||||
|
- [Выборка из таблицы](#выборка-из-таблицы)
|
||||||
|
- [Репликация - общие настройки](#репликация---общие-настройки)
|
||||||
|
- [Пользователь для выполнения задач репликации](#пользователь-для-выполнения-задач-репликации)
|
||||||
|
- [Настройка мастера для репликации](#настройка-мастера-для-репликации)
|
||||||
|
- [Настройка репликации xtrabackup](#настройка-репликации-xtrabackup)
|
||||||
|
- [Создание резервной копии](#создание-резервной-копии)
|
||||||
|
- [Подготовка резервной копии перед восстановлением](#подготовка-резервной-копии-перед-восстановлением)
|
||||||
|
- [Копирование резервной копии на слейв](#копирование-резервной-копии-на-слейв)
|
||||||
|
- [Восстановление БД на слейве](#восстановление-бд-на-слейве)
|
||||||
|
- [Настройка репликации](#настройка-репликации)
|
||||||
|
- [Старт репликации](#старт-репликации)
|
||||||
|
- [Проверка репликации](#проверка-репликации)
|
||||||
|
|
||||||
|
***
|
||||||
|
|
||||||
|
## Установка MySQL 5.7 на Debian 12
|
||||||
|
|
||||||
|
<https://downloads.mysql.com/archives/community/>
|
||||||
|
|
||||||
|
Выбираем версию 5.7.42 для Debian
|
||||||
|
|
||||||
|
```shell
|
||||||
|
wget https://downloads.mysql.com/archives/get/p/23/file/mysql-server_5.7.42-1debian10_amd64.deb-bundle.tar
|
||||||
|
tar -xvf mysql-server_5.7.42-1debian10_amd64.deb-bundle.tar
|
||||||
|
|
||||||
|
apt install ./mysql-community-client_5.7.42-1debian10_amd64.deb
|
||||||
|
apt install ./mysql-client_5.7.42-1debian10_amd64.deb
|
||||||
|
apt install ./mysql-community-server_5.7.42-1debian10_amd64.deb
|
||||||
|
```
|
||||||
|
|
||||||
|
## xtrabackup на mysql 5.7
|
||||||
|
|
||||||
|
### Установка Percona xtrabackup
|
||||||
|
|
||||||
|
<https://docs.percona.com/percona-xtrabackup/8.4/apt-repo.html>
|
||||||
|
|
||||||
|
```shell
|
||||||
|
apt update && apt install curl
|
||||||
|
curl -O https://repo.percona.com/apt/percona-release_latest.generic_all.deb
|
||||||
|
apt install gnupg2 lsb-release ./percona-release_latest.generic_all.deb
|
||||||
|
apt update
|
||||||
|
|
||||||
|
percona-release enable pxb-24
|
||||||
|
apt update
|
||||||
|
apt install percona-xtrabackup-24
|
||||||
|
```
|
||||||
|
|
||||||
|
```shell
|
||||||
|
xtrabackup --version
|
||||||
|
```
|
||||||
|
|
||||||
|
## Создание тестовой БД и наполнение данными
|
||||||
|
|
||||||
|
### Подключение к СУБД
|
||||||
|
|
||||||
|
```shell
|
||||||
|
mysql -u root -p
|
||||||
|
```
|
||||||
|
|
||||||
|
### Создание базы данных
|
||||||
|
|
||||||
|
```shell
|
||||||
|
CREATE DATABASE IF NOT EXISTS sape_test_db;
|
||||||
|
```
|
||||||
|
|
||||||
|
По ошибке была создана БД с именем - `sape_test_db.db`
|
||||||
|
|
||||||
|
При её удалении полачал ошибку
|
||||||
|
|
||||||
|
```shell
|
||||||
|
mysql> drop database 'sape_test_db.db';
|
||||||
|
ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ''sape_test_db.db'' at line 1
|
||||||
|
```
|
||||||
|
|
||||||
|
Поиск причин привёл - <https://stackoverflow.com/questions/16135987/error-on-drop-default-database-error>
|
||||||
|
|
||||||
|
при использовании в названии зарезервированных слов, следует заключать имя БД в косые ковычки `
|
||||||
|
|
||||||
|
```shell
|
||||||
|
mysql> drop database `sape_test_db.db`;
|
||||||
|
Query OK, 0 rows affected (0,17 sec)
|
||||||
|
```
|
||||||
|
|
||||||
|
### Переключение на созданную базу данных
|
||||||
|
|
||||||
|
```shell
|
||||||
|
USE sape_test_db;
|
||||||
|
```
|
||||||
|
|
||||||
|
### Создание таблицы в базе данных
|
||||||
|
|
||||||
|
таблица будет содержать три столбца: id, name, surname, address. Первичным ключом будет id. В качестве движка явно укажем InnoDB.
|
||||||
|
|
||||||
|
```shell
|
||||||
|
CREATE TABLE admin_table
|
||||||
|
( id int NOT NULL AUTO_INCREMENT,
|
||||||
|
name char(20) NOT NULL,
|
||||||
|
surname char(20) NOT NULL,
|
||||||
|
city char(20) NULL,
|
||||||
|
PRIMARY KEY (id) )
|
||||||
|
ENGINE=InnoDB;
|
||||||
|
```
|
||||||
|
|
||||||
|
для удаления таблицы
|
||||||
|
|
||||||
|
```shell
|
||||||
|
DROP TABLE admin_table;
|
||||||
|
```
|
||||||
|
|
||||||
|
### Добавление записей в таблицу
|
||||||
|
|
||||||
|
```shell
|
||||||
|
INSERT admin_table(name, surname, city) VALUES ('Andrei', 'Ahmadulin', 'Ekaterinburg');
|
||||||
|
INSERT admin_table(name, surname, city) VALUES ('Ilya', 'Paramonov', 'Moscow');
|
||||||
|
INSERT admin_table(name, surname, city) VALUES ('Andrei', 'Zharkov', 'Moscow');
|
||||||
|
INSERT admin_table(name, surname, city) VALUES ('Artem', 'Dolgiy', 'Zelenograd');
|
||||||
|
```
|
||||||
|
|
||||||
|
### Выборка из таблицы
|
||||||
|
|
||||||
|
```shell
|
||||||
|
SELECT * FROM admin_table;
|
||||||
|
```
|
||||||
|
|
||||||
|
## Репликация - общие настройки
|
||||||
|
|
||||||
|
Эти настройки выполняются вне зависимости от выбранного способа репликации
|
||||||
|
|
||||||
|
### Пользователь для выполнения задач репликации
|
||||||
|
|
||||||
|
Будет создан пользователь `repl_user` с паролем `repl_passwd`
|
||||||
|
|
||||||
|
```shell
|
||||||
|
mysql -u root -p
|
||||||
|
```
|
||||||
|
|
||||||
|
```shell
|
||||||
|
CREATE USER 'repl_user'@'%' IDENTIFIED BY 'repl_passwd';
|
||||||
|
```
|
||||||
|
|
||||||
|
Если возникнет ошибка - `ERROR 1819 (HY000): Your password does not satisfy the current policy requirements` - <https://stackoverflow.com/questions/43094726/your-password-does-not-satisfy-the-current-policy-requirements>
|
||||||
|
|
||||||
|
кратко - достаточно изменить политику паролей
|
||||||
|
|
||||||
|
```shell
|
||||||
|
mysql> SHOW VARIABLES LIKE 'validate_password%';
|
||||||
|
+-------------------------------------------------+--------+
|
||||||
|
| Variable_name | Value |
|
||||||
|
+-------------------------------------------------+--------+
|
||||||
|
| validate_password.changed_characters_percentage | 0 |
|
||||||
|
| validate_password.check_user_name | ON |
|
||||||
|
| validate_password.dictionary_file | |
|
||||||
|
| validate_password.length | 8 |
|
||||||
|
| validate_password.mixed_case_count | 1 |
|
||||||
|
| validate_password.number_count | 1 |
|
||||||
|
| validate_password.policy | MEDIUM |
|
||||||
|
| validate_password.special_char_count | 1 |
|
||||||
|
+-------------------------------------------------+--------+
|
||||||
|
8 rows in set (0,03 sec)
|
||||||
|
|
||||||
|
mysql> SET GLOBAL validate_password.policy = LOW;
|
||||||
|
Query OK, 0 rows affected (0,00 sec)
|
||||||
|
|
||||||
|
mysql>
|
||||||
|
```
|
||||||
|
|
||||||
|
Теперь пользователя можно будет создать с простым паролем - `'repl_passwd'`
|
||||||
|
|
||||||
|
Назначение привилегий для пользователя
|
||||||
|
|
||||||
|
```shell
|
||||||
|
GRANT REPLICATION SLAVE ON *.* TO 'repl_user'@'%' WITH GRANT OPTION;
|
||||||
|
FLUSH PRIVILEGES;
|
||||||
|
```
|
||||||
|
|
||||||
|
### Настройка мастера для репликации
|
||||||
|
|
||||||
|
В файл `/etc/mysql/conf.d/mysqld.cnf`, в секции `[mysqld]` необходимо добавить следующие параметры:
|
||||||
|
|
||||||
|
```shell
|
||||||
|
[mysqld]
|
||||||
|
server_id = 1
|
||||||
|
log_bin = mysql-bin
|
||||||
|
```
|
||||||
|
|
||||||
|
После изменения конфигурации необходимо перезагрузить СУБД
|
||||||
|
|
||||||
|
```shell
|
||||||
|
systemctl restart mysql.service
|
||||||
|
```
|
||||||
|
|
||||||
|
Убедиться в том, что нужные параметры применились можно запросом в БД
|
||||||
|
|
||||||
|
```shell
|
||||||
|
mysql> SHOW VARIABLES LIKE 'server_id';
|
||||||
|
+---------------+-------+
|
||||||
|
| Variable_name | Value |
|
||||||
|
+---------------+-------+
|
||||||
|
| server_id | 1 |
|
||||||
|
+---------------+-------+
|
||||||
|
1 row in set (0,00 sec)
|
||||||
|
```
|
||||||
|
|
||||||
|
```shell
|
||||||
|
mysql> SHOW VARIABLES LIKE 'log_bin';
|
||||||
|
+---------------+-------+
|
||||||
|
| Variable_name | Value |
|
||||||
|
+---------------+-------+
|
||||||
|
| log_bin | ON |
|
||||||
|
+---------------+-------+
|
||||||
|
1 row in set (0,00 sec)
|
||||||
|
```
|
||||||
|
|
||||||
|
## Настройка репликации xtrabackup
|
||||||
|
|
||||||
|
<https://docs.percona.com/percona-xtrabackup/2.4/howtos/setting_up_replication.html>
|
||||||
|
|
||||||
|
### Создание резервной копии
|
||||||
|
|
||||||
|
```shell
|
||||||
|
xtrabackup --backup --user=root --password --target-dir=/tmp/dump
|
||||||
|
```
|
||||||
|
|
||||||
|
## Подготовка резервной копии перед восстановлением
|
||||||
|
|
||||||
|
```shell
|
||||||
|
xtrabackup --prepare --target-dir=/tmp/dump
|
||||||
|
```
|
||||||
|
|
||||||
|
## Копирование резервной копии на слейв
|
||||||
|
|
||||||
|
```shell
|
||||||
|
rsync -avpP -e ssh /tmp/dump slave:/tmp
|
||||||
|
```
|
||||||
|
|
||||||
|
## Восстановление БД на слейве
|
||||||
|
|
||||||
|
Остановить сервер БД и переместить имеющиеся данные на слейве
|
||||||
|
|
||||||
|
```shell
|
||||||
|
systemctl stop mysql
|
||||||
|
|
||||||
|
mkdir /root/mysql_old && mv /var/lib/mysql/* /root/mysql_old
|
||||||
|
```
|
||||||
|
|
||||||
|
Позднее, если не будет ошибок, перемещённые данные можно будет удалить
|
||||||
|
|
||||||
|
```shell
|
||||||
|
rm -rf /root/mysql_old
|
||||||
|
```
|
||||||
|
|
||||||
|
копирование дампа в целевой каталог слейва
|
||||||
|
|
||||||
|
```shell
|
||||||
|
xtrabackup --move-back --target-dir=/tmp/dump --datadir=/var/lib/mysql
|
||||||
|
```
|
||||||
|
|
||||||
|
установить корректные права
|
||||||
|
|
||||||
|
```shell
|
||||||
|
chown -R mysql:mysql /var/lib/mysql
|
||||||
|
```
|
||||||
|
|
||||||
|
## Настройка репликации
|
||||||
|
|
||||||
|
Изменить конфигурацию слейва `/etc/mysql/conf.d/mysqld.cnf`, в секции `[mysqld]`
|
||||||
|
|
||||||
|
```shell
|
||||||
|
[mysqld]
|
||||||
|
server_id = 2
|
||||||
|
```
|
||||||
|
|
||||||
|
Запустить сервер БД
|
||||||
|
|
||||||
|
```shell
|
||||||
|
systemctl start mysql
|
||||||
|
```
|
||||||
|
|
||||||
|
Убедиться в том, что нужные параметры применились можно запросом в БД
|
||||||
|
|
||||||
|
```shell
|
||||||
|
mysql> SHOW VARIABLES LIKE 'server_id';
|
||||||
|
+---------------+-------+
|
||||||
|
| Variable_name | Value |
|
||||||
|
+---------------+-------+
|
||||||
|
| server_id | 1 |
|
||||||
|
+---------------+-------+
|
||||||
|
1 row in set (0,00 sec)
|
||||||
|
```
|
||||||
|
|
||||||
|
### Старт репликации
|
||||||
|
|
||||||
|
В скопированном дампе БД с мастера - `/tmp/dump` уточнить название бинарного лога и позицию
|
||||||
|
|
||||||
|
```shell
|
||||||
|
root@slave:~# cat /tmp/dump/xtrabackup_binlog_info
|
||||||
|
mysql-bin.000001 154
|
||||||
|
```
|
||||||
|
|
||||||
|
Команда для запуска репликации в консоли mysql
|
||||||
|
|
||||||
|
```shell
|
||||||
|
mysql -u root -p
|
||||||
|
```
|
||||||
|
|
||||||
|
```sql
|
||||||
|
CHANGE MASTER TO
|
||||||
|
MASTER_HOST='master',
|
||||||
|
MASTER_USER='repl_user',
|
||||||
|
MASTER_PASSWORD='repl_passwd',
|
||||||
|
MASTER_LOG_FILE='mysql-bin.000001',
|
||||||
|
MASTER_LOG_POS=154;
|
||||||
|
```
|
||||||
|
|
||||||
|
```shell
|
||||||
|
START SLAVE;
|
||||||
|
```
|
||||||
|
|
||||||
|
```shell
|
||||||
|
SHOW SLAVE STATUS \G
|
||||||
|
```
|
||||||
|
|
||||||
|
Стоит обратить внимание не значения
|
||||||
|
|
||||||
|
```shell
|
||||||
|
Slave_IO_Running: Yes
|
||||||
|
Slave_SQL_Running: Yes
|
||||||
|
```
|
||||||
|
|
||||||
|
## Проверка репликации
|
||||||
|
|
||||||
|
На мастере добавить данные и убедиться, что они появились на слейве
|
||||||
|
|
||||||
|
```shell
|
||||||
|
mysql -u root -p
|
||||||
|
use sape_test_db;
|
||||||
|
|
||||||
|
INSERT admin_table(name, surname, city) VALUES ('Nikita', 'Samoilov', 'Sankt-Petersburg');
|
||||||
|
```
|
||||||
|
|
||||||
|
```shell
|
||||||
|
mysql> select * from admin_table;
|
||||||
|
+----+--------+-----------+------------------+
|
||||||
|
| id | name | surname | city |
|
||||||
|
+----+--------+-----------+------------------+
|
||||||
|
| 1 | Andrei | Ahmadulin | Ekaterinburg |
|
||||||
|
| 2 | Kit | Root | Georgia |
|
||||||
|
| 3 | Ilya | Paramonov | Moscow |
|
||||||
|
| 4 | Andrei | Zharkov | Moscow |
|
||||||
|
| 5 | Artem | Dolgiy | Zelenograd |
|
||||||
|
| 6 | Nikita | Samoilov | Sankt-Petersburg |
|
||||||
|
+----+--------+-----------+------------------+
|
||||||
|
6 rows in set (0,00 sec)
|
||||||
|
```
|
||||||
|
|
||||||
|
Проверить данные на слейве
|
||||||
|
|
||||||
|
```shell
|
||||||
|
mysql -u root -p
|
||||||
|
use sape_test_db;
|
||||||
|
```
|
||||||
|
|
||||||
|
```shell
|
||||||
|
mysql> select * from admin_table;
|
||||||
|
+----+--------+-----------+------------------+
|
||||||
|
| id | name | surname | city |
|
||||||
|
+----+--------+-----------+------------------+
|
||||||
|
| 1 | Andrei | Ahmadulin | Ekaterinburg |
|
||||||
|
| 2 | Ilya | Paramonov | Moscow |
|
||||||
|
| 3 | Andrei | Zharkov | Moscow |
|
||||||
|
| 4 | Artem | Dolgiy | Zelenograd |
|
||||||
|
| 5 | Nikita | Samoilov | Sankt-Petersburg |
|
||||||
|
+----+--------+-----------+------------------+
|
||||||
|
5 rows in set (0,00 sec)
|
||||||
|
```
|
Loading…
Reference in New Issue