MySQL8.0.17 - 初探 Clone Plugin

创业指导 阅读(1725)
明升88体育

MySQL 8.0.17引入了一个重量级的功能:克隆插件。允许用户创建当前实例的本地或远程克隆。在您希望快速构建副本备份或向组复制添加新成员的某些情况下,这尤其有用。本文主要尝试发挥此功能,并试图解释其实现的机制是什么。

我们以本地克隆为例。由于删除了网络部分,因此理解起来相对简单。不要过度接触代码部分,只需做一个简单的原理解释

实施例

本地克隆

本地克隆不需要启动额外的mysqld,sql语句,指定目标目录可以是:

需要BACKUP_ADMIN权限

远程克隆:

MySQL的> SET GLOBAL clone_valid_donor_list='example.donor.host.com: 3306';

MySQL的> CLONE INSTANCE FROM: 3306

MySQL的> CLONE INSTANCE FROM: 3306

需要指定绝对路径,并且路径目录不能存在

在接收机器上启动mysqld,执行上面的语句连接到目标机器,可以将数据从目标机器克隆到本地,注意如果没有指定数据目录,则默认配置目录,现有文件将被清理,克隆完成后重新启动

克隆插件需要安装在两个实例上

必须具有相同的字符集设置

官方文档中列出了一些限制:

不允许执行包含truncate table的Ddl //在clone

期间被阻止

无法从不同的MySQL服务器版本克隆实例。捐赠者和接收者必须具有相同的MySQL服务器版本。

远程克隆操作不支持mysqlx_port指定的X协议端口

克隆插件不支持克隆MySQL服务器配置

不支持克隆binlog

克隆插件仅克隆存储在InnoDB中的数据。未克隆其他存储引擎数据

不支持通过MySQL路由器连接到捐赠者MySQL服务器实例。

本地克隆操作不支持克隆使用绝对路径创建的常规表空间。与源表空间文件具有相同路径的克隆表空间文件将导致冲突。

主要流程

主要过程包括以下过程:

[INIT] ---> [文件复制] ---> [PAGE COPY] ---> [重新复制] - > [完成]

INIT阶段

需要持有备份锁以防止ddl继续进行

文件复制

根据文件复制,并打开页面跟踪功能,记录复制过程中修改的页面。此时,在刷新页面阶段将buf_pool-> gt_track_page_lsn设置为当前lsn,将track_page_lsn设置为:

PAGE COPY

这里有两个动作

启用重做归档功能以存储当前点的新重做日志,以便所有增量更改不会从当前点丢失。

同时,页面轨道中的页面被发送到目标端。确保将当前点之前所做的更改发送到目标端

关于重做归档,这实际上是用于官方企业备份工具的官方功能,但是克隆使用此功能来维护由增量修改生成的重做。检查点将在启动之前完成,后台线程log_archiver_thread()将打开以进行日志存档。当有新的write()时也会通知他存档

当arch_log_sys处于活动状态时,他控制日志写入以避免覆盖未记录的日志()。请注意,如果log_writer等待时间过长,则归档任务将被中断

重做复制

停止重做存档',所有存档日志都会发送到目标。这些日志包含从页面复制阶段到当前的所有日志,还可能需要记录当前复制点,例如上次事务提交的binlog位。点或gtid信息可以在系统页面中找到

完成

目标重新启动实例并通过崩溃恢复应用重做日志。

参考文档

官方博客:克隆:创建MySQL实例副本

克隆插件

WL#9209: InnoDB:克隆本地副本

WL#9210: InnoDB:克隆远程副本

WL#9682: InnoDB:支持克隆加密和压缩数据库

WL#9211: InnoDB:克隆复制坐标

WL#: InnoDB:克隆远程配置

作者:zhaiwx_yinfeng

阅读原文

本文是云栖社区的原创内容,未经许可,不得转载。

阿里云云栖社区

0.8

2019.08.14 12: 10

字数1031

MySQL 8.0.17引入了一个重量级的功能:克隆插件。允许用户创建当前实例的本地或远程克隆。在您希望快速构建副本备份或向组复制添加新成员的某些情况下,这尤其有用。本文主要尝试发挥此功能,并试图解释其实现的机制是什么。

我们以本地克隆为例。由于删除了网络部分,因此理解起来相对简单。不要过度接触代码部分,只需做一个简单的原理解释

实施例

本地克隆

本地克隆不需要启动额外的mysqld,sql语句,指定目标目录可以是:

需要BACKUP_ADMIN权限

远程克隆:

MySQL的> SET GLOBAL clone_valid_donor_list='example.donor.host.com: 3306';

MySQL的> CLONE INSTANCE FROM: 3306

MySQL的> CLONE INSTANCE FROM: 3306

需要指定绝对路径,并且路径目录不能存在

在接收机器上启动mysqld,执行上面的语句连接到目标机器,可以将数据从目标机器克隆到本地,注意如果没有指定数据目录,则默认配置目录,现有文件将被清理,克隆完成后重新启动

克隆插件需要安装在两个实例上

必须具有相同的字符集设置

官方文档中列出了一些限制:

不允许执行包含truncate table的Ddl //在clone

期间被阻止

无法从不同的MySQL服务器版本克隆实例。捐赠者和接收者必须具有相同的MySQL服务器版本。

远程克隆操作不支持mysqlx_port指定的X协议端口

克隆插件不支持克隆MySQL服务器配置

不支持克隆binlog

克隆插件仅克隆存储在InnoDB中的数据。未克隆其他存储引擎数据

不支持通过MySQL路由器连接到捐赠者MySQL服务器实例。

