MySQL詳細解析之Clone插件

WBOY
發布: 2022-03-08 17:58:18
轉載
2088 人瀏覽過

這篇文章為大家帶來了關於mysql中的相關知識,其中主要介紹了clone的相關問題,MySQL 8.0.17引入了Clone插件,可以進行本地或從遠端MySQL伺服器實例進行克隆,希望對大家有幫助。

MySQL詳細解析之Clone插件

推薦學習:mysql教學

#複製外掛程式簡介

##MySQL 8.0. 17引入了Clone插件,可以進行本地或從遠端MySQL伺服器實例進行克隆,克隆的資料是儲存在InnoDB中的資料的實體快照,包括schemas、tables、tablespaces和資料字典元資料。克隆操作包括本地克隆和遠端克隆。

本地複製作業:                                         

安裝複製外掛程式

使用Clone外掛程式進行複製操作,必須先進行外掛程式的安裝和配置。插件的名稱是mysql_clone.so,安裝有兩種方法。

方法1:

MySQL資料庫的外掛預設放在系統變數plugin_dir對應的目錄中,在MySQL伺服器啟動時使用--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資料目錄複製相同伺服器或節點到另一個目錄支援的語法如下,

CLONE LOCAL DATA DIRECTORY [=] '/path/to/clone_dir'
登入後複製

執行上述語句,對應的使用者需要有BACKUP_ADMIN權限,且使用者建立的檔案或表空間必須在資料目錄中,同時,複製的目的地需指定絕對路徑,目錄完整路徑必須存在,但clone_dir必須不存在。

示範:複製本機資料

1)建立使用者

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)
登入後複製

2)建立目錄

[root@node1 ~]# mkdir /mysql/clone/
[root@node1 ~]# chown -R mysql:mysql /mysql/clone/
登入後複製

3)複製操作

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

4)查看克隆後的檔案

[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
登入後複製

5)驗證,使用克隆的目錄啟動資料庫

[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
登入後複製

克隆遠端資料

克隆遠端MySQL伺服器實例(donor)並將其傳輸至執行複製操作的MySQL實例(recipient),支援的複製遠端資料的語法如下:

CLONE INSTANCE FROM 'user'@'host':port
IDENTIFIED BY 'password'
[ DATA DIRECTORY [ = ] 'clone_dir' ]
[ REQUIRE [ NO ] SSL ]
登入後複製

其中,

user 是donor MySQL伺服器實例的使用者名稱;

password是user的密碼;
  • host是donor MySQL伺服器實例的hostname位址,目前支援IPv4,不支援IPv6,但可使用別名;
  • #port是donor MySQL伺服器實例的連接埠號碼;
  • DATA DIRECTORY [ = ] 'clone_dir'是可選的子句用於指定接收複製資料的目錄,不指定該選項會覆寫已存在的資料文件,指定該選項可將複製資料傳輸至該目錄;
  • REQUIRE [ NO ] SSL明確指定是否使用加密連線;
  • 執行複製操作,複製外掛程式必須在donor和recipient MySQL伺服器實例激活,在donor伺服器實例,複製使用者需要BACKUP_ADMIN權限,在recipient伺服器實例,複製使用者需要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视频教程

以上是MySQL詳細解析之Clone插件的詳細內容。更多資訊請關注PHP中文網其他相關文章!

相關標籤:
來源:csdn.net
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板