9. Clone-plugin

1 . Clone Plugin介绍

本地克隆:
启动克隆操作的MySQL服务器实例中的数据,克隆到同服务器或同节点上的一个目录里
远程克隆:
默认情况下,远程克隆操作会删除接受者(recipient)数据目录中的数据,并将其替换为捐赠者
(donor)的克隆数据。您也可以将数据克隆到接受者的其他目录,以避免删除现有数据。(可选)

2. 原理

PAGE COPY

这里有两个动作
开启redo archiving功能,从当前点开始存储新增的redo log,这样从当前点开始所有的增量修改
都不会丢失。同时上一步在page track的page被发送到目标端。确保当前点之前所做的变更一定发送
到目标端。
关于redo archiving,实际上这是官方早就存在的功能,主要用于官方的企业级备份工具,但这里
clone利用了该特性来维持增量修改产生的redo。
在开始前会做一次checkpoint, 开启一个后台线程log_archiver_thread()来做日志归档。当有
新的写入时(notify_about_advanced_write_lsn)也会通知他去archive。当arch_log_sys处
于活跃状态时,他会控制日志写入以避免未归档的日志被覆盖(log_writer_wait_on_archiver),
注意如果log_writer等待时间过长的话, archive任务会被中断掉.

Redo Copy

停止Redo Archiving", 所有归档的日志被发送到目标端,这些日志包含了从page copy阶段开始到
现在的所有日志,另外可能还需要记下当前的复制点,例如最后一个事务提交时的binlog位点或者
gtid信息,在系统页中可以找到

Done

目标端重启实例,通过crash recovery将redo log应用上去。

3. 限制

官方文档列出的一些限制:

4. 应用

4.1 本地
4.1.1 加载插件

INSTALL PLUGIN clone SONAME 'mysql_clone.so';[mysqld]
plugin-load-add=mysql_clone.so
clone=FORCE_PLUS_PERMANENT
SELECT PLUGIN_NAME, PLUGIN_STATUS
FROM INFORMATION_SCHEMA.PLUGINS
WHERE PLUGIN_NAME LIKE 'clone';

4.1.2 创建克隆专用用户

CREATE USER clone_user@'%' IDENTIFIED by 'password';
GRANT BACKUP_ADMIN ON *.* TO 'clone_user';

BACKUP_ADMIN是MySQL8.0 才有的备份锁的权限

4.1.3 本地克隆

[root@db01 3306]# mkdir -p /data/test/
[root@db01 3306]# chown -R mysql.mysql /data/
mysql -uclone_user -ppassword
CLONE LOCAL DATA DIRECTORY = '/data/test/clonedir';

root下观测状态

db01 [(none)]> SELECT STAGE, STATE, END_TIME FROM
performance_schema.clone_progress;
+-----------+-------------+----------------------------+
| STAGE   | STATE    | END_TIME          |
+-----------+-------------+----------------------------+
| DROP DATA | Completed  | 2020-04-20 21:13:19.264003 |
| FILE COPY | Completed  | 2020-04-20 21:13:20.025444 |
| PAGE COPY | Completed  | 2020-04-20 21:13:20.028552 |
| REDO COPY | Completed  | 2020-04-20 21:13:20.030042 |
| FILE SYNC | Completed  | 2020-04-20 21:13:20.439444 |
| RESTART  | Not Started | NULL            |
| RECOVERY | Not Started | NULL            |
+-----------+-------------+----------------------------+
7 rows in set (0.00 sec)

日志观测:

set global log_error_verbosity=3;
tail -f db01.err
CLONE LOCAL DATA DIRECTORY = '/data/test/clonedir1';

4.1.4 启动新实例

[root@db01 clonedir]# mysqld_safe --datadir=/data/test/clonedir --
port=3333 --socket=/tmp/mysql3333.sock --user=mysql --mysqlx=OFF &

远程克隆

实验中,未完待续…

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值