Introdução
Em alguns cenários do dia a dia de um DBA, precisamos criar uma nova instância MySQL a partir de uma existente. Dependendo do tamanho do ambiente, esse processo pode levar bastante tempo e exigir algumas etapas adicionais.
Pensando nisso, neste artigo vou demonstrar uma prática utilizando o MySQL Clone Plugin, recurso introduzido a partir do MySQL 8.0.17, O Clone Plugin não permite realizar a clonagem entre séries diferentes do MySQL. Por exemplo, não podemos clonar uma instância MySQL 8.0 para 8.4, é possivel a clonagem pode ser realizada dentro da mesma série. Por exemplo, entre versões como MySQL 8.0.35 e 8.0.45 (exemplo).
Por isso, antes de iniciar o processo, vale sempre conferir a versão do MySQL nos dois servidores e garantir que estejam na mesma série. Isso evita problemas de compatibilidade durante a clonagem.
O Clone Plugin permite realizar a cópia física de uma instância MySQL, inclusive através da rede, transferindo os dados de um servidor para outro.
A ideia aqui é mostrar, de forma prática, como podemos utilizar esse recurso para clonar uma instância MySQL de um servidor de origem para um servidor de destino.
Ambiente utilizado
Para essa demonstração, utilizei dois servidores Linux, ambos com o MySQL 8.0.45 instalado.
Vou utilizar os seguintes papéis:
- Donor: servidor de origem, que possui os dados. ( 192.168.18.121:3306 Oracle Linux 7 )
- Recipient: servidor de destino, que receberá a cópia da instância. ( 192.168.18.122:3306 Oracle Linux 10 )
Os servidores também precisam ter comunicação de rede entre si, já que os dados serão transferidos diretamente pela rede.
Pré-requisitos
Antes de iniciar a clonagem, precisamos validar alguns pontos básicos.
1. Comunicação entre os servidores
Primeiro, precisamos garantir que o servidor donor consiga se comunicar com o recipient.
|
1 2 3 4 5 6 |
[root@ol10lab ~]# telnet 192.168.18.121 3306 Trying 192.168.18.121... Connected to 192.168.18.121. Escape character is '^]'. J h[47U@caching_sha2_password |
Essa validação é importante porque todo o processo de transferência dos dados será realizado através da rede.
2. Mesma versão do MySQL
Neste laboratório, eu mantive os dois servidores ( donor / recipient ) na mesma versão do MySQL, estão utilizando:
|
1 |
mysql Ver 8.0.45 for Linux on x86_64 (MySQL Community Server - GPL)MySQL 8.0.45 |
3. Instalação do Clone Plugin
O Clone Plugin precisa estar instalado tanto no donor quanto no recipient.
Depois da instalação, podemos verificar se o plugin está realmente carregado na instância.
Validação importante para o funcionamento do processo de clone.
|
1 2 3 4 5 6 7 8 9 10 11 12 |
mysql> INSTALL PLUGIN clone SONAME 'mysql_clone.so'; Query OK, 0 rows affected (0.01 sec) mysql> SELECT PLUGIN_NAME, PLUGIN_STATUS FROM INFORMATION_SCHEMA.PLUGINS WHERE PLUGIN_NAME = 'clone'; +-------------+---------------+ | PLUGIN_NAME | PLUGIN_STATUS | +-------------+---------------+ | clone | ACTIVE | +-------------+---------------+ 1 row in set (0.00 sec) mysql> |
Criando o usuário no Donor
Como o donor será a nossa fonte de dados, precisamos criar um usuário que possa realizar a operação de clonagem.
Para isso, utilizamos um usuário específico para o processo e concedemos a ele o privilégio necessário para realizar o backup durante a clonagem.
Um exemplo seria:
|
1 2 3 4 5 |
mysql> CREATE USER 'clone_user'@'192.168.18.122' IDENTIFIED BY 'Mysql80Clone'; Query OK, 0 rows affected (0.02 sec) mysql> GRANT BACKUP_ADMIN ON *.* TO 'clone_user'@'192.168.18.122'; Query OK, 0 rows affected (0.02 sec) |
Depois podemos conferir os privilégios atribuídos ao usuário:
|
1 2 3 4 5 6 |
mysql> show grants for 'clone_user'@'192.168.18.122'\G *************************** 1. row *************************** Grants for clone_user@192.168.18.122: GRANT USAGE ON *.* TO `clone_user`@`192.168.18.122` *************************** 2. row *************************** Grants for clone_user@192.168.18.122: GRANT BACKUP_ADMIN ON *.* TO `clone_user`@`192.168.18.122` 2 rows in set (0.01 sec) |
Usuário preparado para que o recipient consiga utilizar o donor como origem da clonagem.
Executando a clonagem
Com os pré-requisitos atendidos, chegamos à parte mais interessante da demonstração.
No servidor recipient, executamos o comando de clone apontando para o servidor donor.
|
1 2 |
SET @@GLOBAL.CLONE_VALID_DONOR_LIST='192.168.18.121:3306'; CLONE INSTANCE FROM 'clone_user'@'192.168.18.121':3306 IDENTIFIED BY 'Mysql80Clone' |
Nesse momento, o MySQL inicia o processo de clonagem, os dados existentes no donor são transferidos para o recipient. (databases demo : sakila e employees );
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 |
mysql> show databases; +--------------------+ | Database | +--------------------+ | information_schema | | mysql | | performance_schema | | sys | +--------------------+ 4 rows in set (0.00 sec) mysql> set @@global.clone_valid_donor_list='192.168.18.121:3306'; Query OK, 0 rows affected (0.00 sec) mysql> CLONE INSTANCE FROM 'clone_user'@'192.168.18.121':3306 IDENTIFIED BY 'Mysql80Clone'; Query OK, 0 rows affected (1 min 19.22 sec) mysql> mysql> show databases; ERROR 2013 (HY000): Lost connection to MySQL server during query No connection. Trying to reconnect... Connection id: 11 Current database: *** NONE *** +--------------------+ | Database | +--------------------+ | employees | | information_schema | | mysql | | performance_schema | | sakila | | sys | +--------------------+ 6 rows in set (0.01 sec) mysql> |
Uma das coisas que considero interessantes nesse recurso é justamente a simplicidade do processo. Depois de toda a preparação inicial, o comando de clonagem é bastante direto.
Acompanhando o processo
Durante a execução, podemos acompanhar o processo através das informações disponibilizadas pelo próprio MySQL, é possível consultar as tabelas relacionadas ao Clone Plugin para verificar o andamento e o resultado da operação.
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
mysql> SELECT STAGE, STATE, END_TIME FROM performance_schema.clone_progress; +-----------+-----------+----------------------------+ | STAGE | STATE | END_TIME | +-----------+-----------+----------------------------+ | DROP DATA | Completed | 2026-08-28 18:06:22.094663 | | FILE COPY | Completed | 2026-08-28 18:07:39.539338 | | PAGE COPY | Completed | 2026-08-28 18:07:39.777277 | | REDO COPY | Completed | 2026-08-28 18:07:40.318242 | | FILE SYNC | Completed | 2026-08-28 18:07:40.706090 | | RESTART | Completed | 2026-08-28 18:07:45.203586 | | RECOVERY | Completed | 2026-08-28 18:07:46.664954 | +-----------+-----------+----------------------------+ 7 rows in set (0.00 sec) mysql> select binlog_file,binlog_position from performance_schema.clone_status; +----------------+-----------------+ | binlog_file | binlog_position | +----------------+-----------------+ | binlogs.000004 | 922 | +----------------+-----------------+ 1 row in set (0.01 sec) |
Validando o resultado
Depois que o processo termina, precisamos validar se a clonagem realmente foi concluída com sucesso.
Uma das primeiras coisas que podemos fazer é verificar novamente as informações relacionadas ao processo de clone.
Além disso, podemos acessar o recipient e verificar os bancos existentes:
|
1 2 3 4 5 6 7 8 9 10 11 12 |
mysql> show databases; +--------------------+ | Database | +--------------------+ | employees | | information_schema | | mysql | | performance_schema | | sakila | | sys | +--------------------+ 6 rows in set (0.00 sec) |
Depois podemos consultar algumas tabelas e registros para confirmar que os dados que estavam no donor também estão disponíveis no recipient.
Resultado
Depois de realizar o processo e validar os dados, temos no recipient uma cópia física da instância que estava no donor.
Na prática, o Clone Plugin facilita bastante esse tipo de operação.
Em vez de realizar todo o processo tradicional de exportação e importação dos dados, temos um mecanismo nativo do MySQL para realizar a clonagem física de uma instância.
Conclusão
Essa foi uma demonstração simples do MySQL Clone Plugin, mas que mostra bem o potencial desse recurso.
Para mim, uma das principais vantagens é a simplicidade. Depois que os pré-requisitos estão configurados, o processo de clonagem é bastante direto.
É um recurso que pode ser muito útil em diferentes situações, como provisionamento de novos servidores, criação de ambientes de teste, preparação de ambientes para determinadas atividades de DBA e outras situações em que precisamos rapidamente de uma cópia de uma instância MySQL.
O mais interessante é poder fazer isso utilizando um recurso nativo do próprio MySQL.






