Рассмотрим восстановление репликации, с помощью утилиты Percona Xtrabackup.
Данный метод не требует остановки MASTER-сервера, единственное условие, чтобы была включена запись бинарных логов.
1) Установим утилиту Xtrabackup:
для этого скачаем deb пакет percona-release для установки репозитория Percona
wget https://repo.percona.com/apt/percona-release_latest.$(lsb_release -sc)_all.deb
установим deb пакет , который пропишет репозиторий Percona
sudo dpkg -i percona-release_latest.$(lsb_release -sc)_all.deb
затем обновим данные о доступных пакетах
sudo apt update
и установим саму утилиту
sudo apt install percona-xtrabackup-24
2) Подготовим данные для копирования, скопируем файлы БД:
Для этого: очистим и создадим директорию куда будем копировать данные
rm -r mysql 2> /dev/null; mkdir mysql
запустим копирование
sudo innobackupex --user=root --password=root ~/mysql/
В нашем созданном каталоге, появится каталог с текущей датой.
3) После создания резервной копии данные не готовы к восстановлению, в логах, которые нужно восстановить, могут быть отмененные транзакции:
Нужно применить лог изменений на файл данных
sudo innobackupex --user=root --password=root --apply-log ~/mysql/*/
Резервная копия готова, далее нужно скопировать файлы данных на SLAVE-сервер любым удобным способом
4) На slave-сервере: скопируем данные в каталог mysql, предварительно остановив mariadb:
sudo service mariadb stop sudo mv /var/lib/mysql /var/lib/mysql.old sudo cp -r ~/mysql/*/ /var/lib/mysql sudo chown -R mysql:mysql /var/lib/mysql sudo service mariadb start
Заходим в СУБД mariadb
sudo mysql -uroot -proot
Останавливаем репликацию, корректируем MASTER_LOG_FILE и MASTER_LOG_POS, запускаем репликацию
MariaDB [(none)]> STOP SLAVE; MariaDB [(none)]> CHANGE MASTER TO MASTER_HOST='<ip_server1>', MASTER_USER='replication', MASTER_PASSWORD='password', MASTER_USE_GTID=slave_pos; MariaDB [(none)]> START SLAVE;
Далее выводим актуальную информацию о состоянии базы данного сервера
MariaDB [(none)]> show master status\G *************************** 1. row *************************** File: mysql-bin.000007 Position: 20315691 Binlog_Do_DB: eltex_alert,eltex_ems,wireless,radius,eltex_auth_service,ELTEX_PORTAL,eltex_doors,eltex_ngw,eltex_pcrf,eltex_ott,eltex_jobs,eltex_jerry,eltex_bruce,eltex_wifi_customer_cab,eltex_sorm2,eltex_ont,eltex_wids Binlog_Ignore_DB: mysql,Syslog,performance_schema,information_schema 1 row in set (0.000 sec)
Затем останавливаем репликацию, корректируем MASTER_LOG_FILE и MASTER_LOG_POS, запускаем репликацию на первом сервере. Взяв данные из актуальной информации о состоянии базы восстанавливаемого сервера
sudo mysql -uroot -proot
MariaDB [(none)]> STOP SLAVE; MariaDB [(none)]> CHANGE MASTER TO MASTER_HOST='<ip_server2>', MASTER_USER='replication', MASTER_PASSWORD='password', MASTER_USE_GTID=slave_pos; MariaDB [(none)]> START SLAVE;
На обоих серверах проверяем, что репликация работает:
MariaDB [(none)]> SHOW SLAVE STATUS\G; *************************** 1. row *************************** Slave_IO_State: Waiting for master to send event Master_Host: <ip_server1> Master_User: replication Master_Port: 3306 Connect_Retry: 60 Master_Log_File: mysql-bin.002455 Read_Master_Log_Pos: 89717415 Relay_Log_File: mysqld-relay-bin.000004 Relay_Log_Pos: 89717561 Relay_Master_Log_File: mysql-bin.002455 Slave_IO_Running: Yes Slave_SQL_Running: Yes Replicate_Do_DB: Replicate_Ignore_DB: Replicate_Do_Table: Replicate_Ignore_Table: Replicate_Wild_Do_Table: Replicate_Wild_Ignore_Table: