MySQL 8.0.27 Clone Plugin实战详解

简介说明

官方文档:https://dev.mysql.com/doc/refman/8.0/en/clone-plugin.html

MySQL 是在 8.0.17+后,加入了克隆插件(Clone Plugin)功能

克隆插件允许在本地或从远程 MySQL 实例克隆数据。克隆数据是存储在 Innodb 其中的数据的物理快照,其中包含库、表、表空间数据字典元数据。克隆的数据包含一个功能齐全的数据目录,允许克隆插件进行 MySQL 服务器配置。

注意:Clone Plugin 只能备份 Innodb 存储引擎表,其它类型表不进行备份

克隆插件支持方式原理说明

本地克隆

本地克隆操作将启动克隆操作的 MySQL 服务器实例中的数据克隆到同服务器或同节点上的一个目录里 原理如下图: image

远程克隆

默认情况下,远程克隆操作会删除 接受者(Recipient) 数据目录中的数据,并将其替换为 捐赠者(donor) 的克隆数据。或者也可以将数据克隆到 接受者的其它目录,以免删除现有数据。 原理如下图:

远程克隆操作和本地操作克隆的数据没有区别,数据是相同的。

克隆插件支持复制除了克隆数据外,还可以从捐赠者 中提取并传输复制位置信息,并将其应用于 接受者,从而可以使用克隆插件来配置组服务器或主从复制。使用克隆查看进行配置比复制大量事务要快得多,效率更高。

XtraBackup 和 Clone Plugin 备份过程区别

XtraBackup 物理备份过程

file

上图可以看出 XtraBackup 物理备份过程用时 30分钟,经历了 4个过程:

  • 重做日志文件拷贝
  • Innodb 文件拷贝
  • 保存二进制日志点位(通过加FTWRL全局锁)
  • 拷贝其他非 Innodb 文件

注意:XtraBackup 的备份过程中 redo copy 这个操作是持续整个备份周期的,即 redo copy 进行了整整 30 分钟,若通过备份文件进行恢复,恢复到的时间点是 15:30。

Clone Plugin 物理备份

file

上图可以看出,Clone Plugin 的 redo copy 过程非常短,不需要备份 30分钟内所产生的 所有 redo log,这代表着通过 Clone Plugin 恢复物理备份的速度要远远快于 XtraBackup

在 redo copy 前有一个 page copy,这个 XtraBackup 没有的步骤。也就是说在备份完 Innodb 磁盘文件后,Clone Plugin 还会对 Buffer Pool 中的脏页进行备份,这样可以减少对于 redo 日志的拷贝。

脏页的备份会先对(space,page_nubmer) 排序,以比较顺序的方式写入备份文件。 同时,为了记录在拷贝脏页过程中,又有新的变化产生,所以在 file copy后启用 page tracking 的机制,记录当前已经 checkpoint 完成的 LSN号。

后续的 redo copy 只需要拷贝该 LSN 之后的重做日志即可。

对比 XtraBackup,Clone Plugin 额外实现如下功能:

  • page copy: 拷贝脏页,减少重做日志的被分量,提升恢复速度;
  • page tracking: 记录 LSN 的变化,用于后续重做日志的备份;
  • redo archiving: 备份重做日志,避免重做日志文件写入太快,覆盖写入无法备份的场景。
  • Clone Plugin 支持远程备份,XtraBackup 只能本地备份。

实战示例说明

基础配置

安装克隆插件 文档:https://dev.mysql.com/doc/refman/8.0/en/clone-plugin-installation.html

启动前

$ vim /etc/my.cnf
[mysqld]
#Clone Plugin
plugin-load-add=mysql_clone.so

运行中加载

mysql> install plugin clone soname 'mysql_clone.so';
# 这种方法是注册到元数据,MySQL实例重启,插件也会加载生效

检查 Clone Plugin 是否启用

