admin管理员组文章数量:1794759
mysql clone 插件使用
Clone 操作的标准流程如下:
- 清空 Recipient 节点的数据
- 复制 Donor 节点的数据文件
- 复制 Donor 节点的数据页
- 复制 Donor 节点的 redo log
- 同步 Donor 节点的数据文件
- 重启 Recipient 节点
- 在 Recipient 节点上完成 Crash recovery
使用 Clone 插件需要注意以下几点:
- Recipient 节点并不会 Clone Donor 节点的 MySQL 配置文件,因为 Recipient 节点一般会有不同的 IP 或者端口。但是涉及到一些存储相关的参数(例如 innodb_page_size)出现不一致的时候,Clone 插件会报错,这些参数可能会导致 Recipient 节点重启失败,因此要提前准备好 Recipient 节点的配置文件。
- Clone 插件复制的文件不包括 binlog,因为加入原有的 HA 结构并不需要 Donor 节点的 binlog。
- Clone 插件当前仅支持 InnoDB 引擎的表,MyISAM 和 CSV 等引擎的表在 Clone 之后是一个空表。Clone 插件最初设计的时候会支持 MySQL 的所有引擎,但是目前仅实现了 InnoDB 引擎的功能。
- Clone 操作会阻塞 Donor 节点上的所有 DDL 操作。
- Clone 操作会清空 Recipient 节点的所有数据和 binlog,因此要特别注意是否要在 Clone 操作执行之前备份 Recipient 节点的数据。
- Clone 操作最好是挂到后台执行(尽量避免网络问题)。
使用限制
- MySQL 版本不低于 8.0.17
- 到 8.0.17 版本为止,Clone 插件仅支持 InnoDB 引擎的表。
- Donor 节点在 Clone 的过程中,IO 读取的吞吐量和 CPU 使用率会有非常明显的上涨。
安装插件
代码语言:sql复制-- 两个节点都要安装
INSTALL PLUGIN CLONE SONAME "mysql_clone.so";
创建用户
代码语言:sql复制-- 两个节点都要创建
CREATE USER 'clone_user'@'%' IDENTIFIED BY 'Zzj@123456';
GRANT CLONE_ADMIN on *.* to 'clone_user'@'%';
GRANT BACKUP_ADMIN ON *.* TO 'clone_user'@'%';
执行clone
代码语言:sql复制-- 在需要clone机器上执行
set global clone_valid_donor_list='192.168.30.139:3306';
CLONE INSTANCE FROM 'clone_user'@'192.168.30.139':3306 IDENTIFIED BY 'Zzj@123456';
查看clone状态
代码语言:sql复制-- 在需要clone机器上执行
SELECT STATE, CAST(BEGIN_TIME AS DATETIME) as "START TIME",
CASE WHEN END_TIME IS NULL THEN
LPAD(sys.format_time(POWER(10,12) * (UNIX_TIMESTAMP(now()) - UNIX_TIMESTAMP(BEGIN_TIME))), 10, ' ')
ELSE
LPAD(sys.format_time(POWER(10,12) * (UNIX_TIMESTAMP(END_TIME) - UNIX_TIMESTAMP(BEGIN_TIME))), 10, ' ')
END as DURATION
FROM performance_schema.clone_status;
代码语言:sql复制SELECT STAGE, STATE, CAST(BEGIN_TIME AS TIME) as "START TIME",
CASE WHEN END_TIME IS NULL THEN
LPAD(sys.format_time(POWER(10,12) * (UNIX_TIMESTAMP(now()) - UNIX_TIMESTAMP(BEGIN_TIME))), 10, ' ')
ELSE
LPAD(sys.format_time(POWER(10,12) * (UNIX_TIMESTAMP(END_TIME) - UNIX_TIMESTAMP(BEGIN_TIME))), 10, ' ')
END as DURATION,
LPAD(CONCAT(FORMAT(ROUND(ESTIMATE/1024/1024,0), 0), " MB"), 16, ' ') as "Estimate",
CASE WHEN BEGIN_TIME IS NULL THEN LPAD('0%', 7, ' ')
WHEN ESTIMATE > 0 THEN
LPAD(CONVERT(CONCAT(CAST(ROUND(DATA*100/ESTIMATE, 0) AS BINARY), "%"), CHAR), 7, ' ')
WHEN END_TIME IS NULL THEN LPAD('0%', 7, ' ')
ELSE LPAD('100%', 7, ' ') END as "Done(%)"
FROM performance_schema.clone_progress;
特殊情况
代码语言:sql复制STOP GROUP_REPLICATION;
set global read_only=0;
本文标签: mysql clone 插件使用
版权声明:本文标题:mysql clone 插件使用 内容由林淑君副主任自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://www.xiehuijuan.com/baike/1754637061a1704630.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论