# How to run mysql clone on a server

## 1. Prerequisites

Before you start, ensure both servers meet these requirements:

- **Version:** Both must be MySQL 8.0.17 or higher.
- **Operating System:** Must be the same (e.g., both Linux).
- **Plugins:** The `clone_plugin` must be installed on both.

## 2. Step-by-Step Configuration

### Phase A: Prepare the Donor (Primary)

Log into your **Primary** server and run:

<div _ngcontent-ng-c3152465465="" class="code-block ng-tns-c3152465465-38 ng-animate-disabled ng-trigger ng-trigger-codeBlockRevealAnimation" data-hveid="0" data-ved="0CAAQhtANahcKEwjKievl_ZSUAxUAAAAAHQAAAAAQVA" decode-data-ved="1" id="bkmrk-sql" jslog="223238;track:impression,attention;BardVeMetadataKey:[["r_f3284bc5be0effe3","c_9e4a6d487ea664b9",null,"rc_41181f01d082e820",null,null,"",null,1,null,null,1,0]]"><div _ngcontent-ng-c3152465465="" class="code-block-decoration header-formatted gds-title-s ng-tns-c3152465465-38 ng-star-inserted"><span class="ng-tns-c3152465465-38">SQL</span><div _ngcontent-ng-c3152465465="" class="buttons ng-tns-c3152465465-38 ng-star-inserted"><button aria-label="Download code" class="mdc-icon-button mat-mdc-icon-button mat-mdc-button-base mat-mdc-tooltip-trigger download-button ng-tns-c3152465465-38 mat-unthemed ng-star-inserted"></button><button aria-label="Copy code" class="mdc-icon-button mat-mdc-icon-button mat-mdc-button-base mat-mdc-tooltip-trigger copy-button ng-tns-c3152465465-38 mat-unthemed ng-star-inserted"></button></div></div><div _ngcontent-ng-c3152465465="" class="formatted-code-block-internal-container ng-tns-c3152465465-38"><div _ngcontent-ng-c3152465465="" class="animated-opacity ng-tns-c3152465465-38"></div></div></div>```
-- Install the plugin
INSTALL PLUGIN clone SONAME 'mysql_clone.so';

-- Create a replication user with cloning permissions
CREATE USER 'clone_user'@'%' IDENTIFIED BY 'password';
GRANT BACKUP_ADMIN ON *.* TO 'clone_user'@'%';

```

<div _ngcontent-ng-c3152465465="" class="code-block ng-tns-c3152465465-38 ng-animate-disabled ng-trigger ng-trigger-codeBlockRevealAnimation" data-hveid="0" data-ved="0CAAQhtANahcKEwjKievl_ZSUAxUAAAAAHQAAAAAQVA" decode-data-ved="1" id="bkmrk--1" jslog="223238;track:impression,attention;BardVeMetadataKey:[["r_f3284bc5be0effe3","c_9e4a6d487ea664b9",null,"rc_41181f01d082e820",null,null,"",null,1,null,null,1,0]]"><div _ngcontent-ng-c3152465465="" class="formatted-code-block-internal-container ng-tns-c3152465465-38"><div _ngcontent-ng-c3152465465="" class="animated-opacity ng-tns-c3152465465-38"></div></div></div>### Phase B: Prepare the Recipient (Replica)

Log into your **New Replica** server and run:

