MySQL8 中文参考(二十二)(2)

本文涉及的产品
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
日志服务 SLS,月写入数据量 50GB 1个月
简介: MySQL8 中文参考(二十二)

MySQL8 中文参考(二十二)(1)https://developer.aliyun.com/article/1566117


7.6.6.4 版本标记参考

以下讨论作为这些版本标记元素的参考:

版本标记函数

版本标记插件库包含多个函数。一组函数允许操作和检查服务器的版本标记列表。另一组函数允许锁定和解锁版本标记。调用任何版本标记函数都需要VERSION_TOKEN_ADMIN权限(或已弃用的SUPER权限)。

以下函数允许创建、更改、删除和检查服务器的版本标记列表。对*name_listtoken_list*参数的解释(包括空格处理)如第 7.6.6.3 节“使用版本标记”所述,该节提供了关于指定标记语法的详细信息,以及额外的示例。

  • version_tokens_delete(*name_list*)
    使用*name_list参数从服务器的版本标记列表中删除标记,并返回指示操作结果的二进制字符串。name_list*是一个以分号分隔的版本标记名称列表,用于删除。
mysql> SELECT version_tokens_delete('tok1;tok3');
+------------------------------------+
| version_tokens_delete('tok1;tok3') |
+------------------------------------+
| 2 version tokens deleted.          |
+------------------------------------+
  • NULL参数被视为空字符串,对标记列表没有影响。
    version_tokens_delete() 删除其参数中命名的标记(如果存在)。(删除不存在的标记不会报错。)要清除标记列表而不知道列表中有哪些标记,可以传递NULL或一个不包含任何标记的字符串给version_tokens_set()
mysql> SELECT version_tokens_set(NULL);
+------------------------------+
| version_tokens_set(NULL)     |
+------------------------------+
| Version tokens list cleared. |
+------------------------------+
mysql> SELECT version_tokens_set('');
+------------------------------+
| version_tokens_set('')       |
+------------------------------+
| Version tokens list cleared. |
+------------------------------+
  • version_tokens_edit(*token_list*)
    使用*token_list参数修改服务器的版本标记列表,并返回指示操作结果的二进制字符串。token_list*是一个以分号分隔的*name*=*value*对列表,指定要定义的每个标记的名称及其值。如果标记存在,则其值将使用给定值更新。如果标记不存在,则将使用给定值创建标记。如果参数为NULL或一个不包含任何标记的字符串,则标记列表保持不变。
mysql> SELECT version_tokens_set('tok1=value1;tok2=value2');
+-----------------------------------------------+
| version_tokens_set('tok1=value1;tok2=value2') |
+-----------------------------------------------+
| 2 version tokens set.                         |
+-----------------------------------------------+
mysql> SELECT version_tokens_edit('tok2=new_value2;tok3=new_value3');
+--------------------------------------------------------+
| version_tokens_edit('tok2=new_value2;tok3=new_value3') |
+--------------------------------------------------------+
| 2 version tokens updated.                              |
+--------------------------------------------------------+
  • version_tokens_set(*token_list*)
    用*token_list参数中定义的令牌替换服务器的版本令牌列表,并返回指示操作结果的二进制字符串。token_list*是一个以分号分隔的*name*=*value*对列表,指定要定义的每个令牌的名称及其值。如果参数为NULL或包含零个令牌的字符串,则清除令牌列表。
mysql> SELECT version_tokens_set('tok1=value1;tok2=value2');
+-----------------------------------------------+
| version_tokens_set('tok1=value1;tok2=value2') |
+-----------------------------------------------+
| 2 version tokens set.                         |
+-----------------------------------------------+
  • version_tokens_show()
    将服务器的版本令牌列表作为包含以分号分隔的*name*=*value*对列表的二进制字符串返回。
mysql> SELECT version_tokens_show();
+--------------------------+
| version_tokens_show()    |
+--------------------------+
| tok2=value2;tok1=value1; |
+--------------------------+

以下函数允许锁定和解锁版本令牌:

mysql> SELECT version_tokens_lock_exclusive('lock1', 'lock2', 10);
+-----------------------------------------------------+
| version_tokens_lock_exclusive('lock1', 'lock2', 10) |
+-----------------------------------------------------+
|                                                   1 |
+-----------------------------------------------------+
mysql> SELECT version_tokens_lock_shared('lock1', 'lock2', 10);
+--------------------------------------------------+
| version_tokens_lock_shared('lock1', 'lock2', 10) |
+--------------------------------------------------+
|                                                1 |
+--------------------------------------------------+
  • version_tokens_unlock()
    释放使用version_tokens_lock_exclusive()version_tokens_lock_shared()在当前会话中获取的所有锁。
