ホームページ  >  記事  >  データベース  >  CloneプラグインのMySQL詳細分析

CloneプラグインのMySQL詳細分析

WBOY
WBOY転載
2022-03-08 17:58:182067ブラウズ

この記事では、mysql に関する関連知識を提供します。主にクローンに関連する問題について説明します。MySQL 8.0.17 では、ローカルまたはリモートの MySQL サーバーから実行できる Clone プラグインが導入されています。この例が皆さんのお役に立てば幸いです。

CloneプラグインのMySQL詳細分析

#推奨学習:

mysql チュートリアル

クローン プラグインの概要

MySQL 8.0. 17 では、ローカルまたはリモートの MySQL サーバー インスタンスからクローンを作成できる Clone プラグインが導入されました。クローン データは、スキーマ、テーブル、テーブルスペース、データ ディクショナリ メタデータなど、InnoDB に保存されているデータの物理スナップショットです。クローン作成操作には、ローカル クローン作成とリモート クローン作成が含まれます。

ローカル クローン作成操作: リモート クローン操作:

クローン プラグインのインストール

クローン作成操作にはクローン プラグインを使用します。まず、プラグインのインストールと構成を実行する必要があります。プラグインの名前は mysql_clone.so で、インストールするには 2 つの方法があります。

方法 1:

MySQL データベース プラグインは、デフォルトでシステム変数 plugin_dir に対応するディレクトリに配置されます。プラグインをロードするには、--plugin-load-add オプションを使用します。ただし、この方法では、サーバーを起動するたびに対応するオプションを指定する必要があり、これは my.cnf ファイルで構成できます。つまり:

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

方法 2:

実行時にプラグインをロードし、INSTALL PLUGIN を使用してプラグインをインストールし、mysql.plugin システム テーブルに登録します:

install plugin clone soname 'mysql_clone.so';

インストール後、information_schema で表示できます。 plugins テーブルまたは show plugins を通じて。

ローカル データのクローンを作成する

ローカル クローン データは、MySQL データ ディレクトリを同じサーバーにクローンするか、ノードを別のディレクトリにクローンすることです。サポートされる構文は次のとおりです。上記のステートメントに対応するユーザーは BACKUP_ADMIN 権限を持っている必要があり、ユーザーが作成したファイルまたはテーブルスペースはデータ ディレクトリに存在する必要があり、同時にクローンの宛先は絶対パスを指定する必要があります。 directory は存在する必要がありますが、clone_dir は存在してはいけません。

デモ: ローカル データのクローン作成

1) ユーザーの作成

CLONE LOCAL DATA DIRECTORY [=] '/path/to/clone_dir'

2) ディレクトリの作成

mysql> select version();
+-----------+
| version() |
+-----------+
| 8.0.25 |
+-----------+
1 row in set (0.00 sec)
mysql> create user clone_admin identified by 'Cl0neTest';
Query OK, 0 rows affected (0.02 sec)
mysql> grant backup_admin on *.* to clone_admin;
Query OK, 0 rows affected (0.10 sec)

3) クローン操作

[root@node1 ~]# mkdir /mysql/clone/
[root@node1 ~]# chown -R mysql:mysql /mysql/clone/

4) クローンされたファイルを表示します

mysql> clone local data directory='/mysql/clone/clone_data';
Query OK, 0 rows affected (17.09 sec)

5) 確認し、クローンされたディレクトリを使用してデータベースを起動します

[root@node1 ~]# ll /mysql/clone/clone_data/
total 6348816
drwxr-x---. 2 mysql mysql 89 Nov 28 11:26 #clone
-rw-r-----. 1 mysql mysql 9231 Nov 28 11:26 ib_buffer_pool
-rw-r-----. 1 mysql mysql 4294967296 Nov 28 11:26 ibdata1
-rw-r-----. 1 mysql mysql 1073741824 Nov 28 11:26 ib_logfile0
-rw-r-----. 1 mysql mysql 1073741824 Nov 28 11:26 ib_logfile1
drwxr-x---. 2 mysql mysql 6 Nov 28 11:26 mysql
-rw-r-----. 1 mysql mysql 25165824 Nov 28 11:26 mysql.ibd
drwxr-x---. 2 mysql mysql 4096 Nov 28 11:26 sakila
drwxr-x---. 2 mysql mysql 28 Nov 28 11:26 sys
-rw-r-----. 1 mysql mysql 16777216 Nov 28 11:26 undo_001
-rw-r-----. 1 mysql mysql 16777216 Nov 28 11:26 undo_002

リモート データのクローンを作成します

リモート MySQL サーバー インスタンス (ドナー) をクローン作成しますクローン作成操作を実行する MySQL インスタンス (受信者) に送信されます。リモート データのクローン作成でサポートされている構文は次のとおりです:

[root@node1 ~]# service mysql.server stop
Shutting down MySQL.... SUCCESS!
[root@node1 ~]# mysqld_safe --datadir=/mysql/clone/clone_data/ --lower-case-table-names=1 --user=mysql
2021-11-28T03:47:11.012900Z mysqld_safe Logging to '/mysql/clone/clone_data/node1.com.cn.err'.
2021-11-28T03:47:11.036181Z mysqld_safe Starting mysqld daemon with databases from /mysql/clone/clone_data