<div _ngcontent-ng-c3152465465="" class="code-block ng-tns-c3152465465-39 ng-animate-disabled ng-trigger ng-trigger-codeBlockRevealAnimation" data-hveid="0" data-ved="0CAAQhtANahcKEwjKievl_ZSUAxUAAAAAHQAAAAAQVQ" decode-data-ved="1" id="bkmrk-sql-1" jslog="223238;track:impression,attention;BardVeMetadataKey:[["r_f3284bc5be0effe3","c_9e4a6d487ea664b9",null,"rc_41181f01d082e820",null,null,"",null,1,null,null,1,0]]"><div _ngcontent-ng-c3152465465="" class="code-block-decoration header-formatted gds-title-s ng-tns-c3152465465-39 ng-star-inserted"><span class="ng-tns-c3152465465-39">SQL</span><div _ngcontent-ng-c3152465465="" class="buttons ng-tns-c3152465465-39 ng-star-inserted"><button aria-label="Download code" class="mdc-icon-button mat-mdc-icon-button mat-mdc-button-base mat-mdc-tooltip-trigger download-button ng-tns-c3152465465-39 mat-unthemed ng-star-inserted"></button><button aria-label="Copy code" class="mdc-icon-button mat-mdc-icon-button mat-mdc-button-base mat-mdc-tooltip-trigger copy-button ng-tns-c3152465465-39 mat-unthemed ng-star-inserted"></button></div></div><div _ngcontent-ng-c3152465465="" class="formatted-code-block-internal-container ng-tns-c3152465465-39"><div _ngcontent-ng-c3152465465="" class="animated-opacity ng-tns-c3152465465-39"></div></div></div>```
-- Install the plugin
INSTALL PLUGIN clone SONAME 'mysql_clone.so';

-- Allow the recipient to be overwritten by the donor
SET GLOBAL clone_valid_donor_list = 'primary-ip-address:3306';

```

<div _ngcontent-ng-c3152465465="" class="code-block ng-tns-c3152465465-39 ng-animate-disabled ng-trigger ng-trigger-codeBlockRevealAnimation" data-hveid="0" data-ved="0CAAQhtANahcKEwjKievl_ZSUAxUAAAAAHQAAAAAQVQ" decode-data-ved="1" id="bkmrk--4" jslog="223238;track:impression,attention;BardVeMetadataKey:[["r_f3284bc5be0effe3","c_9e4a6d487ea664b9",null,"rc_41181f01d082e820",null,null,"",null,1,null,null,1,0]]"><div _ngcontent-ng-c3152465465="" class="formatted-code-block-internal-container ng-tns-c3152465465-39"><div _ngcontent-ng-c3152465465="" class="animated-opacity ng-tns-c3152465465-39"></div></div></div>### Phase C: Execute the Clone

On the **Recipient** server, trigger the data transfer. **Warning:** This will delete all existing data on the recipient and restart the MySQL service automatically after completion.

<div _ngcontent-ng-c3152465465="" class="code-block ng-tns-c3152465465-40 ng-animate-disabled ng-trigger ng-trigger-codeBlockRevealAnimation" data-hveid="0" data-ved="0CAAQhtANahcKEwjKievl_ZSUAxUAAAAAHQAAAAAQVg" decode-data-ved="1" id="bkmrk-sql-2" jslog="223238;track:impression,attention;BardVeMetadataKey:[["r_f3284bc5be0effe3","c_9e4a6d487ea664b9",null,"rc_41181f01d082e820",null,null,"",null,1,null,null,1,0]]"><div _ngcontent-ng-c3152465465="" class="code-block-decoration header-formatted gds-title-s ng-tns-c3152465465-40 ng-star-inserted"><span class="ng-tns-c3152465465-40">SQL</span><div _ngcontent-ng-c3152465465="" class="buttons ng-tns-c3152465465-40 ng-star-inserted"><button aria-label="Download code" class="mdc-icon-button mat-mdc-icon-button mat-mdc-button-base mat-mdc-tooltip-trigger download-button ng-tns-c3152465465-40 mat-unthemed ng-star-inserted"></button><button aria-label="Copy code" class="mdc-icon-button mat-mdc-icon-button mat-mdc-button-base mat-mdc-tooltip-trigger copy-button ng-tns-c3152465465-40 mat-unthemed ng-star-inserted"></button></div></div><div _ngcontent-ng-c3152465465="" class="formatted-code-block-internal-container ng-tns-c3152465465-40"><div _ngcontent-ng-c3152465465="" class="animated-opacity ng-tns-c3152465465-40"></div></div></div>```
CLONE INSTANCE FROM 'clone_user'@'primary-ip-address':3306 IDENTIFIED BY 'password';

```

