您好,登錄后才能下訂單哦!
這期內容當中小編將會給大家帶來有關MYSQL Clone插件的功能是什么,文章內容豐富且以專業的角度為大家分析和敘述,閱讀完這篇文章希望大家可以有所收獲。
MYSQL 中操作一個MYSQL的副本是一件不是很簡單的問題,當然如果你使用XTRABACKUP,當然也不麻煩,但如果有更簡單的方法誰又不愿意去用,MYSQL 8.017 提供這個功能,以插件的方式,他可以產生一個本地的clone 或者遠程傳輸文件到一個目的端,這樣的方式其實等待了多年,別的數據庫其實操作這樣的事情,還是比較簡單的,例如PG pg_basebackup,或者安裝了REPMGR 的PG ,分分鐘就自動生成一個副本,并建立了連接,相對MYSQL來說是簡單的多。
那等了這么多年的功能,到底怎么樣,到底我們是不是已經可以升級到MYSQL 8 ,目前看還是的等等,主要是最近MYSQL 8 的更新速度太快,很多新功能還在發布中,如果莽然升級會遺漏更多的好功能,例如HASH JOIN。
但知識的更新時必須的,所以 let's go
MySQL 8.0.17引入了克隆SQL語句,使當前MySQL服務器成為在不同節點上運行的另一個MySQL服務器的“克隆”。我們將執行克隆語句的服務器實例稱為“收件人”。要從中克隆數據的源服務器實例稱為“Donor”。捐助方以一致的快照克隆其存儲在InnoDB存儲引擎中的所有數據和元數據,以替換接收方中的數據。成功執行克隆SQL語句后,將自動重新啟動接收服務器。重新啟動涉及到恢復克隆的快照數據,就像以舊方式復制數據一樣。一旦恢復完成,接收者就是捐獻者的克隆。
下面我們選擇兩臺機器,205 210 ,我們將210上的數據庫的內容clone 到205上,
1 首先在兩臺機器上都要安裝 clone 插件 INSTALL PLUGIN CLONE SONAME "mysql_clone.so";
2 創建操作的賬戶,建議為了降低操作的復雜度,可以設置為super ,實際一邊需要備份的權限,另一個邊CLONE_ADMIN 的權限。
這里就簡單了
3 在接受者創建donor_list 然后直接執行命令開始克隆
SET GLOBAL clone_valid_donor_list = "192.168.198.210:3306";
clone instance from clone@192.168.198.210:3306 identified by "1234.Com";
4 另外可以在接收者這邊執行下面的語句來獲取復制的進度
select STAGE, STATE, CAST(BEGIN_TIME AS TIME) as "START TIME", CASE WHEN END_TIME IS NULL THEN LPAD(sys.format_time(POWER(10,12) * (UNIX_TIMESTAMP(now()) - UNIX_TIMESTAMP(BEGIN_TIME))), 10, ' ') ELSE LPAD(sys.format_time(POWER(10,12) * (UNIX_TIMESTAMP(END_TIME) - UNIX_TIMESTAMP(BEGIN_TIME))), 10, ' ') END as DURATION, LPAD(CONCAT(FORMAT(ROUND(ESTIMATE/1024/1024,0), 0), " MB"), 16, ' ') as "Estimate", CASE WHEN BEGIN_TIME IS NULL THEN LPAD('0%', 7, ' ') WHEN ESTIMATE > 0 THEN LPAD(CONCAT(CAST(ROUND(DATA*100/ESTIMATE, 0) AS BINARY), "%"), 7, ' ') WHEN END_TIME IS NULL THEN LPAD('0%', 7, ' ') ELSE LPAD('100%', 7, ' ') END as "Done(%)" from performance_schema.clone_progress;
所以從mysql 8.017開始,復制一個MYSQL 相對來別的數據庫來說,那是最最最簡單的一件事。
從克隆的progress中來說,主要的流程 刪除數據,份文件拷貝,page 拷貝,redo 拷貝, 文件同步 重啟接受者,然后是重執行在拷貝中沒有執行的日志的數據。
操作簡單,問題是到底原理是什么這個是很重要,并需要了解的
大致可以分析一下,一般來說拷貝文件進行數據復制都是簡單的事情,麻煩的事情就是怎么確認在拷貝文件,時繼續寫入的數據,CLONE并不禁止數據的寫入。
所以一定會根據日志 LSN號在開始文件拷貝作為一個基點,記錄LSN號,當文件拷貝完畢后,在記錄一個LSN 號,在這之間會記錄在內存中的臟頁,未刷新到數據日志中數據。當文件拷貝完畢后(其實這之間是有緩存的,緩存中記錄的未check point 的space_id 和 page_id會一直被修改),到文件拷貝結束,記錄的LSN號,以及這一個時刻未被checkpoint 的數據將重新落入到物理文件中,在刷新這一時刻的checkpoint 的數據 到應用checkpoint 的數據這段時間也會繼續有數據寫入,所以在應用完文件拷貝這段時間的日志后,還需要記錄這個點,并且將這個點之間redo 日志進行拷貝,在應用,達到整體拷貝數據結束時,與數據的捐助者是一致的。(還得研究)
大致原理與 XTRBACKUP 有類似的地方,但又不完全相同。
采用這樣的技術也是有限制的
1 在操作中是不允許有 DDL 的操作的
2 一次只能克隆一個實例
3 克隆的方式是不支持MY,CNF 文件的拷貝,(這和PG 的pg_basebackup相比,PG 的CLONE 方式是可以將配置文件直接拷貝過來的)
4 會重啟MYSQL 接受者的MYSQL 服務,但不保證在任何情況下可以重啟
這樣的功能使用的場景也很明確,MGR ,未來的MGR 可能是最好的數據庫分布式,免維護的方法,通過CLONE 可以已最快的方式自動產生一個MYSQL的副本,并自動的加入到MGR集群中,這在傳統的 ORACLE 和 SQL SERVER 是不大能想象出來的。
MYSQL 8 已經不再是那個從前單薄的MYSQL ,各方面都在提升,與其他三位競爭對手相比,已經有比其他數據庫有特點的地方,雖然并行,以及查詢的方式還有待進步,但也千萬別小看MYSQL 8 單庫的力量,的確可以和其他的數據庫較量一番。
上述就是小編為大家分享的MYSQL Clone插件的功能是什么了,如果剛好有類似的疑惑,不妨參照上述分析進行理解。如果想知道更多相關知識,歡迎關注億速云行業資訊頻道。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。