Перенос mysql

Перенос базы mysql с минимальным простоем

Задача: перенести 380 Гб базу на новый сервер с минимальным простоем.

Переносили базу 380 Гб и с 5.5 на 5.7.

Требуется ПО: Xtrabackup, iptables, rsyn, screen.

План переноса:

1) Вносим настройки в конфиг my.cnf  для работы репликации.

2) Делаем бекап, переносим на новый сервер, запускаем реплику.

3) Переключаем трафик на новый сервер.

 

В мастере создаем юзера для реплики



GRANT REPLICATION SLAVE ON *.* TO 'slave_user'@'%' IDENTIFIED BY 'password';
FLUSH PRIVILEGES;


 

Включаем в конфиге реплику мастер


server-id                       = 1
log-bin                         = /var/lib/mysql/mysql-bin
expire-logs-days                = 3
sync-binlog                     = 4096
replicate-do-db                 = site



Включаем в конфиге реплику на слейве 


server-id                       = 2
log-bin                         = /var/lib/mysql/mysql-bin
expire-logs-days                = 3
sync-binlog                     = 4096
replicate-do-db                 = site


Создаем бекап

 


innobackupex --user=root --password=pwd /var/backups


Накатываем логи 

 


innobackupex --user=root --password=pwd --apply-log /var/backups/20201010323423



Останавливаем сервис на слейве

 



systemctl stop mysql


Переносим каталог базы в old

 


mv /var/lib/mysql /var/lib/mysql-old


Переносим бекап на на слейв



rsync -avrP /var/backups/20201010323423/ [email protected]:/var/lib/mysql/


 

Дальше все происходит на слейве

меняем права


chown -R mysql:mysql /var/lib/mysql


Смотри номер бинлога и позицию в xtrabackup_binlog_info



cat /var/lib/mysql/xtrabackup_binlog_info


настраиваем мастер 


CHANGE MASTER TO MASTER_HOST='1.1.1.1', MASTER_USER='user_slave', MASTER_PASSWORD='passwd',
MASTER_LOG_FILE = 'mysql-bin.000010', MASTER_LOG_POS = 69400677;

start slave;



Проверяем статус репликации, реплика должна докатится и оставание должно быть 0.


SHOW SLAVE STATUS\G



С репликацией все ок, може перенаправлять весь трафик на новый сервак.


Slave_IO_Running: Yes
Slave_SQL_Running: Yes
Seconds_Behind_Master: 0


Дальше делаем на мастере отключение мастера и перенарпавление трафика на слейв.
Включаем форвардинг


sysctl -w net.ipv4.ip_forward=1

systemctl stop mysql
iptables -t nat -A PREROUTING -p tcp -m tcp -d 1.1.1.1 --dport 3306 -j DNAT --to-destination 192.168.77.2:3306
iptables -t nat -A POSTROUTING -p tcp -m tcp -s 2.2.2.2 --sport 3306 -j SNAT --to-source 1.1.1.1:3306


Все, переключаем клиентов по мере возможностей на новый сервер.

 

 

Если возникли проблемы с репликацией, пропустить ошибки на слейве если есть.
SET GLOBAL SQL_SLAVE_SKIP_COUNTER = 1; START SLAVE;
 

 

Теги Xtrabackup репликация mysql