mysql> select plugin_name,plugin_status from information_schema.plugins where plugin_name ='clone';
+-------------+---------------+
 plugin_name  plugin_status 
+-------------+---------------+
 clone        ACTIVE        
+-------------+---------------+
mysql> show plugins;  
# 两种方法都可以查看插件是否启用

设置强制启动失败参数

[mysqld]
plugin-load-add=mysql_clone.so
clone=FORCE_PLUS_PERMANENT

说明:如果克隆插件对应用场景非常重要,可以设置参数clone=FORCE_PLUS_PERMANENT 或者 clone=FORCE,作用是如果插件未成功初始化,就会强制mysqld 启动失败

需要的权限

需要有备份锁的权限,备份锁是 MySQL 8.0 的新特性之一,比5.7版本的 FTWRL 锁要轻量。

mysql> create user clone_user@'%' identified by '1234';
mysql> grant backup_admin on *.* to 'clone_user'@'%';
mysql> show grants for clone_user@'%';
+-----------------------------------------------+
 Grants for clone_user@%                       
+-----------------------------------------------+
 GRANT USAGE ON *.* TO `clone_user`@`%`        
 GRANT BACKUP_ADMIN ON *.* TO `clone_user`@`%` 
+-----------------------------------------------+
2 rows in set (0.00 sec)
# BACKUP_ADMIN 是MySQL8.0 才有的备份锁权限

本地克隆

文档:https://dev.mysql.com/doc/refman/8.0/en/clone-plugin-local.html

执行本地克隆

$ mysql -uclone_user -p1234
mysql> clone local data directory = '/tmp/backup/';
# clone 数据到本地的备份目录不能存在,必须使用绝对路径
# 备份目录的上级目录,需要MySQL运行用户有写入权限

$ ll /tmp/backup/ -l   # 查看clone 完成的数据
total 184352
drwxr-x--- 2 mysql mysql     4096 Nov 21 13:58 #clone
-rw-r----- 1 mysql mysql     4432 Nov 21 13:58 ib_buffer_pool
-rw-r----- 1 mysql mysql 12582912 Nov 21 13:58 ibdata1
-rw-r----- 1 mysql mysql 50331648 Nov 21 13:58 ib_logfile0
-rw-r----- 1 mysql mysql 50331648 Nov 21 13:58 ib_logfile1
drwxr-x--- 2 mysql mysql     4096 Nov 21 13:58 mysql
-rw-r----- 1 mysql mysql 25165824 Nov 21 13:58 mysql.ibd
drwxr-x--- 2 mysql mysql     4096 Nov 21 13:58 qiqios
drwxr-x--- 2 mysql mysql     4096 Nov 21 13:58 sys
drwxr-x--- 2 mysql mysql     4096 Nov 21 13:58 test_binlog
-rw-r----- 1 mysql mysql 33554432 Nov 21 13:58 undo_001
-rw-r----- 1 mysql mysql 16777216 Nov 21 13:58 undo_002
drwxr-x--- 2 mysql mysql     4096 Nov 21 13:58 world

本地克隆的步骤如下:

  • DROP DATA
  • FLIE COPY
  • PAGE COPY
  • REDP COPY
  • FLIE SYNC

观察方法如下:

# 方法一
mysql> select STATE,STAGE,END_TIME from performance_schema.clone_progress;
+-------------+-----------+----------------------------+
 STATE        STAGE      END_TIME                   
+-------------+-----------+----------------------------+
 Completed    DROP DATA  2021-11-21 13:58:44.672970 
 Completed    FILE COPY  2021-11-21 13:58:45.220898 
 Completed    PAGE COPY  2021-11-21 13:58:45.230829 
 Completed    REDO COPY  2021-11-21 13:58:45.232598 
 Completed    FILE SYNC  2021-11-21 13:58:46.150738 
 Not Started  RESTART    NULL                       
 Not Started  RECOVERY   NULL                       
+-------------+-----------+----------------------------+