mysql> SELECT version_tokens_unlock();
+-------------------------+
| version_tokens_unlock() |
+-------------------------+
|                       1 |
+-------------------------+

锁定函数具有以下特征:

  • 返回值为非零表示成功。否则,将发生错误。
  • 令牌名称为字符串。
  • 与操作服务器令牌列表的函数的参数处理相反,不会忽略围绕令牌名称参数的空白,并且允许使用=;字符。
  • 可以锁定不存在的令牌名称。这不会创建令牌。
  • 超时值是表示在超时前等待获取锁的时间(以秒为单位)的非负整数。如果超时为 0,则不会等待,如果无法立即获取锁,则函数会产生错误。
  • 版本令牌锁定函数基于第 7.6.9.1 节,“锁定服务”中描述的锁定服务。
版本令牌系统变量

版本令牌支持以下系统变量。除非安装了版本令牌插件(请参阅第 7.6.6.2 节,“安装或卸载版本令牌”),否则这些变量不可用。

系统变量:

  • version_tokens_session
命令行格式 --version-tokens-session=value
系统变量 version_tokens_session
范围 全局,会话
动态
SET_VAR提示适用
类型 字符串
默认值 NULL
  • 此变量的会话值指定客户端版本令牌列表,并指示客户端会话需要服务器版本令牌列表具有的令牌。如果version_tokens_session变量为NULL(默认值)或具有空值,则任何服务器版本令牌列表都匹配。(实际上,空值会禁用匹配要求。)如果version_tokens_session变量具有非空值,则会导致会话发送到服务器的任何语句的值与服务器版本令牌列表不匹配时出错。在以下情况下会发生不匹配:
  • version_tokens_session值中的令牌名称不在服务器令牌列表中。在这种情况下,会发生ER_VTOKEN_PLUGIN_TOKEN_NOT_FOUND错误。
  • version_tokens_session值中的令牌值与服务器令牌列表中相应令牌的值不同。在这种情况下,会发生ER_VTOKEN_PLUGIN_TOKEN_MISMATCH错误。
  • 服务器版本令牌列表包含一个未在version_tokens_session值中命名的令牌并不构成不匹配。
    假设一个管理应用程序已将服务器令牌列表设置如下:
mysql> SELECT version_tokens_set('tok1=a;tok2=b;tok3=c');
+--------------------------------------------+
| version_tokens_set('tok1=a;tok2=b;tok3=c') |
+--------------------------------------------+
| 3 version tokens set.                      |
+--------------------------------------------+
  • 客户端通过设置其version_tokens_session值来注册服务器需要匹配的令牌。然后,对于客户端发送的每个后续语句,服务器会将其令牌列表与客户端version_tokens_session值进行比较,如果不匹配则产生错误:
mysql> SET @@SESSION.version_tokens_session = 'tok1=a;tok2=b';
mysql> SELECT 1;
+---+
| 1 |
+---+
| 1 |
+---+
mysql> SET @@SESSION.version_tokens_session = 'tok1=b';
mysql> SELECT 1;
ERROR 3136 (42000): Version token mismatch for tok1\. Correct value a
  • 第一个SELECT成功,因为客户端令牌tok1tok2存在于服务器令牌列表中,并且每个令牌在服务器列表中具有相同的值。第二个SELECT失败,因为虽然tok1存在于服务器令牌列表中,但其值与客户端指定的值不同。
    此时,除非服务器令牌列表发生变化以匹配,否则客户端发送的任何语句都会失败。假设管理应用程序将服务器令牌列表更改如下:
mysql> SELECT version_tokens_edit('tok1=b');
+-------------------------------+
| version_tokens_edit('tok1=b') |
+-------------------------------+
| 1 version tokens updated.     |
+-------------------------------+
mysql> SELECT version_tokens_show();
+-----------------------+
| version_tokens_show() |
+-----------------------+
| tok3=c;tok1=b;tok2=b; |
+-----------------------+
  • 现在客户端的version_tokens_session值与服务器令牌列表匹配,客户端可以再次成功执行语句:
