MySQL: простая реплика данных с задержкой на базе rename MySQL

В mysql очень просто реализовать простую реплику с задержкой (например, раз в минуту/пять минут/etc по cron) в таблицу используя двойной rename.

В mysql rename даже на 10 млн записей делается почти мгновенно, причем на время rename база не отдает ложных значений, а ждет отработки rename.
The rename operation is done atomically, which means that no other session can access any of the tables while the rename is running.
В Oracle, например, эта схема не работает т.к. невозможен rename (как и любой другой DDL) в рамках одного запроса сразу двух таблиц.
Используя эту схему можно делать реплику не только локальных/удаленных mysql таблиц, но и любых данных в mysql. К примеру, можно выгружать данные из SQL баз oracle/postgre или noSQL баз типа mongobd в array или ассоциированный array, обновлять временную таблицу данными (через insert или вгружая из файла, в зависимости от нашего метода получения данных) и делать двойной rename для обновления продакшн таблицы. Просто и из коробки!
CREATE TABLE tb_new LIKE tb; --- создаем временную таблицу на базе продакшн
--- заполняем данными созданную временную таблицу, например через Insert из array или вгружаем через файл
RENAME TABLE tb TO tb_old, tb_new TO tb; --- делаем двойной rename (из продакшн в old, из new в продакшн)
DROP TABLE tb_old; --- дропаем old

Leave a Reply

Your email address will not be published. Required fields are marked *