MySQL репликация: как проще всего дважды поменять master и slave местами?
Есть два сервера MariaDB 10.0.21, между которыми настроена обычная Master->Slave репликация.
Оба сервера нужно перевезти в другой город без остановки работы сервиса, поэтому мне необходимо в какой-то момент выключить мастер, перевести пользователей на работу со слейвом, после этого включить мастер в другом месте, заставить его забрать всё свеженькое со слейва, перекинуть сервис обратно, выключить и перевезти слейв, включить его в новом месте и опять таки заставить забрать актуальную информацию с мастера.
Как правильно это сделать, чтобы не пришлось разворачивать репликацию с нуля на каждом этапе?
Начните переезд со слейва.
Слейв переезжает на новое место, включается, догоняет мастера.
Теперь слейв настраиваете как мастер для репликации, мастер подключаете к нему слейвом.
Получаете master-master репликацию.
Только обратите внимание на параметры
на обоих серверах offset должен быть разным. На одном 1, на втором 0 -
Это защитит от дубликата ключей при вставке записей на разных серверах одновременно.
Ну а теперь переключаете клиентов на перевезенный сервер, старый мастер останавливаете и перевозите его. После переезда включаете - он синхронизируется.... Ну и все, я бы так и оставил, в режиме master-master....
Я бы хотел избежать схемы мастер-мастер по нескольким причинам, среди которых активное использование триггеров. Я понимаю, что это не является непреодолимым ограничением, но тем не менее.
И больше всего меня сейчас интересует как правильно сказать мастеру, чтобы он начал реплицироваться со слейва с того места, где он сам в какой-то момент остановился, будучи ещё мастером.
в схеме master-master он сам разберется, с какого места.
Там можно безопасно выключать любой из серверов...
А что не так с триггерами? А то у меня master-master и триггеры и никаких проблем еще не видел ;)