本地克隆操作不支持克隆使用绝对路径创建的常规表空间。与源表空间文件具有相同路径的克隆表空间文件将导致冲突。

主要流程

主要过程包括以下过程:

[INIT] ---> [文件复制] ---> [PAGE COPY] ---> [重新复制] - > [完成]

INIT阶段

需要持有备份锁以防止ddl继续进行

文件复制

根据文件复制,并打开页面跟踪功能,记录复制过程中修改的页面。此时,在刷新页面阶段将buf_pool-> gt_track_page_lsn设置为当前lsn,将track_page_lsn设置为:

PAGE COPY

这里有两个动作

启用重做归档功能以存储当前点的新重做日志,以便所有增量更改不会从当前点丢失。

同时,页面轨道中的页面被发送到目标端。确保将当前点之前所做的更改发送到目标端

关于重做归档,这实际上是用于官方企业备份工具的官方功能,但是克隆使用此功能来维护由增量修改生成的重做。检查点将在启动之前完成,后台线程log_archiver_thread()将打开以进行日志存档。当有新的write()时也会通知他存档

当arch_log_sys处于活动状态时,他控制日志写入以避免覆盖未记录的日志()。请注意,如果log_writer等待时间过长,则归档任务将被中断

重做复制

停止重做存档',所有存档日志都会发送到目标。这些日志包含从页面复制阶段到当前的所有日志,还可能需要记录当前复制点,例如上次事务提交的binlog位。点或gtid信息可以在系统页面中找到

完成

目标重新启动实例并通过崩溃恢复应用重做日志。

参考文档

官方博客:克隆:创建MySQL实例副本

克隆插件

WL#9209: InnoDB:克隆本地副本

WL#9210: InnoDB:克隆远程副本

WL#9682: InnoDB:支持克隆加密和压缩数据库

WL#9211: InnoDB:克隆复制坐标

WL#: InnoDB:克隆远程配置

作者:zhaiwx_yinfeng

阅读原文

本文是云栖社区的原创内容,未经许可,不得转载。

MySQL 8.0.17引入了一个重量级的功能:克隆插件。允许用户创建当前实例的本地或远程克隆。在您希望快速构建副本备份或向组复制添加新成员的某些情况下,这尤其有用。本文主要尝试发挥此功能,并试图解释其实现的机制是什么。

我们以本地克隆为例。由于删除了网络部分,因此理解起来相对简单。不要过度接触代码部分,只需做一个简单的原理解释

实施例

本地克隆

本地克隆不需要启动额外的mysqld,sql语句,指定目标目录可以是:

需要BACKUP_ADMIN权限

远程克隆:

MySQL的> SET GLOBAL clone_valid_donor_list='example.donor.host.com: 3306';

MySQL的> CLONE INSTANCE FROM: 3306

MySQL的> CLONE INSTANCE FROM: 3306

需要指定绝对路径,并且路径目录不能存在

在接收机器上启动mysqld,执行上面的语句连接到目标机器,可以将数据从目标机器克隆到本地,注意如果没有指定数据目录,则默认配置目录,现有文件将被清理,克隆完成后重新启动

克隆插件需要安装在两个实例上

必须具有相同的字符集设置

官方文档中列出了一些限制:

不允许执行包含truncate table的Ddl //在clone

期间被阻止

无法从不同的MySQL服务器版本克隆实例。捐赠者和接收者必须具有相同的MySQL服务器版本。

远程克隆操作不支持mysqlx_port指定的X协议端口

克隆插件不支持克隆MySQL服务器配置

不支持克隆binlog

克隆插件仅克隆存储在InnoDB中的数据。未克隆其他存储引擎数据

不支持通过MySQL路由器连接到捐赠者MySQL服务器实例。

本地克隆操作不支持克隆使用绝对路径创建的常规表空间。与源表空间文件具有相同路径的克隆表空间文件将导致冲突。

主要流程

主要过程包括以下过程:

[INIT] ---> [文件复制] ---> [PAGE COPY] ---> [重新复制] - > [完成]

INIT阶段

需要持有备份锁以防止ddl继续进行

文件复制

根据文件复制,并打开页面跟踪功能,记录复制过程中修改的页面。此时,在刷新页面阶段将buf_pool-> gt_track_page_lsn设置为当前lsn,将track_page_lsn设置为:

PAGE COPY

这里有两个动作

启用重做归档功能以存储当前点的新重做日志,以便所有增量更改不会从当前点丢失。

同时,页面轨道中的页面被发送到目标端。确保将当前点之前所做的更改发送到目标端

关于重做归档,这实际上是用于官方企业备份工具的官方功能,但是克隆使用此功能来维护由增量修改生成的重做。检查点将在启动之前完成,后台线程log_archiver_thread()将打开以进行日志存档。当有新的write()时也会通知他存档

当arch_log_sys处于活动状态时,他控制日志写入以避免覆盖未记录的日志()。请注意,如果log_writer等待时间过长,则归档任务将被中断

重做复制

停止重做存档',所有存档日志都会发送到目标。这些日志包含从页面复制阶段到当前的所有日志,还可能需要记录当前复制点,例如上次事务提交的binlog位。点或gtid信息可以在系统页面中找到

完成

目标重新启动实例并通过崩溃恢复应用重做日志。

参考文档

官方博客:克隆:创建MySQL实例副本

克隆插件

WL#9209: InnoDB:克隆本地副本

WL#9210: InnoDB:克隆远程副本

WL#9682: InnoDB:支持克隆加密和压缩数据库

WL#9211: InnoDB:克隆复制坐标

WL#: InnoDB:克隆远程配置

作者:zhaiwx_yinfeng

阅读原文

本文是云栖社区的原创内容,未经许可,不得转载。