DBAtlas · Atlas d'exploitation des bases de données

Reconstruire une réplique de zéro avec le plugin CLONE

MySQLRéplication

Commande

-- Donor (healthy replica or source)
INSTALL PLUGIN clone SONAME 'mysql_clone.so';
CREATE USER 'clone_donor'@'%' IDENTIFIED BY 'Cl0ne#Donor';
GRANT BACKUP_ADMIN ON *.* TO 'clone_donor'@'%';

-- Recipient (replica to rebuild; its data is replaced)
INSTALL PLUGIN clone SONAME 'mysql_clone.so';
SET GLOBAL clone_valid_donor_list = 'db1:3306';
CLONE INSTANCE FROM 'clone_donor'@'db1':3306 IDENTIFIED BY 'Cl0ne#Donor';

-- After the restart: verify and start replication
SELECT STATE, ERROR_NO, BINLOG_FILE, BINLOG_POSITION, GTID_EXECUTED FROM performance_schema.clone_status;
SELECT STAGE, STATE, ROUND(DATA / 1024 / 1024) AS data_mb FROM performance_schema.clone_progress;
CHANGE REPLICATION SOURCE TO SOURCE_HOST = 'db1', SOURCE_PORT = 3306, SOURCE_USER = 'repl', SOURCE_PASSWORD = 'Repl#2024', SOURCE_AUTO_POSITION = 1, SOURCE_SSL = 1;
START REPLICA;

Ce que fait la commande

Copie physiquement les données InnoDB du donneur par le réseau, redémarre le receveur et reporte l'état GTID ; produit une réplique cohérente sans étapes séparées de sauvegarde, transfert et restauration.

Quand l'utiliser

Pour reconstruire une réplique corrompue, une réplique avec des errant GTIDs ou si en retard que ses binlogs ont été purgés, ou pour ajouter une nouvelle réplique.

Attention

Toutes les données du receveur (utilisateurs compris) sont remplacées par la copie du donneur ; le mot de passe root devient celui du donneur. Donneur et receveur doivent avoir la même série de versions, la même plateforme et le même ensemble de plugins (avant 8.0.37, exactement la même version corrective était requise). L'utilisateur du receveur qui exécute la commande a besoin de CLONE_ADMIN. À la fin du clonage, mysqld redémarre de lui-même ; sans superviseur comme systemd / mysqld_safe, il renvoie 3707 'Restart server failed (mysqld is not managed by supervisor process)'. Ce n'est pas un échec : le clonage est terminé, démarrez le serveur manuellement. Le donneur subit une forte charge d'E/S / réseau ; plafonnez-la avec clone_max_concurrency et clone_max_data_bandwidth. Avec GTID désactivé, utilisez BINLOG_FILE / BINLOG_POSITION de clone_status comme SOURCE_LOG_FILE / SOURCE_LOG_POS.

Ouvrir dans DBAtlas →

Voir aussi