mysql> SELECT 1;
+---+
| 1 |
+---+
| 1 |
+---+
  • version_tokens_session_number
命令行格式 --version-tokens-session-number=#
系统变量 version_tokens_session_number
范围 全局,会话
动态
SET_VAR提示适用
类型 整数
默认值 0
  • 此变量仅供内部使用。

7.6.7 克隆插件

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

7.6.7.1 安装克隆插件

7.6.7.2 本地克隆数据

7.6.7.3 克隆远程数据

7.6.7.4 克隆和并发 DDL

7.6.7.5 克隆加密数据

7.6.7.6 克隆压缩数据

7.6.7.7 用于复制的克隆

7.6.7.8 克隆操作期间创建的目录和文件

7.6.7.9 处理远程克隆操作失败

7.6.7.10 监控克隆操作

7.6.7.11 停止克隆操作

7.6.7.12 克隆系统变量参考

7.6.7.13 克隆系统变量

7.6.7.14 克隆插件限制

克隆插件,引入于 MySQL 8.0.17,允许在本地或从远程 MySQL 服务器实例克隆数据。克隆数据是存储在 InnoDB 中的数据的物理快照,包括模式、表、表空间和数据字典元数据。克隆数据包括一个完全功能的数据目录,允许使用克隆插件进行 MySQL 服务器的配置。

图 7.1 本地克隆操作

本地克隆操作将数据从启动克隆操作的 MySQL 服务器实例克隆到运行 MySQL 服务器实例的同一服务器或节点上的目录。

图 7.2 远程克隆操作

远程克隆操作涉及本地 MySQL 服务器实例(“接收方”),在该实例上启动克隆操作,并远程 MySQL  服务器实例(“捐赠方”),源数据位于该实例上。当在接收方上启动远程克隆操作时,克隆数据通过网络从捐赠方传输到接收方。默认情况下,远程克隆操作会在从捐赠方克隆数据之前,从接收方数据目录中删除现有的用户创建的数据(模式、表、表空间)和二进制日志。可选地,您可以将数据克隆到接收方的不同目录,以避免从当前接收方数据目录中删除数据。

通过本地克隆操作克隆的数据与通过远程克隆操作克隆的数据没有任何区别。这两种操作都会克隆相同的数据集。

克隆插件支持复制。除了克隆数据外,克隆操作还会从捐赠者中提取和传输复制坐标,并在接收者上应用这些坐标,从而使克隆插件能够为配置组复制成员和副本提供服务。使用克隆插件进行配置比复制大量事务要快得多且更有效(请参阅第  7.6.7.7  节,“用于复制的克隆”)。组复制成员还可以配置为使用克隆插件作为恢复的替代方法,以便成员自动选择从种子成员检索组数据的最有效方式。有关更多信息,请参阅第  20.5.4.2 节,“用于分布式恢复的克隆”。

克隆插件支持克隆加密和页面压缩的数据。请参阅第 7.6.7.5 节,“克隆加密数据”,以及第 7.6.7.6 节,“克隆压缩数据”。

在使用克隆插件之前,必须先安装它。有关安装说明,请参阅第 7.6.7.1 节,“安装克隆插件”。有关克隆说明,请参阅第 7.6.7.2 节,“本地数据克隆”,以及第 7.6.7.3 节,“远程数据克隆”。

提供了用于监视克隆操作的性能模式表和工具。请参阅第 7.6.7.10 节,“监视克隆操作”。

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

7.6.7.1 安装克隆插件

本节描述了如何安装和配置克隆插件。对于远程克隆操作,克隆插件必须安装在捐赠者和接收者 MySQL 服务器实例上。

有关安装或卸载插件的一般信息,请参见 Section 7.6.1, “Installing and Uninstalling Plugins”。

要使服务器可用,插件库文件必须位于 MySQL 插件目录中(由 plugin_dir 系统变量命名的目录)。如有必要,在服务器启动时设置 plugin_dir 的值,告诉服务器插件目录的位置。

插件库文件基本名称为 mysql_clone.so。文件名后缀因平台而异(例如,Unix 和类 Unix 系统使用 .so,Windows 使用 .dll)。

要在服务器启动时加载插件,请使用 --plugin-load-add 选项命名包含插件的库文件。使用此插件加载方法,每次服务器启动时都必须提供该选项。例如,将以下行放入您的 my.cnf 文件中,根据需要调整插件库文件名扩展名以适应您的平台。(插件库文件名扩展名取决于您的平台。Unix 和类 Unix 系统通常使用 .so,Windows 使用 .dll。)