# 方法二
mysql> set global log_error_verbosity=3;  # 这个参数是记录错误日志的消息级别,3 代表记录error、warning、information

$ tail -f  /var/log/mysql/mysqlerr.log 
2021-11-21T13:52:51.101975+08:00 81 [Warning] [MY-013360] [Server] Plugin sha256_password reported: ''sha256_password' is deprecated and will be removed in a future release. Please use caching_sha2_password instead'
2021-11-21T14:04:29.571891+08:00 82 [Note] [MY-013457] [InnoDB] Clone Begin Master Task by clone_user@localhost
2021-11-21T14:04:29.571954+08:00 82 [Note] [MY-013457] [InnoDB] Clone Apply Master Loop Back
2021-11-21T14:04:29.571975+08:00 82 [Note] [MY-013457] [InnoDB] Clone Apply Begin Master Task
2021-11-21T14:04:29.572097+08:00 82 [Note] [MY-013458] [InnoDB] Clone set state change ACK: 1
2021-11-21T14:04:29.572115+08:00 82 [Note] [MY-013458] [InnoDB] Clone Master received state change ACK
2021-11-21T14:04:29.572130+08:00 82 [Note] [MY-013458] [InnoDB] Clone State Change : Number of tasks = 1
2021-11-21T14:04:29.572142+08:00 82 [Note] [MY-013458] [InnoDB] Clone State BEGIN FILE COPY
2021-11-21T14:04:29.572180+08:00 82 [Note] [MY-011845] [InnoDB] Clone Start PAGE ARCH : start LSN : 316643501, checkpoint LSN : 316643501
2021-11-21T14:04:29.572240+08:00 82 [Note] [MY-013458] [InnoDB] Clone State FILE COPY : 11 chunks,  chunk size : 64 M
2021-11-21T14:04:29.572416+08:00 82 [Note] [MY-013458] [InnoDB] Clone Apply State Change : Number of tasks = 1
2021-11-21T14:04:29.572431+08:00 82 [Note] [MY-013458] [InnoDB] Clone Apply State FILE COPY: 
2021-11-21T14:04:29.572461+08:00 82 [Note] [MY-011978] [InnoDB] Clone estimated size: 181.25 MiB Available space: 30.58 GiB
2021-11-21T14:04:29.581403+08:00 82 [Note] [MY-013458] [InnoDB] Stage progress: 27% completed.
2021-11-21T14:04:29.582182+08:00 82 [Note] [MY-013458] [InnoDB] Stage progress: 54% completed.
2021-11-21T14:04:29.601855+08:00 82 [Note] [MY-013458] [InnoDB] Stage progress: 81% completed.
2021-11-21T14:04:29.852086+08:00 82 [Note] [MY-013272] [Clone] Plugin Clone reported: 'Client: Total Data: 85 MiB @ 304 MiB/sec, Network: 0 MiB @ 0 MiB/sec.'
2021-11-21T14:04:29.852139+08:00 82 [Note] [MY-013458] [InnoDB] Clone set state change ACK: 2
2021-11-21T14:04:29.852153+08:00 82 [Note] [MY-013458] [InnoDB] Clone Master received state change ACK
2021-11-21T14:04:29.852164+08:00 82 [Note] [MY-013458] [InnoDB] Clone State Change : Number of tasks = 1
2021-11-21T14:04:29.852172+08:00 82 [Note] [MY-013458] [InnoDB] Clone State BEGIN PAGE COPY
2021-11-21T14:04:29.852196+08:00 82 [Note] [MY-011840] [InnoDB] Clone Start LOG ARCH : start LSN : 316643501
2021-11-21T14:04:29.852211+08:00 82 [Note] [MY-011846] [InnoDB] Clone Stop  PAGE ARCH : end   LSN : 316643501, log sys LSN : 316643501
2021-11-21T14:04:29.852220+08:00 82 [Note] [MY-013458] [InnoDB] Clone State PAGE COPY : 0 pages, 0 duplicate pages, 0 chunks,  chunk size : 64 M
2021-11-21T14:04:29.853567+08:00 82 [Note] [MY-013458] [InnoDB] Clone Apply State Change : Number of tasks = 1
2021-11-21T14:04:29.853597+08:00 82 [Note] [MY-013458] [InnoDB] Clone Apply State PAGE COPY: 
2021-11-21T14:04:29.853618+08:00 82 [Note] [MY-013272] [Clone] Plugin Clone reported: 'Client: Total Data: 85 MiB @ 303 MiB/sec, Network: 0 MiB @ 0 MiB/sec.'
2021-11-21T14:04:29.853629+08:00 82 [Note] [MY-013458] [InnoDB] Clone set state change ACK: 3
2021-11-21T14:04:29.853639+08:00 82 [Note] [MY-013458] [InnoDB] Clone Master received state change ACK
2021-11-21T14:04:29.853648+08:00 82 [Note] [MY-013458] [InnoDB] Clone State Change : Number of tasks = 1
2021-11-21T14:04:29.853655+08:00 82 [Note] [MY-013458] [InnoDB] Clone State BEGIN REDO COPY
2021-11-21T14:04:29.854764+08:00 82 [Note] [MY-011841] [InnoDB] Clone Stop  LOG ARCH : end LSN : 316643508
2021-11-21T14:04:29.856104+08:00 82 [Note] [MY-013458] [InnoDB] Clone State REDO COPY : 3 chunks,  chunk size : 64 M
2021-11-21T14:04:29.857210+08:00 82 [Note] [MY-013458] [InnoDB] Clone Apply State Change : Number of tasks = 1
2021-11-21T14:04:29.857235+08:00 82 [Note] [MY-013458] [InnoDB] Clone Apply State REDO COPY: 
2021-11-21T14:04:29.857472+08:00 82 [Note] [MY-013458] [InnoDB] Stage progress: 33% completed.
2021-11-21T14:04:29.857530+08:00 82 [Note] [MY-013458] [InnoDB] Stage progress: 66% completed.
2021-11-21T14:04:29.857549+08:00 82 [Note] [MY-013458] [InnoDB] Stage progress: 100% completed.
2021-11-21T14:04:29.857562+08:00 82 [Note] [MY-013272] [Clone] Plugin Clone reported: 'Client: Total Data: 85 MiB @ 299 MiB/sec, Network: 0 MiB @ 0 MiB/sec.'
2021-11-21T14:04:29.857573+08:00 82 [Note] [MY-013458] [InnoDB] Clone set state change ACK: 4
2021-11-21T14:04:29.857581+08:00 82 [Note] [MY-013458] [InnoDB] Clone Master received state change ACK
2021-11-21T14:04:29.857590+08:00 82 [Note] [MY-013458] [InnoDB] Clone State Change : Number of tasks = 1
2021-11-21T14:04:29.857597+08:00 82 [Note] [MY-013458] [InnoDB] Clone State DONE 
2021-11-21T14:04:29.862484+08:00 82 [Note] [MY-013458] [InnoDB] Clone Apply State Change : Number of tasks = 1
2021-11-21T14:04:29.862509+08:00 82 [Note] [MY-013458] [InnoDB] Clone Apply State FLUSH DATA: 
2021-11-21T14:04:30.238972+08:00 82 [Note] [MY-013458] [InnoDB] Clone Apply State FLUSH REDO: 
2021-11-21T14:04:30.793835+08:00 82 [Note] [MY-013458] [InnoDB] Clone Apply State DONE
2021-11-21T14:04:30.793980+08:00 82 [Note] [MY-013457] [InnoDB] Clone Apply End Master Task ID: 0 Passed, code: 0: 
2021-11-21T14:04:30.794005+08:00 82 [Note] [MY-013457] [InnoDB] Clone End Master Task ID: 0 Passed, code: 0: 

