Репликация в одной базе данных mysql / mariadb только для чтения-записи-разделения для этой единственной базы данных

0

В моей настройке есть два сервера 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 равным двум, чтобы избежать этой проблемы, но это уже работающая производственная система, поэтому такие изменения не так просты).

На данный момент мы делаем резервные копии вручную и копируем их, но так медленно, и я уверен, что есть лучший способ;)

Теги:
mariadb
database-replication

1 ответ

0

Вы можете использовать запись в ведомое устройство репликации (сервер 2) для таких баз данных, как database_2 и database_3, которые никогда не появятся в крике репликации.

Если вы начнете обновлять database_1, у вас, вероятно, возникнут проблемы

Вы выполняете репликацию между двумя серверами баз данных с разницей в основной версии, поэтому существует вероятность, что устаревший оператор SQL будет реплицирован на сервер, на котором он был удален, и репликация будет остановлена. Следите за этим в течение нескольких недель после развертывания. binlog_format = ROW может смягчить некоторые из SQL, которые могли быть получены неправильно.

  • 0
    Хорошо. Это то, о чем я думал. Но нет такого распространенного «взлома», как: «реплицируйте базу данных и используйте триггер, чтобы заполнить другую базу данных теми же данными. Запись только в базу данных, которая обновляется с помощью триггеров, и никогда не трогайте / записывайте в реплицированную базу данных». И: Нет никакого способа использовать разделение чтения-записи-разделения только для одной базы данных на одном сервере, но сохранить другие базы данных того же сервера без изменений? Если бы это было возможно, не было бы никаких проблем. Но я не смог найти никакой информации, если это возможно.
  • 0
    Есть фильтры репликации, которые делают много из них. Однако внимательно прочитайте документацию по ним.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню