mysql8 clone plugin调研

Clone插件允许从本地和远程克隆数据,克隆后的数据是一个存储于innodb里的数据的物理快照,包括schemas,tables,tablespaces,以及数据找字典元数据.克隆后的数据包含了一个全功能数据目录,可以使用clone plugin提供mysql服务

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

时间关系只阅读了部分官方文档,可能有所缺失.

clone远程数据

一. Clone 语法

CLONE INSTANCE FROM USER@HOST:PORT

IDENTIFIED BY 'password'

[DATA DIRECTORY [=] 'clone_dir']

[REQUIRE [NO] SSL];

可以指定clone目录,如果donor实例的数据存放在数据目录之外使用

二. 先决条件包括:

1.donor需要授权BACKUP_ADMIN用户访问和传输数据,并且在clone操作期间阻止DDL操作

2.在recipient上需要有CLONE_ADMIN权限,包含BACKUP_ADMINandSHUTDOWN权限

3. MYSQL8.0.17版本

4. donor和recipient 必须在相同的操作系统和平台上,比如相同的操作系统及64为平台

5. recipient 必须有足够的空间,包括对donor数据的大小的估计以及recipient数据目录及指定数据目录的评估

6. clone 操作必须能够访问指定的非数据目录的数据及创建表空间文件,可以通过INFORMATION_SCHEMA.FILES查询存储位置,SHOW PLUGINS或者查询INFORMATION_SCHEMA.PLUGINS

7. clone插件必须在donor,recipient上激活,包含相同的字符集和collation

8. donor和recipient的innodb_page_sizeandinnodb_data_file_path必须设置.innodb_data_file_path(默认是ibdata1:12M:autoextend)数据文件大小值必须相同.如果clone加密或者页压缩的数据,两端必须有相同的文件系统块大小.对于页加密数据,recipient的文件系统必须支持sparse files and hole punching  具体见Section 5.6.7.4, “Cloning Encrypted Data”, andSection 5.6.7.5, “Cloning Compressed Data”.

9. 安全连接是需要的如果clone加密数据

10. recipient 的clone_valid_donor_list 设置必须包含donor的主机地址,也就是提前加白名单,如果是mgr不需要设置

11.同时只能有一个clone在跑

三. 以下条件也适用:

1.undo表空间文件名必须是唯一的,防止误覆盖

2.默认情况下recipient的mysql实例会重起,需要有一个监控进程来监视重启操作防止停止后没有启动导致报错,后继需要手动完成

3. 一些参数控制远程clone操作,具体见Section 5.6.7.12, “Clone System Variables”.

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

四. 关于锁的问题:

1. BACKUP_ADMIN 权限允许LOCK INSTANCE FOR BACKUP,允许当线上备份时执行DML操作而不影响数据的一致性.

2. LOCK INSTANCE FOR BACKUP不允许repair,truncate,optimize table以及账号管理操作.操作修改innodb文件而不记录在innodb redo log,也会被block

3. LOCK INSTANCE FOR BACKUP只允许用户的临时表的DDL,当备份期间用户临时表的

4.不影响binlog的生成

5.一个备份使用LOCK INSTANCE FOR BACKUP所获取的锁和flush table with read lock是独立的

6. LOCK INSTANCE FOR BACKUP 等待获取锁的时间取决于lock_wait_timeout的设定

原文: https://dev.mysql.com/doc/refman/8.0/en/lock-instance-for-backup.html

Note:原文中并没有具体说明是否允许增加删减列和索引

总结:通过观察这些先决条件,clone数据是对文件块的复制及传输,可以在不阻塞dml操作下进行clone,是否完全阻塞DDL还需要后继测试验证.

==================

更新: 已测试在session A 手动lock instance for backup ,之后在session B 提交dml操作,并没有影响,不过添加ddl操作:增加删除列,索引,drop table,truncate table会被阻塞

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容