MySQL 8.0 新特性:Clone Plugin

文若2年前技术文章916


一、前言

MySQL 在 8.0.17 加入了克隆插件,可以从本地或者远程克隆数据,比如需要创建主从关系,我们一般都是通过物理备份来做,那如果你使用的是 MySQL 8.0.17 及以上的版本那么就可以使用它直接 Clone 数据即可,使用克隆插件进行配置主从关系要比复制大量的事务要快的多,效率更高。


克隆分为本地克隆和远程克隆,本文将着重介绍远程克隆。


关于本地备份可以考虑能否当作物理备份来用?

二、远程克隆测试

  1. 注意事项⚠️:克隆角色分为 recipient 接收者 donor 捐赠者 默认情况下使用远程克隆会删除 “接收者” 数据目录中的数据,替换为 “捐赠者” 的克隆数据。当然也可以选择将克隆的数据分配到接收者的其它目录,避免删除“接收者” 现有的数据。

  1. 测试服务器规划:

           carbon.png

  1. 安装 clone 插件(接收者&捐赠者都需要安装):

carbon.png

  1. 确认插件是否可用:

carbon.png

  1. 创建专用的克隆用户:

carbon.png

  1. 在接收者服务器设置捐赠者列表清单:

carbon.png

  1. 接收者开始拉去捐赠者数据:

carbon.png

  1. 此时就已经完成一次克隆测试,接收者的数据已经与捐赠者相同,用下方 SQL 可以查看 clone 进度及过程:

carbon.png

三、远程克隆条件及限制

  1. 捐赠者与接收者都需要安装 clone 插件;

  2. 捐赠者至少有 BAKUP_ADMIN 权限,接收者至少有 CLONE_ADMIN 权限;

  3. 克隆目标的目录必须有写入权限;

  4. 克隆期间不允许使用 DDL 可以并发 DML;

  5. 数据库版本建议要一致,必须是 version >= 8.0.17;

  6. 必须是同一平台下的实例,比如 Linux to window、x64 to x32 均不支持;

  7. 使用前需要确认是否有足够的磁盘空间;

  8. 克隆插件不支持克隆 my.cnf 及二进制日志,及支持克隆 innodb 引擎的数据;

  9. 捐赠者与接收者部分参数要求一致,如:innodb_page_size、innodb_data_file_path、lower_case_table_names;

  10. 同一时间,只允许一个克隆任务在执行,所以启动克隆前可以先确认是否有克隆任务;

  11. 默认情况下,克隆结束后会自动重启 接收者 MySQL 实例。

  12. 以上是一些总结,详细请参考:MySQL 8.0 官方文档

四、使用克隆高效搭建复制

  1. 复制搭建节点分配:

172.16.104.57

Master

172.16.104.56

Slave

  1. 首先给 56 节点安装与“捐赠者”相同版本的实例,使用的是自动化脚本:

[root@172-16-104-56 test01]# python mysql_install.py -p=mysql-8.0.22-linux-glibc2.12-x86_64.tar.xz

            __  __       ____   ___  _       _           _        _ _
           |  \/  |_   _/ ___| / _ \| |     (_)_ __  ___| |_ __ _| | |
           | |\/| | | | \___ \| | | | |     | | '_ \/ __| __/ _` | | |
           | |  | | |_| |___) | |_| | |___  | | | | \__ \ || (_| | | |
           |_|  |_|\__, |____/ \__\_\_____| |_|_| |_|___/\__\__,_|_|_|
                   |___/

Validating the installation package...
69640f7e9ecb7dff857b8e2873dc1539  mysql-8.0.22-linux-glibc2.12-x86_64.tar.xz

loading....
Checking system permissions...
50% System Permission Detection!
100% System Permission Detection!
Unpacking the installation package...
Creating a data directory...
Permission setting in progress...
Writing my.conf ...
Initializing MySQL...
Successful!
Starting MySQL...


Successful! Please enter to exit the program.
  1. 安装完成后,我们可以看到只有 MySQL 的元数据库:

root@mysql 17:47:  [(none)]>show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| sys                |
+--------------------+
4 rows in set (0.01 sec)

root@mysql 17:47:  [(none)]>
  1. 首先给 “捐赠者” 及 “接收者” 安装 clone 插件:

INSTALL PLUGIN clone SONAME 'mysql_clone.so';
  1. 给 “捐赠者” 创建克隆用户及授权:

CREATE USER clone_user@'%' IDENTIFIED by 'Dtstack@clone';
GRANT BACKUP_ADMIN ON *.* TO 'clone_user'@'%';
  1. “接收者” 设置 “捐赠者” 列表:

SET GLOBAL clone_valid_donor_list = '172.16.104.57:3306';
  1. 开启克隆,过程中 “接收者” 会自动重启:

root@mysql 17:55:  [(none)]>CLONE INSTANCE FROM clone_user@'172.16.104.57':3306 IDENTIFIED BY 'Dtstack@clone';
Query OK, 0 rows affected (11.28 sec)

root@mysql 17:55:  [(none)]>Restarting mysqld...
2021-02-09T09:55:39.552910Z mysqld_safe Number of processes running now: 0
2021-02-09T09:55:39.572682Z mysqld_safe mysqld restarted
  1. 查看 clone 过程中是否出现错误:

root@mysql 17:58:  [(none)]>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)

root@mysql 17:59:  [(none)]>
  1. 克隆已经完成,在捐赠者上创建复制用户,建立复制即可:

create user repl@'%' identified WITH 'mysql_native_password' by 'Dtstack@repl'; 
GRANT REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO 'repl'@'%';
  1. 在接收者上创建 GTID 复制关系

CHANGE MASTER TO MASTER_HOST='172.16.104.57',
	MASTER_USER='repl',
  MASTER_PASSWORD='Dtstack@repl', 
  MASTER_PORT=3306, 
  MASTER_AUTO_POSITION=1;
  1. 启动复制线程:

start slave;
  1. 查询复制状态:

Slave_IO_Running: Yes
Slave_SQL_Running: Yes



相关文章

ES运维(三)架构与规划(阿里云)

ES运维(三)架构与规划(阿里云)

1、 阿里云Elasticsearch架构图阿⾥云Elasticsearch和Kibana容器化运⾏在ECS中,监控agent(独⽴进程)负责收集监控指标,通过SLS发送给云监控完成监控报警。实例之间...

SQL隐式转换导致索引失效_校验规则不一致

4.校验规则不一致导致索引失效首先可以通过检查表的校验规则核实是否存在隐式转化。--查看关联字段的字符集、校验规则SELECT TABLE_SCHEMA, TABLE_NAME, COLUMN_NAM...

Sentry管理Hive目录acl -setacl不生效

Sentry管理Hive目录acl -setacl不生效

CDH在启动Sentry后/user/hive/warehouse这个目录 hdfs手动setacl会不生效首先确保hdfs参数dfs.namenode.acls.enabled=true;还有另一个...

MySQL优化器特性(五)单表访问路径

数据库的访问路径(access path)是指从表中获取数据的方式,一般可以通过扫描表或通过索引获取数据。想熟练掌握SQL优化技能,首先需要熟悉单表访问路径。本文先简单介绍MySQL支持的各种单表访问...

CDH时钟同步问题

CDH时钟同步问题

首先执行如下命令:查看chronyd是否启动systemctl status chronyd如果没启动执行如下命令启动systemctl restart chronyd每台检查时间状态chronyc...

apache Kyuubi部署及对接hive

apache Kyuubi部署及对接hive

1、背景客户重度使用spark sql,但是使用spark thriftserver存在各种各样的问题,我们选择使用kyuubi来替代spark thriftserver的使用2、安装包下载下载地址:...

发表评论    

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。