Перенос данных и настройка репликации

Перенастройка сервера старой машины

Для начала требуется остановить сервер

sudo service mysql stop

Далее требуется изменить конфигурацию сервер

cd /etc/mysql

nano my.cnf
#или
mcedit my.cnf

Внесите данную конфигурацию в конец файла

[mysqld]
server_id = 1
log_bin = /var/lib/mysql/mysql-bin.log
binlog_do_db = medis_archive
binlog_do_db = medis_db
#... Укажите все базы данных на сервере относящиеся к MGERM. В конце инструкции есть скрипт для получения списка
binlog_do_db = medis_users
auto_increment_increment = 2

Перезапустите сервер

sudo service mysql start

Подключитесь к mysql

mysql -u<mysql_user> -p

Добавьте пользователя для репликации

mysql> CREATE USER 'replica_user'@'%' IDENTIFIED WITH mysql_native_password BY 'replica_user_password'
mysql> GRANT REPLICATION SLAVE ON *.* TO 'replica_user'@'%'
mysql> FLUSH PRIVILEGES;

Заблокируем запись на сервер и получим необходимые параметры

mysql> FLUSH TABLES WITH READ LOCK;
mysql> SHOW MASTER STATUS;

Последняя команда выведет на экран строку с данными. Требуется записать значения полей File и Position.

Например:

Запоминаем что File = binlog.001002 и Position = 336396. Эти значения нам потребуются дальше

Создайте дамп базы данных согласно инструкции. Выполняем только блок «Работа на старом сервере».

Далее введите команды

mysql> UNLOCK TABLES;
mysql> exit;

Перенастройка нового сервера

Для начала требуется остановить сервер

sudo service mysql stop

Далее требуется изменить конфигурацию сервер

cd /etc/mysql  nano my.cnf
#или
mcedit my.cnf

Внесите данную конфигурацию в конец файла

[mysqld]
server_id = 2
log_bin = /var/lib/mysql/mysql-bin.log
binlog_do_db = medis_archive
binlog_do_db = medis_db
#Укажите все базы данных на сервере относящиеся к MGERM. В конце инструкции есть скрипт для получения списка
binlog_do_db = medis_users
auto_increment_offset = 2
auto_increment_increment = 2
relay-log = /var/log/mysql/mysql-relay-bin.log

Перезапустите сервер

sudo service mysql start

Разверните созданный бекап на новом сервере согласно инструкции. Выполняем только блок «Работа на новом сервере».

Создаем фиксированный туннель для подключения

ssh -L6565:127.0.0.1:3306 -f -N -p<old_server_port> <old_server_user>@<old_server_host>

Подключаемся к mysql

mysql -u<mysql_user> -p

Введите следующий скрипт в поле ввода

CHANGE REPLICATION SOURCE TO
SOURCE_HOST='127.0.0.1',
SOURCE_PORT = 6565,
SOURCE_USER='replica_user',
SOURCE_PASSWORD='replica_user_password',
SOURCE_LOG_FILE='mysql-bin.001002',
SOURCE_LOG_POS=336396;

Внимание! Параметры SOURCE_PORT, SOURCE_LOG_FILE и SOURCE_LOG_POS должны быть указаны в соответвии с предыдущими действиями!

  • SOURCE_PORT - возьмите номер из пункта 'Создаем фиксированный туннель для подключения'
  • SOURCE_LOG_FILE и SOURCE_LOG_POS - возьмите из пункта 'Заблокируем запись на сервер и получим необходимые параметры'

Запускаем репликацию

mysql> START REPLICA;
mysql> SHOW REPLICA STATUS\G;

Если все прошло удачно, то репликация начнется. Для проверки, можно создать произвольную строку в произвольной таблице любой базы данных на старом сервере и посмотреть, появится ли она на новом сервере. Если строка не появится, то была допущена ошибка при создании реплики или существует другая проблема. Гугл в помощь :(

Скрипт для получения всех строк binlog_do_db

SELECT CONCAT('binlog_do_db = ',SCHEMA_NAME)
FROM information_schema.SCHEMATA
WHERE SCHEMA_NAME LIKE 'medis_%'