使用备份目录直接启动一个克隆实例

$ /opt/mysql/bin/mysqld --datadir=/tmp/backup --port=3303 --socket=/tmp/mysql3303.sock --user=mysql --lower_case_table_names=0 --mysqlx=OFF

# 参数说明,没有指定 my.cnf,所以启动加后续参数
# --datadir 指定启动的数据目录
# --port    指定启动的MySQL监听端口
# --socket  指定socket路径
# --user    接受者需同捐赠者的目录权限一致,所以使用mysql用户来启动
# --lower—case-table-names=0 接受者需同捐赠者一致
# --mysqlx=OFF 需要关闭,不关闭mysqlx的端口默认会使用33060 跟捐赠者重复冲突

# 登录检查及GTID编号
$ mysql -uroot -p -P3303
mysql> show master status;
+------------------+----------+--------------+------------------+--------------------------------------------+
 File              Position  Binlog_Do_DB  Binlog_Ignore_DB  Executed_Gtid_Set                          
+------------------+----------+--------------+------------------+--------------------------------------------+
 mysql-bin.000021       736                                  5b07de60-66d1-11eb-a073-5254003716cd:1-104 
+------------------+----------+--------------+------------------+--------------------------------------------+

# 同捐赠者的GTID编号是一致的

远程备份

