MySQL 8017+版本的clone-plugin 應(yīng)用

1 . Clone Plugin介紹

本地克隆:

啟動克隆操作的MySQL服務(wù)器實例中的數(shù)據(jù),克隆到同服務(wù)器或同節(jié)點上的一個目錄里

image.png

遠(yuǎn)程克隆:

默認(rèn)情況下,遠(yuǎn)程克隆操作會刪除接受者(recipient)數(shù)據(jù)目錄中的數(shù)據(jù),并將其替換為捐贈者(donor)的克隆數(shù)據(jù)。您也可以將數(shù)據(jù)克隆到接受者的其他目錄,以避免刪除現(xiàn)有數(shù)據(jù)。(可選)

image.png

2. 原理

# PAGE COPY這里有兩個動作開啟redoarchiving功能,從當(dāng)前點開始存儲新增的redolog,這樣從當(dāng)前點開始所有的增量修改都不會丟失。同時上一步在page track的page被發(fā)送到目標(biāo)端。確保當(dāng)前點之前所做的變更一定發(fā)送到目標(biāo)端。關(guān)于redoarchiving,實際上這是官方早就存在的功能,主要用于官方的企業(yè)級備份工具,但這里clone利用了該特性來維持增量修改產(chǎn)生的redo。 在開始前會做一次checkpoint, 開啟一個后臺線程log_archiver_thread()來做日志歸檔。當(dāng)有新的寫入時(notify_about_advanced_write_lsn)也會通知他去archive。當(dāng)arch_log_sys處于活躍狀態(tài)時,他會控制日志寫入以避免未歸檔的日志被覆蓋(log_writer_wait_on_archiver),注意如果log_writer等待時間過長的話, archive任務(wù)會被中斷掉.# Redo Copy停止RedoArchiving",所有歸檔的日志被發(fā)送到目標(biāo)端,這些日志包含了從page copy階段開始到現(xiàn)在的所有日志,另外可能還需要記下當(dāng)前的復(fù)制點,例如最后一個事務(wù)提交時的binlog位點或者gtid信息,在系統(tǒng)頁中可以找到# Done目標(biāo)端重啟實例,通過crash recovery將redolog應(yīng)用上去。

3. 限制

官方文檔列出的一些限制:The clone pluginissubjecttothese limitations:*DDL,isnot permitted during a cloning operation.This limitation should be consideredwhenselectingdatasources.A workaroundistouse dedicated donor instances,which can accommodate DDL operations being blockedwhiledataiscloned.Concurrent DMLispermitted.*An instance cannot be cloned from a different MySQL server version.The donorandrecipient must have the same MySQL server version.For example,you cannot clone between MySQL5.7andMySQL8.0\.The clone pluginisonly supportedinMySQL8.0.17andhigher.*Only a single MySQL instance can be cloned at a time.Cloning multiple MySQL instancesina single cloning operationisnot supported.*The X Protocol port specified byis not supportedforremote cloning operations*The clone plugin does not support cloning of MySQL server configurations.*The clone plugin does not support cloning of binary logs.*The clone plugin only clonesdatastoredin`InnoDB`.Other storage enginedataisnot cloned.*Connectingtothe donor MySQL server instance through MySQL Routerisnot supported.*Local cloning operationsdonot support cloning of general tablespaces that were created with an absolute path.A cloned tablespace file with the same pathasthe source tablespace file would cause a conflict.

4. 應(yīng)用

4.1 本地

4.1.1 加載插件

INSTALL PLUGIN clone SONAME 'mysql_clone.so';或[mysqld]plugin-load-add=mysql_clone.soclone=FORCE_PLUS_PERMANENTSELECT PLUGIN_NAME, PLUGIN_STATUSFROM INFORMATION_SCHEMA.PLUGINSWHERE PLUGIN_NAME LIKE 'clone';

4.1.2 創(chuàng)建克隆專用用戶

CREATEUSERclone_user@'%'IDENTIFIEDby'password';GRANTBACKUP_ADMINON*.*TO'clone_user';# BACKUP_ADMIN是MySQL8.0 才有的備份鎖的權(quán)限

4.1.3 本地克隆

