В моей настройке есть два сервера Debian. Первый - это старый производственный сервер, а второй - новый. На первом (старом) запускается db-сервер mysql v5.5 и старое приложение, которое отстает от поддержки. Его нельзя легко перенести на новый сервер. Новый сервер работает под управлением mariadb v10.1, а все остальные приложения были перенесены со старого сервера на этот новый. Эти приложения должны работать также с данными приложения, которые не могут быть перенесены. Портированное приложение может обращаться только к локальным базам данных. Поэтому нет простого способа изменить соединение этих приложений со старым сервером БД.
Моя идея: я хочу реплицировать (master-> slave) данные одной базы данных (используемой старым приложением, которое не является переносимым) сервера db mysql v5.5, на db-сервер maraidb v10.1. Пока проблем нет.
Но приложения на новом сервере не только читают данные старого приложения, но и могут их изменять. И у них также есть собственные базы данных, которые существуют только на новом сервере. Насколько я знаю, это проблема, которая может привести к прерыванию репликации в некоторых ситуациях, если приложения будут пытаться выполнять запись в реплицированную базу данных на ведомом устройстве. Моя следующая мысль для решения этой проблемы заключалась в том, что я мог бы использовать прокси-сервер SQL Server и нашел несколько интересных (mariadb maxscale, haproxy, proxySQL), но, насколько я понял, они могут разделять операции чтения и записи, но я не смог найти способ маршрутизации операций записи для разных баз данных на разные серверы.
Кто-нибудь может дать мне подсказку, чтобы решить эту проблему?
Окружение:
Сервер 1 - MySQL v5.5 - база данных_1
Сервер 2 - Mariadb v10.1 - база данных_1, база данных_2, база данных_3
Приложение на сервере 1 записывает и считывает данные из базы данных_1 на сервере 1. Другие приложения на сервере 2 считывают и записывают данные в базу данных_1 на сервере 2.
Таким образом, данные из database_1 должны быть реплицированы с сервера 1 на сервер 2 и могут быть изменены там.
Может работать главная репликация master- вместо ведомого master-, но из-за полей auto_increment, которые могут нарушить репликацию, и из-за того, что измененные данные с сервера 2 не должны существовать на сервере 1, я думаю, что это не путь. (Я знаю, что мог бы установить интервал auto_increment равным двум, чтобы избежать этой проблемы, но это уже работающая производственная система, поэтому такие изменения не так просты).
На данный момент мы делаем резервные копии вручную и копируем их, но так медленно, и я уверен, что есть лучший способ;)
Вы можете использовать запись в ведомое устройство репликации (сервер 2) для таких баз данных, как database_2 и database_3, которые никогда не появятся в крике репликации.
Если вы начнете обновлять database_1, у вас, вероятно, возникнут проблемы
Вы выполняете репликацию между двумя серверами баз данных с разницей в основной версии, поэтому существует вероятность, что устаревший оператор SQL будет реплицирован на сервер, на котором он был удален, и репликация будет остановлена. Следите за этим в течение нескольких недель после развертывания. binlog_format = ROW может смягчить некоторые из SQL, которые могли быть получены неправильно.