官方文档:https://dev.mysql.com/doc/refman/8.0/en/clone-plugin-remote.html

远程克隆的前提条件和限制

  • 捐赠者接受者 都需要安装克隆插件

  • 捐赠者接受者 分别需要有至少 BACKUP_ADMIN/CLONE_ADMIN 权限的账号,说明了接受者必须先启动一个数据库实例(空或有数据的实例均可,因为完成克隆都会被删除)

  • 克隆目标目录必须有写入权限

  • 克隆操作期间不允许使用DDL,允许并发DML。要求相同版本好,无法在MySQL5.7和MySQL8.0之间进行克隆,而且要求版本 >= 8.0.17

  • 同一平台同一架构

  • 足够的磁盘空间

  • 可以克隆操作一般表空间,但必须要有目录权限,不支持克隆使用绝对路径创建的一般表空间,与源表空间文件具有相同路径的克隆表空间文件将导致冲突

  • 远程克隆时,不支持CLONE INSTANCE FROM 中通过使用 mysqlx 的端口

  • 克隆插件不支持克隆 MySQL服务器配置文件 my.cnf 等

  • 克隆插件不支持克隆二进制日志

  • 克隆插件仅克隆 Innodb存储引擎的数据,不支持克隆其它存储引擎数据。Myisam 并且CSV存储在包括sys模式的任何模式中的表都被克隆为空表。

  • 不支持通过 MySQL router 连接到 捐赠者实例

  • 一些参数是必须一致的,例如 innodb_page_size、innodb_data_file_path、lower_case_table_names

  • 如果克隆加密或页面压缩数据,则捐赠者接受者 必须具有相同的文件系统块大小

  • 如果需要克隆加密数据,则需要安全连接

  • clone_vaild_donor_list接受者的设置必须包含捐赠者 MySQL服务器实例的主机地址

  • 必须没有其它克隆操作正在运行。一次只允许一次克隆操作,要确定克隆操作是否正在运行,请查询该 performance_schema.clone_status

  • 默认情况下,克隆数据会自动重新启动接受者实例。要自动重新启动,必须在接收方提供监视进程以检测服务器是否已关闭。否则,在克隆数据后,克隆操作将停止并出现如下报错,并且关闭接受者 MySQL服务器实例

    ERROR 3707 (HY000): Restart server failed (mysqld is not managed by supervisor process).
    # 此报错信息不表示克隆失败,意味着必须在克隆数据后手动重新启动接受者的 MySQL实例

远程克隆实战

