MySQL克隆插件介绍这篇文章对Clone插件做了简单的介绍,并演示了两种克隆操作:本地克隆和远程克隆。那克隆操作在执行过程中,如何对其监视、如何对其进行终止呢,使用克隆插件有什么限制呢?本篇将对这些话题进行介绍。
监视克隆操作克隆操作在执行过程中,可以通过以下几个方面对其进行监视:
- 使用Performace_Schema Clone表
- 使用Performance_Schema Stage事件
- 使用Performance_Schema Clone Instrumentation
在克隆操作进行过程中,可以使用clone_status和clone_progress查看克隆操作的状态以及进度,但是,这两个clone表只能在recipient MySQL服务器实例进行查看,不能在donor MySQL服务器实例查看。
查看clone_status表:
mysql> select * from performance_schema.clone_statusG; *************************** 1. row *************************** ID: 1 PID: 0 STATE: Completed BEGIN_TIME: 2021-12-04 15:05:21.382 END_TIME: 2021-12-04 15:05:55.007 SOURCE: 192.168.56.81:3306 DESTINATION: LOCAL INSTANCE ERROR_NO: 0 ERROR_MESSAGE: BINLOG_FILE: mysql-bin.000009 BINLOG_POSITION: 196 GTID_EXECUTED: 6f92ea48-4ff1-11ec-aaa5-08002790c7d5:1-66 1 row in set (0.00 sec) ERROR: No query specified
说明:
- ID:当前克隆操作的唯一识别符
- PID:执行克隆操作的会话的Process list ID
- STATE:克隆操作的当前状态,状态包括:Not Started,In Progress,Completed和Failed
- BEGIN_TIME:克隆操作的开始时间
- END_TIME:克隆操作的结束时间,若显示为NULL,表示还未结束
- SOURCE:donor MySQL服务器地址,以HOST:PORT方式显示
- DESTINATION:克隆到的目录
- ERROR_NO:若克隆操作失败,报告一个错误号
- ERROR_MESSAGE:若克隆操作失败,报个对应的错误信息
- BINLOG_FILE:克隆的binlog文件的文件名
- BINLOG_POSITION:克隆的binlog文件的位点
- GTID_EXECUTED:最后一个克隆的事务的GTID值
查看clone_progress表:
mysql> select * from performance_schema.clone_progress; +------+-----------+-----------+----------------------------+----------------------------+---------+------------+------------+------------+------------+---------------+ | ID | STAGE | STATE | BEGIN_TIME | END_TIME | THREADS | ESTIMATE | DATA | NETWORK | DATA_SPEED | NETWORK_SPEED | +------+-----------+-----------+----------------------------+----------------------------+---------+------------+------------+------------+------------+---------------+ | 1 | DROp DATA | Completed | 2021-12-04 15:05:21.675889 | 2021-12-04 15:05:22.982978 | 1 | 0 | 0 | 0 | 0 | 0 | | 1 | FILE COPY | Completed | 2021-12-04 15:05:22.983424 | 2021-12-04 15:05:46.185189 | 2 | 4379302470 | 4379302470 | 4379548465 | 0 | 0 | | 1 | PAGE COPY | Completed | 2021-12-04 15:05:46.185348 | 2021-12-04 15:05:46.317438 | 2 | 0 | 0 | 197 | 0 | 0 | | 1 | REDO COPY | Completed | 2021-12-04 15:05:46.317639 | 2021-12-04 15:05:46.446903 | 2 | 2560 | 2560 | 3129 | 0 | 0 | | 1 | FILE SYNC | Completed | 2021-12-04 15:05:46.447083 | 2021-12-04 15:05:49.585813 | 2 | 0 | 0 | 0 | 0 | 0 | | 1 | RESTART | Completed | 2021-12-04 15:05:49.585813 | 2021-12-04 15:05:53.645668 | 0 | 0 | 0 | 0 | 0 | 0 | | 1 | RECOVERY | Completed | 2021-12-04 15:05:53.645668 | 2021-12-04 15:05:55.007075 | 0 | 0 | 0 | 0 | 0 | 0 | +------+-----------+-----------+----------------------------+----------------------------+---------+------------+------------+------------+------------+---------------+ 7 rows in set (0.00 sec)
说明:
- ID:当前克隆操作的唯一识别符
- STAGE:当前克隆阶段的名称,阶段包含:DROP DATA,FILE COPY,PAGE COPY,REDO COPY,FILE SYNC,RESTART和RECOVERY
- BEGIN_TIME:当前克隆阶段的开始时间,若为NULL,则该阶段未开始
- END_TIME:当前克隆阶段的结束时间,若为NULL,则该阶段未结束
- THREADS:当前克隆阶段使用的并发线程数
- ESTIMATE:当前克隆阶段评估的以bytes为单位的数据量大小
- DATA:当前克隆阶段传输的以bytes为单位的数据量大小
- NETWORK:当前克隆阶段网络传输的以bytes为单位的数据量大小
- DATA_SPEED:当前真实的数据传输的速度,单位是每秒字节数
- NETWORK_SPEED:当前网络传输的速度,单位是每秒字节数
使用Stage Events可以在donor 和recipient MySQL 服务器实例上对克隆操作进行监控,共有三个Stage Events,分别是:
- stage/innodb/clone (file copy)
- stage/innodb/clone (page copy)
- stage/innodb/clone (redo copy)
欲使用Stage Events进行监控,需要开启instruments和相关的consumers,可参照如下:
1)激活stage/innodb/clone% instruments,默认是激活的,若没激活,则需进行激活
mysql> UPDATE performance_schema.setup_instruments SET enabled='YES' -> WHERe NAME LIKE 'stage/innodb/clone%'; Query OK, 0 rows affected (0.00 sec) Rows matched: 3 Changed: 0 Warnings: 0
2)激活consumers表,这样可在events_stages_current、events_stages_history、events_stages_history_long查看
mysql> UPDATE performance_schema.setup_consumers SET enabled='YES' -> WHERe NAME LIKE '%stage%'; Query OK, 0 rows affected (0.00 sec) Rows matched: 3 Changed: 0 Warnings: 0
3)执行克隆操作
mysql> clone local data directory='/mysql/clonedata/test'; Query OK, 0 rows affected (17.80 sec)
4)查看Stage Events表
mysql> SELECT event_name,work_completed,work_estimated -> FROM performance_schema.events_stages_history -> WHERe event_name LIKE 'stage/innodb/clone%'; +--------------------------------+----------------+----------------+ | event_name | work_completed | work_estimated | +--------------------------------+----------------+----------------+ | stage/innodb/clone (file copy) | 4177 | 4177 | | stage/innodb/clone (page copy) | 0 | 0 | | stage/innodb/clone (redo copy) | 1 | 1 | +--------------------------------+----------------+----------------+ 3 rows in set (0.00 sec)使用Performance_Schema Clone Instrumentation
对于对克隆操作更高级的性能监控,克隆操作支持的Instrument如下,使用时需要对其激活:
mysql> SELECt NAME,enabled FROM performance_schema.setup_instruments t WHERe t.NAME LIKE '%clone%'; +----------------------------------------------+---------+ | NAME | enabled | +----------------------------------------------+---------+ | wait/synch/mutex/innodb/clone_snapshot_mutex | NO | | wait/synch/mutex/innodb/clone_sys_mutex | NO | | wait/synch/mutex/innodb/clone_task_mutex | NO | | wait/io/file/innodb/innodb_clone_file | YES | | stage/innodb/clone (file copy) | YES | | stage/innodb/clone (redo copy) | YES | | stage/innodb/clone (page copy) | YES | | statement/abstract/clone | YES | | statement/clone/local | YES | | statement/clone/client | YES | | statement/clone/server | YES | | memory/innodb/clone | YES | | memory/clone/data | YES | +----------------------------------------------+---------+ 13 rows in set (0.00 sec)停止克隆操作
克隆进行过程中,由于各种原因需要终止克隆操作,可以使用KILL QUERY processlist_id进行停止,PID可通过如下方式获得(也可以通过PROCESSLIST表、SHOW PROCESSLIST或THREAD表获得):
mysql> select * from performance_schema.clone_statusG; *************************** 1. row *************************** ID: 1 PID: 10 STATE: In Progress BEGIN_TIME: 2021-12-12 10:12:36.801 END_TIME: NULL SOURCE: LOCAL INSTANCE DESTINATION: /mysql/clonedata/test/ ERROR_NO: 0 ERROR_MESSAGE: BINLOG_FILE: BINLOG_POSITION: 0 GTID_EXECUTED: 1 row in set (0.00 sec) ERROR: No query specified使用克隆插件的限制
使用克隆插件可以给数据迁移、主从环境快速搭建等带来很大便利,但它的使用也有一定的限制,具体如下:
- 在MySQL 8.0.27之前,在克隆操作期间不允许对donor和recipient执行DDL(包括TRUNCATE)操作,从MySQL 8.0.27开始,默认情况下允许在donor上执行并发DDL;
- 执行clone操作的MySQL服务器版本必须相同,小版本也要相同;
- 一次只能克隆一个MySQL实例;
- 不支持mysqlx_port指定的X协议端口用于远程克隆操作;
- 不支持克隆MySQL服务器配置文件;
- 不支持克隆二进制日志文件;
- 只克隆存储在InnoDB引擎中的数据;
- 不支持通过MySQL Router连接到donor的MySQL服务器实例;
- 本地克隆操作不支持使用绝对路径创建的一般表空间,因为在同一路径下克隆的表空间文件会存在冲突;
参考:官方网站(https://dev.mysql.com/doc/refman/8.0/en/clone-plugin-limitations.html)



