Clone插件允許從本地和遠程克隆數(shù)據(jù),克隆后的數(shù)據(jù)是一個存儲于innodb里的數(shù)據(jù)的物理快照,包括schemas,tables,tablespaces,以及數(shù)據(jù)找字典元數(shù)據(jù).克隆后的數(shù)據(jù)包含了一個全功能數(shù)據(jù)目錄,可以使用clone plugin提供mysql服務
原文:?https://dev.mysql.com/doc/refman/8.0/en/clone-plugin.html
時間關系只閱讀了部分官方文檔,可能有所缺失.
clone遠程數(shù)據(jù)
一. Clone 語法
CLONE INSTANCE FROM USER@HOST:PORT
IDENTIFIED BY 'password'
[DATA DIRECTORY [=] 'clone_dir']
[REQUIRE [NO] SSL];
可以指定clone目錄,如果donor實例的數(shù)據(jù)存放在數(shù)據(jù)目錄之外使用
二. 先決條件包括:
1.donor需要授權BACKUP_ADMIN用戶訪問和傳輸數(shù)據(jù),并且在clone操作期間阻止DDL操作
2.在recipient上需要有CLONE_ADMIN權限,包含BACKUP_ADMINandSHUTDOWN權限
3. MYSQL8.0.17版本
4. donor和recipient 必須在相同的操作系統(tǒng)和平臺上,比如相同的操作系統(tǒng)及64為平臺
5. recipient 必須有足夠的空間,包括對donor數(shù)據(jù)的大小的估計以及recipient數(shù)據(jù)目錄及指定數(shù)據(jù)目錄的評估
6. clone 操作必須能夠訪問指定的非數(shù)據(jù)目錄的數(shù)據(jù)及創(chuàng)建表空間文件,可以通過INFORMATION_SCHEMA.FILES查詢存儲位置,SHOW PLUGINS或者查詢INFORMATION_SCHEMA.PLUGINS
7. clone插件必須在donor,recipient上激活,包含相同的字符集和collation
8. donor和recipient的innodb_page_sizeandinnodb_data_file_path必須設置.innodb_data_file_path(默認是ibdata1:12M:autoextend)數(shù)據(jù)文件大小值必須相同.如果clone加密或者頁壓縮的數(shù)據(jù),兩端必須有相同的文件系統(tǒng)塊大小.對于頁加密數(shù)據(jù),recipient的文件系統(tǒng)必須支持sparse files and hole punching ?具體見Section?5.6.7.4, “Cloning Encrypted Data”, andSection?5.6.7.5, “Cloning Compressed Data”.
9. 安全連接是需要的如果clone加密數(shù)據(jù)
10. recipient 的clone_valid_donor_list?設置必須包含donor的主機地址,也就是提前加白名單,如果是mgr不需要設置
11.同時只能有一個clone在跑
三. 以下條件也適用:
1.undo表空間文件名必須是唯一的,防止誤覆蓋
2.默認情況下recipient的mysql實例會重起,需要有一個監(jiān)控進程來監(jiān)視重啟操作防止停止后沒有啟動導致報錯,后繼需要手動完成
3. 一些參數(shù)控制遠程clone操作,具體見Section?5.6.7.12, “Clone System Variables”.
原文:?https://dev.mysql.com/doc/refman/8.0/en/clone-plugin-remote.html
四. 關于鎖的問題:
1.?BACKUP_ADMIN?權限允許LOCK INSTANCE FOR BACKUP,允許當線上備份時執(zhí)行DML操作而不影響數(shù)據(jù)的一致性.
2. LOCK INSTANCE FOR BACKUP不允許repair,truncate,optimize table以及賬號管理操作.操作修改innodb文件而不記錄在innodb redo log,也會被block
3. LOCK INSTANCE FOR BACKUP只允許用戶的臨時表的DDL,當備份期間用戶臨時表的
4.不影響binlog的生成
5.一個備份使用LOCK INSTANCE FOR BACKUP所獲取的鎖和flush table with read lock是獨立的
6. LOCK INSTANCE FOR BACKUP 等待獲取鎖的時間取決于lock_wait_timeout的設定
原文:?https://dev.mysql.com/doc/refman/8.0/en/lock-instance-for-backup.html
Note:原文中并沒有具體說明是否允許增加刪減列和索引
總結:通過觀察這些先決條件,clone數(shù)據(jù)是對文件塊的復制及傳輸,可以在不阻塞dml操作下進行clone,是否完全阻塞DDL還需要后繼測試驗證.
==================
更新: 已測試在session A 手動lock instance for backup ,之后在session B 提交dml操作,并沒有影響,不過添加ddl操作:增加刪除列,索引,drop table,truncate table會被阻塞