假设前提条件都满足,步骤如下: 和本地克隆一样,远程克隆需要插件安装和用户授权。捐赠者接受者的授权略有不同

1. 确保捐赠者接受者都安装了克隆插件

INSTALL PLUGIN clone SONAME 'mysql_clone.so';
show plugins;

2.用户账号授权

捐赠者授权

mysql> CREATE USER clone_user@'%' IDENTIFIED by '1234';
mysql> GRANT BACKUP_ADMIN ON *.* TO 'clone_user'@'%';  
# BACKUP_ADMIN是MySQL8.0 才有的备份锁的权限

接受者授权

mysql> CREATE USER clone_user@'%' IDENTIFIED by '1234';
mysql> GRANT CLONE_ADMIN ON *.* TO 'clone_user'@'%';
# CLONE_ADMIN权限=BACKUP_ADMIN+SHUTDOWN权限。 SHUTDOWN权限仅允许用户shutdown和restart mysqld。授权不同是因为,接受者需要 restart mysqld

3.接受者设置捐赠者列表清单

mysql> set global clone_valid_donor_list='127.0.0.1:3306';
mysql> show variables like 'clone_valid_donor_list';
+------------------------+----------------+
 Variable_name           Value          
+------------------------+----------------+
 clone_valid_donor_list  127.0.0.1:3306 
+------------------------+----------------+
# 这是一个安全相关参数,多个实例用逗号分隔,例如:'HOST1:PORT1,HOST2:PORT2'

4.接受者 开始拉取克隆捐赠者数据

mysql> clone instance from clone_user@'127.0.0.1':3306 identified by '1234';
ERROR 3707 (HY000): Restart server failed (mysqld is not managed by supervisor process).
# 接受者如果非mysqld_safe启动的,会报错误,但不影响克隆,需要重新启动mysqld即可

5.远程克隆步骤如下

# 此命令在接受者上执行
mysql> SELECT STAGE, STATE, END_TIME FROM performance_schema.clone_progress;
+-----------+-----------+----------------------------+
 STAGE      STATE      END_TIME                   
+-----------+-----------+----------------------------+
 DROP DATA  Completed  2021-12-15 20:59:32.065746 
 FILE COPY  Completed  2021-12-15 20:59:32.554942 
 PAGE COPY  Completed  2021-12-15 20:59:32.571760 
 REDO COPY  Completed  2021-12-15 20:59:32.573105 
 FILE SYNC  Completed  2021-12-15 20:59:32.859534 
 RESTART    Completed  2021-12-15 21:00:11.729276 
 RECOVERY   Completed  2021-12-15 21:00:13.197575 
+-----------+-----------+----------------------------+
7 rows in set (0.00 sec)

实验小结:克隆插件与xtrabackup的对比

  • 克隆插件和XtraBackup备份都属于物理热备,备份恢复原理也近似;

  • 克隆在恢复实例时需要先启动一个是实例并授权,而XtraBackup不需要;

  • XtraBackup 在 backup后需要 apply log,克隆是类似 mysqlbackup 提供的 backup-and-apply log 两个步骤合并在一起

  • XtraBackup 备份文件的权限等于执行命令人的权限,恢复实例时需要收回实例权限,克隆备份后权限和原数据权限一直,无需再 chown 回收权限

  • XtraBackup 恢复时需要在 mysqld 中执行 reset master,然后 set global gtid_purged='UUID:NUMBER',具体的 UUID:NUMBER 的值为备份文件中的 XtraBackup_info 文件的内容,克隆不需要这个操作步骤,默认克隆完就可以建立复制了

  • XtraBackup 备份完一般是 scp 拷贝到另外一台机器恢复,走的是 22 端口; 克隆走的是 MySQL 的监听端口。所以在目录权限正确的情况下,甚至根本不需要登录 Linux 服务器的权限。如下:

    [root@192-168-199-103 ~]# mysql -uroot -ppassword2 -h192.168.199.102 -P3008 -e "SET GLOBAL clone_valid_donor_list = '192.168.199.101:3008';"
    mysql: [Warning] Using a password on the command line interface can be insecure.
    
    [root@192-168-199-103 ~]# mysql -uroot -ppassword2 -h192.168.199.102 -P3008 -e "CLONE INSTANCE FROM root@'192.168.199.101':3008 IDENTIFIED BY 'password1';"
    mysql: [Warning] Using a password on the command line interface can be insecure.