[root@db013306]# mkdir -p /data/test/[root@db013306]# chown -R mysql.mysql /data/mysql-uclone_user-ppasswordCLONELOCALDATADIRECTORY='/data/test/clonedir';# 觀測狀態(tài)db01[(none)]>SELECTSTAGE,STATE,END_TIMEFROMperformance_schema.clone_progress;+-----------+-------------+----------------------------+|STAGE|STATE|END_TIME|+-----------+-------------+----------------------------+|DROPDATA|Completed|2020-04-2021:13:19.264003||FILECOPY|Completed|2020-04-2021:13:20.025444||PAGECOPY|Completed|2020-04-2021:13:20.028552||REDOCOPY|Completed|2020-04-2021:13:20.030042||FILESYNC|Completed|2020-04-2021:13:20.439444||RESTART|NotStarted|NULL||RECOVERY|NotStarted|NULL|+-----------+-------------+----------------------------+7rowsinset(0.00sec)#日志觀測: set global log_error_verbosity=3;tail-f db01.errCLONELOCALDATADIRECTORY='/data/test/clonedir1';

4.1.4 啟動新實例

[root@db01 clonedir]# mysqld_safe--datadir=/data/test/clonedir--port=3333--socket=/tmp/mysql3333.sock--user=mysql--mysqlx=OFF&

4.2 遠(yuǎn)程clone

4.2.1 創(chuàng)建遠(yuǎn)程clone用戶

# 捐贈者授權(quán)CREATEUSERclone_user@'10.0.0.51'IDENTIFIEDby'password1';GRANTBACKUP_ADMINON*.*TO'clone_user'@'10.0.0.51';# 接受者授權(quán)CREATEUSERclone_user@'10.0.0.52'IDENTIFIEDby'password2';GRANTCLONE_ADMINON*.*TO'clone_user'@'10.0.0.52';

4.2.2 遠(yuǎn)程clone

# 開始克隆SETGLOBALclone_valid_donor_list='10.0.0.51:3306';mysql-uclone_user-ppassword2-h10.0.0.52-P3306CLONEINSTANCEFROMclone_user@'10.0.0.51':3306IDENTIFIEDBY'password1';# 查看狀態(tài):SELECTSTAGE,STATE,END_TIMEFROMperformance_schema.clone_progress;SELECTSTATEFROMperformance_schema.clone_status;

4.2.3 構(gòu)建主從

# 主:create user repl@'%'identified WITH'mysql_native_password'by'123';GRANTREPLICATIONSLAVE,REPLICATIONCLIENTON*.*TO'repl'@'%';# 從:CHANGEMASTERTOMASTER_HOST='10.0.0.51',MASTER_USER='repl',MASTER_PASSWORD='123',MASTER_PORT=3306,MASTER_AUTO_POSITION=1;start slave;

恢復(fù)MGR 節(jié)點

# 假設(shè)三節(jié)點MGR某個節(jié)點異常,需要重新把這個節(jié)點加入到MGR集群中,具體操作過程如下:# 貢獻(xiàn)者端執(zhí)行(10.0.0.51)DROPUSER'donor_clone_user'@'10.0.0.51';CREATEUSER'donor_clone_user'@'10.0.0.51'IDENTIFIEDBY'password';GRANTBACKUP_ADMINon*.*to'donor_clone_user'@'10.0.0.51';INSTALLPLUGINclone SONAME'mysql_clone.so';# 接收者端執(zhí)行(10.0.0.52)DROPUSER'recipient_clone_user'@'10.0.0.52';CREATEUSER'recipient_clone_user'@'10.0.0.52'IDENTIFIEDBY'password';GRANTCLONE_ADMINon*.*to'recipient_clone_user'@'10.0.0.52';INSTALLPLUGINclone SONAME'mysql_clone.so';SETGLOBALclone_valid_donor_list='10.0.0.51:3306';mysql-urecipient_clone_user-ppassword-h10.0.0.52-P3311CLONEINSTANCEFROM'donor_clone_user'@'10.0.0.51':3306IDENTIFIEDBY'password';mysql-uroot-pstart group_replication;select*fromperformance_schema.replication_group_members;

作者:MySQL_oldguo

鏈接:http://www.itdecent.cn/p/eeb2d31923b1

來源:簡書

著作權(quán)歸作者所有。商業(yè)轉(zhuǎn)載請聯(lián)系作者獲得授權(quán),非商業(yè)轉(zhuǎn)載請注明出處。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容