ここで、

user はユーザー名です。ドナー MySQL サーバー インスタンスの名前、

    password はユーザーのパスワード、
  • host はドナー MySQL サーバー インスタンスのホスト名アドレスです。現在、IPv4 はサポートされていますが、IPv6 はサポートされていません。エイリアスが使用可能;
  • port はドナー MySQL サーバー インスタンスのポート番号;
  • DATA DIRECTORY [ = ] 「clone_dir」は、クローン データを受信するディレクトリを指定するために使用されるオプションの句ですこのオプションを指定しないと、既存のデータ ファイルが上書きされます。クローン データをこのディレクトリに転送するには、このオプションを指定します。
  • REQUIRE [NO] SSL は、暗号化された接続を使用するかどうかを明示的に指定します。
  • #クローン操作を実行するには、クローン プラグインがドナーおよび受信側の MySQL にある必要があります。サーバー インスタンスがアクティブ化されています。ドナー サーバー インスタンスでは、ユーザーのクローン作成には BACKUP_ADMIN 権限が必要です。受信側サーバー インスタンスでは、ユーザーのクローン作成には CLONE_ADMIN 権限が必要です。 CLONE_ADMIN 権限には、BACKUP_ADMIN および SHUTDOWN 権限が含まれます。
  • CLONE INSTANCE ステートメントを実行するには、次の前提条件を満たす必要があります:
  • donor和recipient必须有相同的MySQL服务器版本,克隆插件在8.0.17版本后支持;
  • donor和recipient必须运行在相同的操作系统和平台;
  • 克隆数据,recipient必须有足够的磁盘空间;
  • InnoDB需要在数据目录外面创建表空间,可通过INFORMATION_SCHEMA.FILES查看;
  • 克隆插件必须在donor和recipient激活,可通过SHOW PLUGINS查看;
  • donor和recipient必须有相同的MySQL服务器字符集和排序规则;
  • donor和recipient需要有相同的innodb_page_size和innodb_data_file_path设置;
  • 若克隆加密或页压缩的数据,donor和recipient必须有相同的文件系统块大小;
  • 若克隆加密的数据,需要安全的连接;
  • recipient上的clone_valid_donor_list设置必须包括donor MySQL服务器实例的主机地址;
  • 一次只能有一个克隆操作,克隆期间不能有其他克隆操作,可通过clone_status查看;
  • 克隆插件以1MB数据包和元数据的形式传输数据,在donor和recipient MySQL服务器实例上所需的最小max_allowed_packet是2MB;
  • donor上的Undo表空间文件名必须唯一,当数据克隆到recipient,undo表空间克隆到recipient 上innodb_undo_directory指定的位置或DATA DIRECTORY [ = ] 'clone_dir' 子句指定的目录;
  • 默认,recipient MySQL服务器实例在克隆数据完成后自动重启;
  • 几个变量控制远程克隆操作的各个方面;

演示:克隆远程数据

默认将数据克隆到recipient端的数据目录,并使用donor的数据进行覆盖,然后进行自动重启recipient端的MySQL服务器实例

1)登录到donor MySQL服务器实例,创建用户并安装插件(若安装可忽略)

mysql> create user 'donor_clone_user' identified by 'donor_clone_user';
Query OK, 0 rows affected (0.02 sec)
mysql> grant backup_admin on *.* to donor_clone_user;
Query OK, 0 rows affected (0.01 sec)

2)登录到recipient MySQL服务器实例,创建账户并安装插件,并设置clone_valid_donor_list

mysql> create user recipient_clone_user identified by 'recipient_clone_user';
Query OK, 0 rows affected (0.04 sec)
mysql> grant clone_admin,backup_admin on *.* to recipient_clone_user;
Query OK, 0 rows affected (0.01 sec)
mysql> install plugin clone soname 'mysql_clone.so';
Query OK, 0 rows affected (0.01 sec)
mysql> set global clone_valid_donor_list='192.168.56.53:3306';
Query OK, 0 rows affected (0.00 sec)

3)登录到recipient MySQL服务器实例,使用 recipient_clone_user用户或root用户执行克隆操作,操作完成后会自动重启

mysql> clone instance from 'donor_clone_user'@'192.168.56.81':3306 identified by 'donor_clone_user';
Query OK, 0 rows affected (51.08 sec)

注:将donor的数据克隆到recipient端默认会覆盖其数据文件,也可以指定一个目录进行克隆,如下:

mysql> clone instance from 'donor_clone_user'@'192.168.56.81':3306 identified by 'donor_clone_user' data directory='/mysql/clone/clone_data';
Query OK, 0 rows affected (51.17 sec)

使用新目录启动MySQL服务器实例:

[root@node2 clone]# mysqld --lower-case-table-names=1 --datadir=/mysql/clone/clone_data/ --user=mysql &

推荐学习:mysql视频教程

以上がCloneプラグインのMySQL詳細分析の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事はcsdn.netで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。