利用克隆建立主从复制

克隆出来的接受者实例,可以与捐赠者建立主从复制。建立组复制也是可以的 组复制可以参考官方文档18.4.3.1节“克隆分布式恢复”。 https://dev.mysql.com/doc/refman/8.0/en/group-replicatio

建立GTID主从复制

传统复制,通过如下命令查看 position 位置

mysql> SELECT BINLOG_FILE, BINLOG_POSITION FROM performance_schema.clone_status;
+------------------+-----------------+
 BINLOG_FILE       BINLOG_POSITION 
+------------------+-----------------+
 mysql-bin.000008           183519 
+------------------+-----------------+

GTID复制时,通过以下命令查看GTID位置

mysql> SELECT @@GLOBAL.GTID_EXECUTED;
+-------------------------------------------+
 @@GLOBAL.GTID_EXECUTED                    
+-------------------------------------------+
 407d8db5-5120-11ec-b0f0-5254008b7043:1-25 
+-------------------------------------------+
1 row in set (0.00 sec)

在捐赠者主实例创建复制账号并授权

mysql> create user repl@'%' identified WITH 'mysql_native_password' by '1234';
mysql> GRANT REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO 'repl'@'%';

在接受者实例上建立GTID主从复制关系

mysql> CHANGE MASTER TO
  MASTER_HOST='127.0.0.1',
  MASTER_USER='repl',
  MASTER_PASSWORD='1234',
  MASTER_PORT=3306,
  MASTER_AUTO_POSITION=1;

mysql> start slave;
mysql> show slave status\G;
*************************** 1. row ***************************
               Slave_IO_State: Waiting for source to send event
                  Master_Host: 127.0.0.1
                  Master_User: repl
                  Master_Port: 3306
                Connect_Retry: 60
              Master_Log_File: mysql-bin.000008
          Read_Master_Log_Pos: 184775
               Relay_Log_File: nj-cvm-relay-bin.000002
                Relay_Log_Pos: 1674
        Relay_Master_Log_File: mysql-bin.000008
             Slave_IO_Running: Yes
            Slave_SQL_Running: Yes
              Replicate_Do_DB: 
          Replicate_Ignore_DB: 
           Replicate_Do_Table: 
       Replicate_Ignore_Table: 
      Replicate_Wild_Do_Table: 
  Replicate_Wild_Ignore_Table: 
                   Last_Errno: 0
                   Last_Error: 
                 Skip_Counter: 0
          Exec_Master_Log_Pos: 184775
              Relay_Log_Space: 1884
              Until_Condition: None
               Until_Log_File: 
                Until_Log_Pos: 0
           Master_SSL_Allowed: No
           Master_SSL_CA_File: 
           Master_SSL_CA_Path: 
              Master_SSL_Cert: 
            Master_SSL_Cipher: 
               Master_SSL_Key: 
        Seconds_Behind_Master: 0