[mysqld]
plugin-load-add=mysql_clone.so

修改 my.cnf 后,重新启动服务器以使新设置生效。

注意

--plugin-load-add 选项在升级过程中重新启动服务器时无法用于加载克隆插件。例如,在从先前的 MySQL 版本升级到 MySQL 8.0 后,尝试使用 plugin-load-add=mysql_clone.so 重新启动服务器会导致以下错误:[ERROR] [MY-013238] [Server] Error installing plugin ‘clone’: Cannot install during upgrade。解决方法是在尝试使用 plugin-load-add=mysql_clone.so 启动服务器之前先升级服务器。

或者,要在运行时加载插件,请使用以下语句,根据需要调整平台的 .so 后缀:

INSTALL PLUGIN clone SONAME 'mysql_clone.so';

INSTALL PLUGIN 加载插件,并在 mysql.plugins 系统表中注册,以使插件在每次正常服务器启动时自动加载,无需 --plugin-load-add

要验证插件安装情况,请检查信息模式PLUGINS表,或者使用SHOW PLUGINS语句(参见 Section 7.6.2, “Obtaining Server Plugin Information”)。例如:

mysql> SELECT PLUGIN_NAME, PLUGIN_STATUS
       FROM INFORMATION_SCHEMA.PLUGINS
       WHERE PLUGIN_NAME = 'clone';
+------------------------+---------------+
| PLUGIN_NAME            | PLUGIN_STATUS |
+------------------------+---------------+
| clone                  | ACTIVE        |
+------------------------+---------------+

如果插件初始化失败,请检查服务器错误日志以获取克隆或插件相关的诊断消息。

如果插件之前已经使用INSTALL PLUGIN注册过,或者使用--plugin-load-add加载过,您可以在服务器启动时使用--clone选项来控制插件的激活状态。例如,要在启动时加载插件并防止在运行时被移除,可以使用以下选项:

[mysqld]
plugin-load-add=mysql_clone.so
clone=FORCE_PLUS_PERMANENT

如果您希望防止服务器在没有克隆插件的情况下运行,请使用--clone并设置值为FORCEFORCE_PLUS_PERMANENT,以强制服务器启动失败,如果插件初始化失败。

有关插件激活状态的更多信息,请参阅 Controlling Plugin Activation State。

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

7.6.7.2 本地克隆数据

克隆插件支持以下语法用于本地克隆数据;即从本地 MySQL 数据目录克隆数据到同一服务器或节点上的另一个目录:

CLONE LOCAL DATA DIRECTORY [=] '*clone_dir*';

要使用CLONE语法,必须安装克隆插件。有关安装说明,请参见第 7.6.7.1 节,“安装克隆插件”。

执行CLONE LOCAL DATA DIRECTORY语句需要*BACKUP_ADMIN*权限。

mysql> GRANT BACKUP_ADMIN ON *.* TO '*clone_user*';

其中*clone_user*是执行克隆操作的 MySQL 用户。您选择执行克隆操作的用户可以是具有*BACKUP_ADMIN*权限的任何 MySQL 用户。

以下示例演示了本地克隆数据的操作:

mysql> CLONE LOCAL DATA DIRECTORY = '*/path/to/clone_dir*';

其中*/path/to/clone_dir是数据被克隆到的本地目录的完整路径。需要绝对路径,并且指定的目录(“clone_dir*”)不得存在,但指定路径必须是一个已存在的路径。MySQL 服务器必须具有必要的写访问权限以创建目录。

注意

本地克隆操作不支持克隆存储在数据目录之外的用户创建的表或表空间。尝试克隆这样的表或表空间会导致以下错误:ERROR 1086 (HY000): File ‘/path/to/tablespace_name.ibd’ already exists. 尝试克隆具有与源表空间相同路径的表空间会导致冲突,因此被禁止。

所有其他用户创建的InnoDB表和表空间,InnoDB系统表空间,重做日志和撤销表空间都会被克隆到指定目录。

如果需要,您可以在克隆操作完成后在克隆目录上启动 MySQL 服务器。

$> mysqld_safe --datadir=*clone_dir*

其中*clone_dir*是数据被克隆到的目录。

