DevOps Linux

MySQL Replication master-slave with zero-downtime [Docker]

17.06.2021

Сделаем бекап на мастере в папку /mysql-backup-20

xtrabackup --user= --password=XXXXXXXX /mysql-backup-20/

После этого, надо применить бинарный лог к нашему дампу, иначе оно не «взлетит». Вложенную папку с временем дампа можно увидеть в момент бекапа. =)

innobackupex --apply-log /mysql-backup-20/

Заливаем на SLAVE сервер с мастера

 rsync -avpP -e ssh /mysql-backup-20/ [email protected]_MYSQL_HOST:/mysql-backup-20/

Создаём пользователя на MySQL мастере, который может реплицировать:

GRAANT REPLICATION SLAVE ON *.* TO 'MYSQL_REPLICATION_USER'@'DESTINATION_MYSQL_HOST' IDENTIFIED BY 'MYSQL_REPLICATION_PASSWORD'

На SLAVE сервере в настройках сразу меняем server-id и выставляем его выше, чем самый высокий у Вас в кластере MySQL. У меня это значение 10. При этом, на MASTER сервере у меня значение 2. Останавливаем SLAVE сервер и перемещаем скопированную папку туда, где у нас находится база MySQL. По-умолчанию, в Debian подобных системах — это /var/lib/mysql/ , поэтому, у себя я просто удаляю всё из /var/lib/mysql/ на Slave-сервере и переношу в неё всё содержимое из папки /mysql-backup-20/.

Далее, надо сделать правильный chown от юзера, под которым у нас работает на СЛЕЙВ сервере MySQL-Server.

Чисто гипотетически, можно уже стартовать сервер.

Следующие действия — это вернуть на слейв всех пользователей, которые есть на мастере, если требуется (ибо переносится всё с бекапами) Делаем это через удобную утилиту pt-show-grants от проекта Percona

pt-show-grants -h MYSQL_MASTER_HOST -u MYSQL_MASTER_USER -p'MYSQL_MASTER_PASSWORD' > grants.sql

теперь подключаем наш мастер, предварительно посмотрев в файле /mysql-backup-20/xtrabackup_binlog_info информацию о логе и о позиции в этом самом логе. В моём случае — это mysql-bin.000706 169768192. Вписывая их, делаем SQl запрос на слейв:

CHANGE MASTER TO MASTER_HOST='MYSQL_MASTER_HOST', MASTER_USER='MYSQL_REPLICATION_USER', MASTER_PASSWORD='MYSQL_REPLICATION_PASSWORD', MASTER_LOG_FILE = 'mysql-bin.000706', MASTER_LOG_POS = 169768192;

После чего запускаем слейв командой

START SLAVE;
0