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

В моей настройке есть два сервера Debian.Первый - это старый производственный сервер, а второй - новый.На первом (старом) запускается db-сервер mysql v5.5 и старое приложение, которое отстает от поддержки.Его нельзя легко перенести на новый сервер.На новом сервере работает mariadb v10.1, а все остальные приложения были перенесены со старого сервера на этот новый.Эти приложения должны работать также с данными приложения, которые не могут быть перенесены.Портированное приложение может обращаться только к локальным базам данных.Поэтому нет простого способа изменить соединение этих приложений со старым сервером БД.

Моя идея: я хочу реплицировать (master-> slave) данные базы данных one (используется старым непереносимым приложением) сервера db mysql v5.5 на db-сервер maraidb v10.1.Пока проблем нет.

Но приложения на новом сервере не только читают данные старого приложения, но и могут их изменять.И у них также есть собственные базы данных, которые существуют только на новом сервере.Насколько я знаю, это проблема, которая может привести к прерыванию репликации в некоторых ситуациях, если приложения будут пытаться выполнять запись в реплицированную базу данных на ведомом устройстве.Следующая мысль, которую я решил решить, заключалась в том, что я могу использовать прокси-сервер sql-посредника и найти несколько интересных (mariadb maxscale, haproxy, proxySQL), но, насколько я понял, они могут разделять операции чтения и записи, но я не смог найтиспособ маршрутизации операций записи для разных баз данных на разные серверы.

Может кто-нибудь дать мне подсказку, чтобы решить эту проблему?

Параметр:

Сервер 1 - Mysql v5.5- database_1

Сервер 2 - Mariadb v10.1 - database_1, database_2, database_3

Приложение на сервере 1 записывает и читает данные из database_1 на сервере 1. Другие приложения на сервере 2 читаюти запись данных в базу данных_1 на сервере 2.

Таким образом, данные базы данных_1 должны быть реплицированы с сервера 1 на сервер 2 и могут быть изменены там.

Репликация мастер-мастер вместо мастера-slave может работать, но из-за полей auto_increment, которые могут нарушить репликацию, и из-за того, чтоизмененные данные с сервера 2 не должны существовать на сервере 1, я думаю, что это не тот путь.(Я знаю, что мог бы установить интервал auto_increment равным двум, чтобы избежать этой проблемы, но это уже работающая производственная система, поэтому такие изменения не так просты).

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

1 Ответ

0 голосов
/ 04 февраля 2019

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

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

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

...