====== Перенос данных и настройка репликации ====== ===== Перенастройка сервера старой машины ===== Для начала требуется остановить сервер 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 -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. Например: {{:deployment:install:transfer:database:2024-08-13_13-49.png?677x133}} Запоминаем что File = binlog.001002 и Position = 336396. Эти значения нам потребуются дальше Создайте дамп базы данных согласно [[:deployment:install:transfer:database:single|инструкции]]. Выполняем только блок "[[:deployment:install:transfer:database:single#работа_на_старом_сервере|Работа на старом сервере]]". Далее введите команды 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 Разверните созданный бекап на новом сервере согласно [[:deployment:install:transfer:database:single|инструкции]]. Выполняем только блок "[[:deployment:install:transfer:database:single#работа_на_новом_сервере|Работа на новом сервере]]". Создаем фиксированный туннель для подключения ssh -L6565:127.0.0.1:3306 -f -N -p @ Подключаемся к mysql mysql -u -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_%'