推薦學習:
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 ]
其中,
執行克隆操作,克隆外掛必須在donor和recipient MySQL伺服器範例啟用,在donor伺服器範例,克隆使用者需要BACKUP_ADMIN許可權,在recipient伺服器範例,克隆使用者需要CLONE_ADMIN許可權,CLONE_ADMIN許可權包括BACKUP_ADMIN和SHUTDOWN許可權。
執行CLONE INSTANCE語句需滿足下面的先決條件:
預設將資料克隆到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外掛的詳細內容,更多請關注TW511.COM其它相關文章!