有关监视克隆操作状态和进度的信息,请参见第 7.6.7.10 节,“监视克隆操作”。

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

7.6.7.3 克隆远程数据

克隆插件支持以下语法用于克隆远程数据;即从远程 MySQL 服务器实例(捐赠者)克隆数据并将其传输到发起克隆操作的 MySQL 实例(接收方)。

CLONE INSTANCE FROM '*user*'@'*host*':*port*
IDENTIFIED BY '*password*'
[DATA DIRECTORY [=] '*clone_dir*']
[REQUIRE [NO] SSL];

其中:

  • *user*是在捐赠者 MySQL 服务器实例上的克隆用户。
  • *password**user*的密码。
  • *host*是捐赠者 MySQL 服务器实例的主机名地址。不支持 Internet 协议版本 6(IPv6)地址格式。可以使用 IPv6 地址的别名。IPv4 地址可以直接使用。
  • *port*是捐赠者 MySQL 服务器实例的端口号。(不支持由mysqlx_port指定的 X 协议端口。也不支持通过 MySQL 路由器连接到捐赠者 MySQL 服务器实例。)
  • DATA DIRECTORY [=] '*clone_dir*'是一个可选子句,用于指定您正在克隆的数据在接收方的目录。如果不想从接收方数据目录中删除现有的用户创建数据(模式、表、表空间)和二进制日志,则使用此选项。需要绝对路径,并且目录不能存在。MySQL 服务器必须具有必要的写访问权限以创建目录。
    当不使用可选的DATA DIRECTORY [=] '*clone_dir*'子句时,克隆操作会从接收方数据目录中删除用户创建的数据(模式、表、表空间)和二进制日志,将新数据克隆到接收方数据目录,并在之后自动重新启动服务器。
  • [REQUIRE [NO] SSL]明确指定在通过网络传输克隆数据时是否使用加密连接。如果无法满足明确规定,将返回错误。如果未指定  SSL  子句,默认情况下,克隆尝试建立加密连接,如果安全连接尝试失败,则退回到不安全连接。无论是否指定了此子句,克隆加密数据时都需要安全连接。有关更多信息,请参见为克隆配置加密连接。

注意

默认情况下,位于捐赠者 MySQL 服务器实例数据目录中的用户创建的InnoDB表和表空间将被克隆到接收者 MySQL 服务器实例的数据目录中。如果指定了DATA DIRECTORY [=] '*clone_dir*'子句,则它们将被克隆到指定目录。

用户创建的InnoDB表和表空间,如果位于捐赠 MySQL 服务器实例上的数据目录之外,则会被克隆到接收 MySQL 服务器实例上的相同路径。如果表或表空间已经存在,则会报告错误。

默认情况下,InnoDB系统表空间、重做日志和撤销表空间会被克隆到在捐赠端配置的相同位置(由innodb_data_home_dirinnodb_data_file_pathinnodb_log_group_home_dirinnodb_undo_directory定义)。如果指定了DATA DIRECTORY [=] '*clone_dir*'子句,则这些表空间和日志会被克隆到指定目录。

远程克隆先决条件

要执行克隆操作,克隆插件必须在捐赠端和接收端的 MySQL 服务器实例上处于活动状态。有关安装说明,请参阅 Section 7.6.7.1, “Installing the Clone Plugin”。

在捐赠端和接收端需要一个 MySQL 用户来执行克隆操作(“克隆用户”)。

  • 在捐赠端,克隆用户需要BACKUP_ADMIN权限,以便在克隆操作期间访问和传输来自捐赠端的数据,并阻止并发的  DDL。在 MySQL 8.0.27 之前,克隆操作期间会在捐赠端阻止并发的 DDL。从 MySQL 8.0.27  开始,默认情况下在捐赠端允许并发的 DDL。请参阅 Section 7.6.7.4, “Cloning and Concurrent DDL”。
  • 在接收端,克隆用户需要CLONE_ADMIN权限来替换接收端数据,在克隆操作期间阻止 DDL,并自动重新启动服务器。CLONE_ADMIN权限隐含包括BACKUP_ADMINSHUTDOWN权限。

包括创建克隆用户和授予所需权限的说明在接下来的远程克隆示例中。

当执行CLONE INSTANCE语句时,会检查以下先决条件:

  • 克隆插件在 MySQL 8.0.17 及更高版本中受支持。捐赠端和接收端必须是相同的 MySQL 服务器系列,例如 8.0.37 和 8.0.41。在 8.0.37 之前的版本中,它们必须是相同的点发布版本。
