您好,登錄后才能下訂單哦!
今天小編給大家分享一下MySQL的Clone插件怎么用的相關知識點,內容詳細,邏輯清晰,相信大部分人都還太了解這方面的知識,所以分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后有所收獲,下面我們一起來了解一下吧。
MySQL 8.0.17引入了Clone插件,可以進行本地或從遠程MySQL服務器實例進行克隆,克隆的數據是存儲在InnoDB中的數據的物理快照,包括schemas、tables、tablespaces和數據字典元數據。克隆操作包括本地克隆和遠程克隆。
本地克隆操作: 遠程克隆操作:
使用Clone插件進行克隆操作,必須先進行插件的安裝和配置。插件的名稱是mysql_clone.so,安裝有兩種方法。
MySQL數據庫的插件默認放在系統變量plugin_dir對應的目錄中,在MySQL服務器啟動時使用--plugin-load-add選項加載該插件即可,但該方法需每次啟動服務器都需要指定對應的選項,可以將其配置到my.cnf文件中,即:
[mysqld] plugin-load-add=mysql_clone.so
運行時加載該插件,使用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的Clone插件怎么用”這篇文章的所有內容,感謝各位的閱讀!相信大家閱讀完這篇文章都有很大的收獲,小編每天都會為大家更新不同的知識,如果還想學習更多的知識,請關注億速云行業資訊頻道。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。