<div _ngcontent-ng-c3152465465="" class="code-block ng-tns-c3152465465-40 ng-animate-disabled ng-trigger ng-trigger-codeBlockRevealAnimation" data-hveid="0" data-ved="0CAAQhtANahcKEwjKievl_ZSUAxUAAAAAHQAAAAAQVg" decode-data-ved="1" id="bkmrk--7" jslog="223238;track:impression,attention;BardVeMetadataKey:[["r_f3284bc5be0effe3","c_9e4a6d487ea664b9",null,"rc_41181f01d082e820",null,null,"",null,1,null,null,1,0]]"><div _ngcontent-ng-c3152465465="" class="formatted-code-block-internal-container ng-tns-c3152465465-40"><div _ngcontent-ng-c3152465465="" class="animated-opacity ng-tns-c3152465465-40"></div></div></div>---

## 3. Completing the Replication

The beauty of the Clone plugin is that it automatically captures the **Binary Log** coordinates (GTID or filename/position) during the transfer.

Once the recipient restarts, log back in and check the status:

<div _ngcontent-ng-c3152465465="" class="code-block ng-tns-c3152465465-41 ng-animate-disabled ng-trigger ng-trigger-codeBlockRevealAnimation" data-hveid="0" data-ved="0CAAQhtANahcKEwjKievl_ZSUAxUAAAAAHQAAAAAQVw" decode-data-ved="1" id="bkmrk-sql-3" jslog="223238;track:impression,attention;BardVeMetadataKey:[["r_f3284bc5be0effe3","c_9e4a6d487ea664b9",null,"rc_41181f01d082e820",null,null,"",null,1,null,null,1,0]]"><div _ngcontent-ng-c3152465465="" class="code-block-decoration header-formatted gds-title-s ng-tns-c3152465465-41 ng-star-inserted"><span class="ng-tns-c3152465465-41">SQL</span><div _ngcontent-ng-c3152465465="" class="buttons ng-tns-c3152465465-41 ng-star-inserted"><button aria-label="Download code" class="mdc-icon-button mat-mdc-icon-button mat-mdc-button-base mat-mdc-tooltip-trigger download-button ng-tns-c3152465465-41 mat-unthemed ng-star-inserted"></button><button aria-label="Copy code" class="mdc-icon-button mat-mdc-icon-button mat-mdc-button-base mat-mdc-tooltip-trigger copy-button ng-tns-c3152465465-41 mat-unthemed ng-star-inserted"></button></div></div><div _ngcontent-ng-c3152465465="" class="formatted-code-block-internal-container ng-tns-c3152465465-41"><div _ngcontent-ng-c3152465465="" class="animated-opacity ng-tns-c3152465465-41"></div></div></div>```
SELECT BINLOG_FILE, BINLOG_POS FROM performance_schema.clone_status;

```

<div _ngcontent-ng-c3152465465="" class="code-block ng-tns-c3152465465-41 ng-animate-disabled ng-trigger ng-trigger-codeBlockRevealAnimation" data-hveid="0" data-ved="0CAAQhtANahcKEwjKievl_ZSUAxUAAAAAHQAAAAAQVw" decode-data-ved="1" id="bkmrk--11" jslog="223238;track:impression,attention;BardVeMetadataKey:[["r_f3284bc5be0effe3","c_9e4a6d487ea664b9",null,"rc_41181f01d082e820",null,null,"",null,1,null,null,1,0]]"><div _ngcontent-ng-c3152465465="" class="formatted-code-block-internal-container ng-tns-c3152465465-41"><div _ngcontent-ng-c3152465465="" class="animated-opacity ng-tns-c3152465465-41"></div></div></div>### Option 1: If using GTIDs (Recommended)

If your primary uses GTIDs, replication might start automatically or simply require:

<div _ngcontent-ng-c3152465465="" class="code-block ng-tns-c3152465465-42 ng-animate-disabled ng-trigger ng-trigger-codeBlockRevealAnimation" data-hveid="0" data-ved="0CAAQhtANahcKEwjKievl_ZSUAxUAAAAAHQAAAAAQWA" decode-data-ved="1" id="bkmrk-sql-4" jslog="223238;track:impression,attention;BardVeMetadataKey:[["r_f3284bc5be0effe3","c_9e4a6d487ea664b9",null,"rc_41181f01d082e820",null,null,"",null,1,null,null,1,0]]"><div _ngcontent-ng-c3152465465="" class="code-block-decoration header-formatted gds-title-s ng-tns-c3152465465-42 ng-star-inserted"><span class="ng-tns-c3152465465-42">SQL</span><div _ngcontent-ng-c3152465465="" class="buttons ng-tns-c3152465465-42 ng-star-inserted"><button aria-label="Download code" class="mdc-icon-button mat-mdc-icon-button mat-mdc-button-base mat-mdc-tooltip-trigger download-button ng-tns-c3152465465-42 mat-unthemed ng-star-inserted"></button><button aria-label="Copy code" class="mdc-icon-button mat-mdc-icon-button mat-mdc-button-base mat-mdc-tooltip-trigger copy-button ng-tns-c3152465465-42 mat-unthemed ng-star-inserted"></button></div></div><div _ngcontent-ng-c3152465465="" class="formatted-code-block-internal-container ng-tns-c3152465465-42"><div _ngcontent-ng-c3152465465="" class="animated-opacity ng-tns-c3152465465-42"></div></div></div>```
CHANGE REPLICATION SOURCE TO 
    SOURCE_HOST='primary-ip-address', 
    SOURCE_USER='repl_user', 
    SOURCE_PASSWORD='password', 
    SOURCE_AUTO_POSITION=1;
START REPLICA;

```

<div _ngcontent-ng-c3152465465="" class="code-block ng-tns-c3152465465-42 ng-animate-disabled ng-trigger ng-trigger-codeBlockRevealAnimation" data-hveid="0" data-ved="0CAAQhtANahcKEwjKievl_ZSUAxUAAAAAHQAAAAAQWA" decode-data-ved="1" id="bkmrk--14" jslog="223238;track:impression,attention;BardVeMetadataKey:[["r_f3284bc5be0effe3","c_9e4a6d487ea664b9",null,"rc_41181f01d082e820",null,null,"",null,1,null,null,1,0]]"><div _ngcontent-ng-c3152465465="" class="formatted-code-block-internal-container ng-tns-c3152465465-42"><div _ngcontent-ng-c3152465465="" class="animated-opacity ng-tns-c3152465465-42"></div></div></div>### Option 2: If using Binary Log Position

<div _ngcontent-ng-c3152465465="" class="code-block ng-tns-c3152465465-43 ng-animate-disabled ng-trigger ng-trigger-codeBlockRevealAnimation" data-hveid="0" data-ved="0CAAQhtANahcKEwjKievl_ZSUAxUAAAAAHQAAAAAQWQ" decode-data-ved="1" id="bkmrk-sql-5" jslog="223238;track:impression,attention;BardVeMetadataKey:[["r_f3284bc5be0effe3","c_9e4a6d487ea664b9",null,"rc_41181f01d082e820",null,null,"",null,1,null,null,1,0]]"><div _ngcontent-ng-c3152465465="" class="code-block-decoration header-formatted gds-title-s ng-tns-c3152465465-43 ng-star-inserted"><span class="ng-tns-c3152465465-43">SQL</span><div _ngcontent-ng-c3152465465="" class="buttons ng-tns-c3152465465-43 ng-star-inserted"><button aria-label="Download code" class="mdc-icon-button mat-mdc-icon-button mat-mdc-button-base mat-mdc-tooltip-trigger download-button ng-tns-c3152465465-43 mat-unthemed ng-star-inserted"></button><button aria-label="Copy code" class="mdc-icon-button mat-mdc-icon-button mat-mdc-button-base mat-mdc-tooltip-trigger copy-button ng-tns-c3152465465-43 mat-unthemed ng-star-inserted"></button></div></div><div _ngcontent-ng-c3152465465="" class="formatted-code-block-internal-container ng-tns-c3152465465-43"><div _ngcontent-ng-c3152465465="" class="animated-opacity ng-tns-c3152465465-43"></div></div></div>```
-- Use the coordinates found in performance_schema.clone_status
CHANGE REPLICATION SOURCE TO 
    SOURCE_HOST='primary-ip-address', 
    SOURCE_USER='repl_user', 
    SOURCE_PASSWORD='password', 
    SOURCE_LOG_FILE='binlog.00000X', 
    SOURCE_LOG_POS=123;
START REPLICA;
```