mysql> SHOW VARIABLES LIKE 'version';
 +---------------+--------+
| Variable_name | Value  |
+---------------+--------+
| version       | 8.0.36 |
+---------------+--------+
  • 从捐赠 MySQL 服务器实例克隆到相同版本和发布版本的热修复 MySQL 服务器实例在 MySQL 8.0.26 中得到支持。
    从系列内不同的点发布版本克隆是从 MySQL 8.0.37 开始支持的。对于早于 8.0.37 的版本,仍然适用先前的限制。例如,不允许将 8.0.36 克隆到 8.0.42 或反之亦然。
  • 捐赠者和接收方 MySQL 服务器实例必须在相同的操作系统和平台上运行。例如,如果捐赠者实例在 Linux 64 位平台上运行,则接收方实例也必须在该平台上运行。请参考您的操作系统文档以了解如何确定您的操作系统平台。
  • 接收方必须有足够的磁盘空间来存储克隆的数据。默认情况下,在克隆捐赠者数据之前,接收方会删除用户创建的数据(模式、表、表空间)和二进制日志,因此您只需要足够的空间来存储捐赠者数据。如果您使用DATA DIRECTORY子句克隆到命名目录,则必须有足够的磁盘空间来存储现有接收方数据和克隆的数据。您可以通过检查文件系统上的数据目录大小和驻留在数据目录之外的任何表空间的大小来估算数据大小。在估算捐赠者的数据大小时,请记住只有InnoDB数据会被克隆。如果您在其他存储引擎中存储数据,请相应调整数据大小的估算。
  • InnoDB允许在数据目录之外创建一些表空间类型。如果捐赠者 MySQL 服务器实例具有驻留在数据目录之外的表空间,则克隆操作必须能够访问这些表空间。您可以查询信息模式FILES表来识别驻留在数据目录之外的表空间。驻留在数据目录之外的文件具有指向数据目录以外目录的完全限定路径。
mysql> SELECT FILE_NAME FROM INFORMATION_SCHEMA.FILES;
  • 在捐赠者上激活的插件,包括任何密钥环插件,也必须在接收方上激活。您可以通过发出SHOW PLUGINS语句或查询信息模式PLUGINS表来识别活动插件。
  • 捐赠者和接收方必须具有相同的 MySQL 服务器字符集和校对规则。有关 MySQL 服务器字符集和校对规则配置的信息,请参见第 12.15 节,“字符集配置”。
  • 捐赠者和接收者必须具有相同的innodb_page_sizeinnodb_data_file_path设置。捐赠者和接收者的innodb_data_file_path设置必须指定相同数量的等效大小的数据文件。您可以使用SHOW VARIABLES语法检查变量设置。
mysql> SHOW VARIABLES LIKE 'innodb_page_size';
mysql> SHOW VARIABLES LIKE 'innodb_data_file_path';
  • 如果克隆加密或页面压缩数据,则捐赠者和接收者必须具有相同的文件系统块大小。对于页面压缩数据,接收方文件系统必须支持稀疏文件和孔打孔,以便在接收方上进行孔打孔。有关这些功能以及如何识别使用这些功能的表和表空间的信息,请参见  Section 7.6.7.5,“克隆加密数据”和 Section  7.6.7.6,“克隆压缩数据”。要确定您的文件系统块大小,请参考您的操作系统文档。
  • 如果要克隆加密数据,则需要安全连接。请参见为克隆配置加密连接。
  • 接收方的clone_valid_donor_list设置必须包括捐赠者 MySQL 服务器实例的主机地址。您只能从有效捐赠者列表中的主机克隆数据。需要具有SYSTEM_VARIABLES_ADMIN权限的 MySQL 用户来配置此变量。在本节之后的远程克隆示例中提供了设置clone_valid_donor_list变量的说明。您可以使用SHOW VARIABLES语法检查clone_valid_donor_list设置。
mysql> SHOW VARIABLES LIKE 'clone_valid_donor_list';
  • 不得运行其他克隆操作。一次只允许进行单个克隆操作。要确定是否正在运行克隆操作,请查询clone_status表。请参见使用性能模式克隆表监视克隆操作。
  • 克隆插件以 1MB 数据包加元数据的方式传输数据。因此,捐赠者和接收方 MySQL 服务器实例上最低要求的max_allowed_packet值为 2MB。小于 2MB 的max_allowed_packet值会导致错误。使用以下查询检查您的max_allowed_packet设置:
