Mysql 8.0 克隆(clone)
Mysql 8.0 克隆(clone)
- MySQL 8.0 clone 插件提供从一个实例克隆数据的功能,克隆功能提供了更有效的方式来快速创建 MySQL 实例,搭建主从复制和组复制。本文介绍使用 MySQL 8.0 clone 插件快速搭建主从复制的方法。
环境
- mysql 8.0.29
- 主:172.18.1.10
- 从:172.18.1.11
配置下载 clone 插件
- 主从节点都需要配置
#my.cnf配置添加
# 不加loose前缀, mysql较新的版本初始化启动时会失败
loose-plugin_load_add = 'mysql_clone.so'
mysql> INSTALL PLUGIN clone SONAME 'mysql_clone.so';
Query OK, 0 rows affected (0.01 sec)
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.00 sec)
创建用户并授权(或者直接使用 root 用户)
- 创建复制账号,只需要在主库创建,在克隆完成后,搭建主从复制使用
mysql> create user repl@'%' identified by '123456';
Query OK, 0 rows affected (0.01 sec)
mysql> grant replication slave on *.* to 'repl'@'%';
Query OK, 0 rows affected (0.01 sec)
mysql> FLUSH PRIVILEGES;
Query OK, 0 rows affected (0.01 sec)
- 克隆源,也就是主库,需要有【BACKUP_ADMIN】权限,克隆受体,也就是从库,需要【CLONE_ADMIN】权限,为了方便,我们在两个机器上把这两个权限都加上
mysql> create user 'clone_user'@'%' identified by '123456';
Query OK, 0 rows affected (0.01 sec)
mysql> grant BACKUP_ADMIN on *.* to 'clone_user'@'%';
Query OK, 0 rows affected (0.01 sec)
mysql> grant CLONE_ADMIN on *.* to 'clone_user'@'%';
Query OK, 0 rows affected (0.00 sec)
mysql> FLUSH PRIVILEGES;
Query OK, 0 rows affected (0.01 sec)
执行克隆任务
- 在从库上执行克隆命令,如下:
# 设置克隆源,将clone_valid_donor_list设置为主库
mysql> SET GLOBAL clone_valid_donor_list = '172.18.1.10:3306';
Query OK, 0 rows affected (0.00 sec)
# 开始克隆
CLONE INSTANCE FROM 'clone_user'@'172.18.1.10':3306 IDENTIFIED BY '123456';
在执行克隆时,会先将从库本地的数据目录清空,请确保本地数据目录没有重要数据,可以清空,否则将导致本地数据丢失。
克隆完成后,从库 MySQL 实例自动重启。
启动复制
- 从库重启完成后,查看 Binlog 文件、位置和已经执行的 GTID。
SELECT BINLOG_FILE, BINLOG_POSITION FROM performance_schema.clone_status;
SELECT @@GLOBAL.GTID_EXECUTED;
- 重建复制:
change master to master_host='172.18.1.10',master_port=3306,master_user='repl',master_password='123456',master_auto_position=1;
# 启动复制,查看复制状态
start slave;
show slave status\G
克隆过程中的状态监控
- MySQL performance_schema 库中提供了 clone_status 和 clone_progress 来查询克隆的状态与进度,以便对克隆过程进行监控。
SELECT STATE, ERROR_NO, ERROR_MESSAGE FROM performance_schema.clone_status;
SELECT STAGE, STATE, END_TIME FROM performance_schema.clone_progress;
select
stage,
state,
cast(begin_time as DATETIME) as "START TIME",
cast(end_time as DATETIME) as "FINISH TIME",
lpad(sys.format_time(power(10,12) * (unix_timestamp(end_time) - unix_timestamp(begin_time))), 10, ' ') 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(concat(round(data*100/estimate, 0), "%"), 7, ' ')
when end_time is NULL then lpad('0%', 7, ' ')
else lpad('100%', 7, ' ')
end as "Done(%)"
from performance_schema.clone_progress;
使用限制
- clone 功能使用限制:
- 克隆操作期间,不允许 DDL,包括 truncate table
- 克隆的两个 MySQL 实例版本必须一致
- 一次只能克隆一个实例
- 不支持克隆 MySQL 配置信息
- 不支持克隆 Binlog 日志
- 只支持克隆 Innodb 存储引擎的数据,其他存储引擎的数据不会被克隆
- mysql 版本必须 大于 等于 8.0.17
本文是原创文章,采用 CC BY-NC-ND 4.0 协议,完整转载请注明来自 运维小林
评论
匿名评论
隐私政策
你无需删除空行,直接评论以获取最佳展示效果