mysql 8.0.17引入clone plugin,允许从本地或者远程的MySQL中克隆数据克隆的数据包括schema、表、表空间、元数据等等,克隆的数据是一个完整的数据目录,插件可以使用克隆的目录配置和恢复一个MySQL Server,克隆分为本地克隆和远程克隆。
远程克隆:涉及到启动克隆操作的本地MySQL称为recipient(数据接收方),远端的源数据MySQL称为donor(捐赠者)。通过网络传输的方式将donor数据克隆到recipient的指定目录。如果不指定则会将接收方数据目录中的所有数据替换为克隆的数据。
1 主库需要开启GTID
2 安装clone plugin插件
- Master、Slave动态插件安装(重启后丢失)
1
| mysql> INSTALL PLUGIN clone SONAME 'mysql_clone.so';
|
1 2 3 4 5
| [mysqld]
plugin-load-add=mysql_clone.so
clone=FORCE_PLUS_PERMANENT
|
1 2 3 4 5 6
| 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.09 sec)
|
3 Master配置
在主库中操作,创建一个具有BACKUP_ADMIN备份权限的账号
1 2 3
| mysql> create user clone_server@'%' identified by 'clone-server';
mysql> grant backup_admin on *.* to clone_server@'%';
|
Slave配置
以下均在从库中进行
创建具有CLONE_ADMIN权限的账号
1 2 3
| mysql> create user clone_client@'%' identified by 'clone-client';
mysql> grant clone_admin on *_.*_ to clone_client@'%';
|
配置源IP信息(主库IP)
1
| mysql> set global clone_valid_donor_list='mysql-primary:3306' ;
|
流量限制(可选)
1 2
| #最大流量30MB mysql> set global clone_max_data_bandwidth=30;
|
开始远程克隆数据库
1
| mysql> clone instance from clone_server@'mysql-primary':3306 identified by 'clone-server';
|
同步完自动重启
注意提前修改从库的gtid配置,从库也需要以gtid模式起来,不然后面重建slave会报错ERROR 1777 (HY000): CHANGE MASTER TO MASTER_AUTO_POSITION = 1 cannot be executed because @@GLOBAL.GTID_MODE = OFF.
1 2 3 4
| cat >> /etc/my.cnf <<EOF gtid-mode=ON enforce-gtid-consistency=on EOF
|
重建slave
1 2
| mysql> CHANGE MASTER TO MASTER_HOST='mysql-primary', MASTER_USER='replicator', MASTER_PASSWORD='sylink', MASTER_AUTO_POSITION =1; mysql> start slave;
|