Master_SSL_Verify_Server_Cert: No
                Last_IO_Errno: 0
                Last_IO_Error: 
               Last_SQL_Errno: 0
               Last_SQL_Error: 
  Replicate_Ignore_Server_Ids: 
             Master_Server_Id: 6
                  Master_UUID: 407d8db5-5120-11ec-b0f0-5254008b7043
             Master_Info_File: mysql.slave_master_info
                    SQL_Delay: 0
          SQL_Remaining_Delay: NULL
      Slave_SQL_Running_State: Replica has read all relay log; waiting for more updates
           Master_Retry_Count: 86400
                  Master_Bind: 
      Last_IO_Error_Timestamp: 
     Last_SQL_Error_Timestamp: 
               Master_SSL_Crl: 
           Master_SSL_Crlpath: 
           Retrieved_Gtid_Set: 407d8db5-5120-11ec-b0f0-5254008b7043:21-25
            Executed_Gtid_Set: 407d8db5-5120-11ec-b0f0-5254008b7043:1-25
                Auto_Position: 1
         Replicate_Rewrite_DB: 
                 Channel_Name: 
           Master_TLS_Version: 
       Master_public_key_path: 
        Get_master_public_key: 0
            Network_Namespace: 
1 row in set, 1 warning (0.00 sec)

监控克隆操作

检查克隆进度

mysql> SELECT STATE FROM performance_schema.clone_status;
+-----------+
 STATE     
+-----------+
 Completed 
+-----------+
1 row in set (0.00 sec)

检查克隆是否出错

mysql> SELECT STATE, ERROR_NO, ERROR_MESSAGE FROM performance_schema.clone_status;
+-----------+----------+---------------+
 STATE      ERROR_NO  ERROR_MESSAGE 
+-----------+----------+---------------+
 Completed         0                
+-----------+----------+---------------+
1 row in set (0.00 sec)

检查克隆次数

mysql> show global status like 'Com_clone';  # 捐赠者每次+1,接受者0
+---------------+-------+
 Variable_name  Value 
+---------------+-------+
 Com_clone      0     
+---------------+-------+
1 row in set (0.00 sec)

随时可以kill掉克隆

mysql> SELECT * FROM performance_schema.clone_status\G
*************************** 1. row ***************************
             ID: 1
            PID: 0
          STATE: Completed
     BEGIN_TIME: 2021-12-15 20:59:31.590
       END_TIME: 2021-12-15 21:00:13.198
         SOURCE: 127.0.0.1:3306
    DESTINATION: LOCAL INSTANCE
       ERROR_NO: 0
  ERROR_MESSAGE: 
    BINLOG_FILE: mysql-bin.000008
BINLOG_POSITION: 183519
  GTID_EXECUTED: 407d8db5-5120-11ec-b0f0-5254008b7043:1-20
1 row in set (0.00 sec)

mysql> show processlist;
+----+-----------------+-----------------+------+---------+------+----------------------------------------------------------+------------------+
 Id  User             Host             db    Command  Time  State                                                     Info             
+----+-----------------+-----------------+------+---------+------+----------------------------------------------------------+------------------+
  5  event_scheduler  localhost        NULL  Daemon   2403  Waiting on empty queue                                    NULL             
  8  root             localhost        NULL  Query       0  init                                                      show processlist 
  9  system user      connecting host  NULL  Connect   842  Waiting for source to send event                          NULL             
 10  system user                       NULL  Query     662  Replica has read all relay log; waiting for more updates  NULL             
 11  system user                       NULL  Connect   673  Waiting for an event from Coordinator                     NULL             
 12  system user                       NULL  Connect   842  Waiting for an event from Coordinator                     NULL             
 13  system user                       NULL  Connect   842  Waiting for an event from Coordinator                     NULL             
 14  system user                       NULL  Connect   842  Waiting for an event from Coordinator                     NULL             
+----+-----------------+-----------------+------+---------+------+----------------------------------------------------------+------------------+
8 rows in set (0.01 sec)

# 查看线程ID,然后 kill ID

总结

克隆功能操作简单,可以用于快速搭建、恢复主从复制或组复制,可以部分取代开源热备软件xtrabackup


MySQL 8.0.27 Clone Plugin实战详解
http://www.qiqios.cn/2021/12/15/mysql-8-0-27-clone-plugin实战详解/
作者
一亩三分地
发布于
2021年12月15日
许可协议