Увійти Реєстрація
Блог Серії
Кар'єра
Вакансії Компанії
Навчання
Документація Співбесіди Тестування Відео
Екосистема
Пакети Ресурси Проєкти Інструменти Події
Інше
Про нас Реклама

Як швидко підняти нову репліку MySQL за допомогою clone plugin?

Класичний шлях створення репліки: зняти дамп з джерела, перенести, відновити (години для великої бази), налаштувати реплікацію з позиції з дампу. Багато ручних кроків і великий простір для помилок.

Clone plugin (MySQL 8.0.17+) копіює фізичні файли даних InnoDB з працюючого сервера-донора на сервер-одержувач прямо через протокол MySQL, без зупинки донора.

Підготовка:

-- на обох серверах
INSTALL PLUGIN clone SONAME 'mysql_clone.so';

-- на донорі: користувач для клонування
CREATE USER 'clone_user'@'10.0.0.%' IDENTIFIED BY '...';
GRANT BACKUP_ADMIN ON *.* TO 'clone_user'@'10.0.0.%';

-- на одержувачі: хто клонує і звідки можна
GRANT CLONE_ADMIN ON *.* TO 'admin'@'localhost';
SET GLOBAL clone_valid_donor_list = '10.0.0.10:3306';

Клонування (на одержувачі):

CLONE INSTANCE FROM 'clone_user'@'10.0.0.10':3306 IDENTIFIED BY '...';

Що відбувається:

  1. дані одержувача видаляються - він стає точною копією донора;
  2. файли передаються потоком, паралельно;
  3. зміни, що відбуваються на донорі під час копіювання, теж переносяться - результат узгоджений;
  4. одержувач автоматично перезапускається (якщо ним керує systemd чи інший супервізор).

Прогрес видно в performance_schema.clone_progress, підсумок - у clone_status.

Налаштування реплікації після клонування: клон зберігає координати - позицію бінарного журналу й множину GTID. З GTID досить:

CHANGE REPLICATION SOURCE TO
    SOURCE_HOST = '10.0.0.10', SOURCE_USER = 'repl', SOURCE_PASSWORD = '...',
    SOURCE_AUTO_POSITION = 1;
START REPLICA;

Обмеження:

  • однакова версія донора й одержувача (у межах однієї серії допустимі різні патч-версії), та сама платформа й операційна система;
  • копіюються лише дані InnoDB; таблиці інших рушіїв створюються порожніми;
  • клонування навантажує мережу й диск донора - є налаштування обмеження швидкості (clone_max_data_bandwidth, clone_max_network_bandwidth);
  • конфігураційні файли (my.cnf) не переносяться;
  • DDL на донорі під час клонування за замовчуванням дозволено (clone_block_ddl = OFF), але чи потрапить його результат у клон, залежить від того, чи завершився він до знімка. Для передбачуваності на час клонування схему краще не змінювати.

Також використовується: InnoDB Cluster і Group Replication самі застосовують clone для додавання нового вузла, коли журналів недостатньо, щоб «наздогнати» кластер.

Для бекапу clone теж придатний (клонування в локальний каталог: CLONE LOCAL DATA DIRECTORY = '/backups/2026-10-04'), але без інкрементних бекапів і з тими ж обмеженнями.

Докладніше в документації: Плагін clone

Схожі питання