mysql> SHOW VARIABLES LIKE 'max_allowed_packet';

还有以下先决条件:

  • 捐赠者上的撤销表空间文件名必须是唯一的。当数据克隆到接收方时,无论在捐赠者上的位置如何,撤销表空间都会克隆到接收方的innodb_undo_directory位置或使用DATA DIRECTORY [=] '*clone_dir*'子句指定的目录。由于这个原因,捐赠者上重复的撤销表空间文件名是不允许的。从  MySQL 8.0.18 开始,在克隆操作期间遇到重复的撤销表空间文件名时会报告错误。在 MySQL 8.0.18  之前,克隆具有相同文件名的撤销表空间可能会导致接���方上的撤销表空间文件被覆盖。
    要查看捐赠者上的撤销表空间文件名以确保它们是唯一的,请查询INFORMATION_SCHEMA.FILES
mysql> SELECT TABLESPACE_NAME, FILE_NAME FROM INFORMATION_SCHEMA.FILES
       WHERE FILE_TYPE LIKE 'UNDO LOG';
  • 有关删除和添加撤销表空间文件的信息,请参见 Section 17.6.3.4,“撤销表空间”。
  • 默认情况下,在数据克隆后,接收方 MySQL 服务器实例会自动重启(停止和启动)。要实现自动重启,接收方必须有一个监控进程来检测服务器的关闭。否则,在数据克隆后,克隆操作会因为以下错误而停止,并且接收方 MySQL 服务器实例会关闭:
ERROR 3707 (HY000): Restart server failed (mysqld is not managed by supervisor process).
  • 此错误并不表示克隆失败。这意味着在数据克隆后,接收方 MySQL 服务器实例必须手动重新启动。在手动启动服务器后,您可以连接到接收方 MySQL 服务器实例,并检查性能模式克隆表,以验证克隆操作是否成功完成(请参见使用性能模式克隆表监控克隆操作)。RESTART语句也具有相同的监控进程要求。有关更多信息,请参见 Section 15.7.8.8,“RESTART Statement”。如果使用DATA DIRECTORY子句克隆到命名目录,则不适用此要求,因为在这种情况下不会执行自动重启。
  • 几个变量控制远程克隆操作的各个方面。在执行远程克隆操作之前,请查看这些变量并根据需要调整设置以适应您的计算环境。克隆变量设置在执行克隆操作的接收方 MySQL 服务器实例上。请参阅 Section 7.6.7.13, “克隆系统变量”。


MySQL8 中文参考(二十二)(3)https://developer.aliyun.com/article/1566119

相关实践学习
如何在云端创建MySQL数据库
开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
2月前
|
关系型数据库 MySQL Unix
MySQL8 中文参考(二十三)(3)
MySQL8 中文参考(二十三)
34 4
|
2月前
|
存储 缓存 关系型数据库
MySQL8 中文参考(二十一)(5)
MySQL8 中文参考(二十一)
53 3
|
2月前
|
存储 监控 Java
MySQL8 中文参考(二十一)(4)
MySQL8 中文参考(二十一)
69 3
|
2月前
|
存储 安全 关系型数据库
MySQL8 中文参考(二十一)(1)
MySQL8 中文参考(二十一)
33 3
|
2月前
|
存储 关系型数据库 MySQL
MySQL8 中文参考(二十一)(3)
MySQL8 中文参考(二十一)
43 2
|
2月前
|
关系型数据库 MySQL Unix
MySQL8 中文参考(二十一)(2)
MySQL8 中文参考(二十一)
34 2
|
2月前
|
关系型数据库 MySQL 数据安全/隐私保护
MySQL8 中文参考(二十五)(5)
MySQL8 中文参考(二十五)
27 2
|
2月前
|
存储 关系型数据库 MySQL
MySQL8 中文参考(二十四)(1)
MySQL8 中文参考(二十四)
27 2
|
2月前
|
NoSQL 关系型数据库 MySQL
MySQL8 中文参考(二十三)(2)
MySQL8 中文参考(二十三)
34 2
|
2月前
|
存储 关系型数据库 MySQL
MySQL8 中文参考(二十三)(1)
MySQL8 中文参考(二十三)
24 2

热门文章

最新文章