MySQL——8.0新特性

數(shù)據(jù)庫克隆

簡(jiǎn)介:
MySQL8.0.17引入clone plugin,允許從本地或者遠(yuǎn)程的MySQL中克克隆的數(shù)據(jù)是InnoDB存儲(chǔ)引擎中的物理快照信息(包括schema,表猪叙,表空間搔谴,元數(shù)據(jù)等克隆的數(shù)據(jù)是一個(gè)完整的數(shù)據(jù)目錄搓扯,插件可以使用克隆的目錄恢復(fù)和恢復(fù)一個(gè)mysql server夯秃〗榻伲克隆的數(shù)據(jù)是InnoDB存儲(chǔ)引擎中的物理快照信息徽惋,。

分類:
克隆分為本地克隆和遠(yuǎn)程克隆座韵。
本地克孪栈妗:將啟動(dòng)克隆操作的MySQL克隆到該主機(jī)的一個(gè)指定目錄下。


圖片.png

遠(yuǎn)程克掠辍:涉及到啟動(dòng)克隆操作的本地MySQL成為recipients(接受方)宦棺,遠(yuǎn)端的源數(shù)據(jù)的MySQL成為doner(捐贈(zèng)方)。通過網(wǎng)絡(luò)傳輸?shù)姆绞綄?shù)據(jù)克隆到指定目錄黔帕。如果不指定目錄則會(huì)將接收方數(shù)據(jù)目錄中的所有數(shù)據(jù)替換為克隆的數(shù)據(jù)代咸。主要用于實(shí)現(xiàn)數(shù)據(jù)遠(yuǎn)程的快速熱遷移操作。在遷移過程中成黄,除DDL操作情況呐芥,其他操作不出現(xiàn)阻塞情況、遠(yuǎn)程克隆技術(shù)奋岁,實(shí)現(xiàn)快速構(gòu)建數(shù)據(jù)庫的主從結(jié)構(gòu)思瘟,實(shí)現(xiàn)主從數(shù)據(jù)信息快速復(fù)制同名。


圖片.png

原理:
在進(jìn)行數(shù)據(jù)庫克隆操作時(shí)闻伶,會(huì)經(jīng)歷幾個(gè)重要的過程:
01 Page copy
在進(jìn)行數(shù)據(jù)頁復(fù)制操作時(shí)滨攻,會(huì)涉及到兩個(gè)操作動(dòng)作:
開啟redo archiving功能,從當(dāng)前點(diǎn)開始存儲(chǔ)新增的redo_log虾攻,這樣從當(dāng)前位置點(diǎn)開始所有的增量修改都不會(huì)丟失;同時(shí)上一步在page track的page被發(fā)送到目標(biāo)端铡买,確保當(dāng)前位置點(diǎn)之前所有做的變更一定發(fā)送到目標(biāo)端;關(guān)于redo archiving實(shí)際上這是官方早就存在的功能,主要用于官方的企業(yè)級(jí)備份工具霎箍,clone利用了該特性來維持記錄增量產(chǎn)生的redo在開始克隆前會(huì)做一次checkpoint;對(duì)于redo archiving功能應(yīng)用奇钞,會(huì)開啟一個(gè)后臺(tái)線程log_archiver_thread()來做日志歸檔;當(dāng)有新的寫入時(shí)(notify_about_advanced_write_lsn),也會(huì)通知線程去進(jìn)行歸檔漂坏,當(dāng)arch_log_sys處于活躍狀態(tài)時(shí)
線程會(huì)控制日志寫入以避免未歸檔的日志被覆蓋(log_write_wait_on_archiver),注意如果log_write等待時(shí)間過長(zhǎng)的話景埃,archive任務(wù)會(huì)被中斷掉;
02 Redo copy
停止redo archiving功能,所有歸檔的日志被發(fā)送到目標(biāo)端顶别,這些日志包含了從page copy階段開始到現(xiàn)在的所有日志;另外可能還需要記下當(dāng)前的復(fù)制點(diǎn)谷徙,例如:最后一個(gè)事務(wù)提交時(shí)的binlog位置點(diǎn)或者gtid信息,在系統(tǒng)頁中可以找到;
03 Done
目標(biāo)端重啟實(shí)例驯绎,通過crash recovery將redo log應(yīng)用上去;
說明:整個(gè)克隆過程都會(huì)以事件信息記錄完慧,可以很清晰的看到克隆的流程,如果克隆過程中斷剩失,也會(huì)以追加方式進(jìn)行繼續(xù)克隆;在進(jìn)行克隆功能應(yīng)用時(shí)屈尼,也是存在一些限制性操作的:(結(jié)合官方列出的限制)對(duì)于MySQL 8.0.27之前版本册着,在進(jìn)行克隆操作期間,是不允許在捐贈(zèng)者和接受者上進(jìn)行DDL操作脾歧,包括:truncate table操作;對(duì)于MySQL 8.0.27之后版本甲捏,在捐贈(zèng)者上默認(rèn)允許并發(fā)DDL操作,對(duì)于捐贈(zèng)者上并發(fā)DDL的支持由clone_block_DDL變量控制;對(duì)于不同版本的MySQL數(shù)據(jù)庫實(shí)例之間鞭执,是不能進(jìn)行克隆操作的司顿。對(duì)于捐贈(zèng)者和接受者必須是確切相同數(shù)據(jù)庫服務(wù)版本;
例如:你不能克隆數(shù)據(jù)在between MySQL 5.7 and MySQL 8.0. or between MySQL 8.0.19 and MySQL 8.0.20;這個(gè)克隆功能只支持在數(shù)據(jù)庫8.0.17版本或之后的版本.

克隆插件的限制:
1、克隆期間兄纺,不允許執(zhí)行DDL命令大溜。同樣,DDL會(huì)阻塞克隆命令的執(zhí)行
2囤热、Clone Plugin不會(huì)拷貝Donor的配置參數(shù)猎提。
3、Clone Plugin不會(huì)拷貝Donor的二進(jìn)制日志文件旁蔼。
4锨苏、Clone Plugin只會(huì)拷貝InnoDB表的數(shù)據(jù),對(duì)于其它存儲(chǔ)引擎的表棺聊,只會(huì)拷貝表結(jié)構(gòu)伞租。
5、Donor實(shí)例中如果有表通過DATA DIRECTORY指定了絕對(duì)路徑限佩,在進(jìn)行本地克隆時(shí)葵诈,會(huì)提示文件已存在。在進(jìn)行遠(yuǎn)程克隆時(shí)祟同,絕對(duì)路徑必須存在且有可寫權(quán)限作喘。
6、不允許通過MySQL Router連接Donor實(shí)例晕城。
7泞坦、執(zhí)行CLONE INSTANCE操作時(shí),指定的Donor端口不能為X Protocol端口砖顷。

8贰锁、MySQL版本(包括小版本)必須一致,且支持Clone Plugin滤蝠。

ERROR 3864 (HY000): Clone Donor MySQL version: 8.0.20 is different from Recipient MySQL version 8.0.19.

9豌熄、主機(jī)的操作系統(tǒng)和位數(shù)(32位,64位)必須一致物咳。兩者可根據(jù)version_compile_os锣险,version_compile_machine參數(shù)獲取。
10、Recipient必須有足夠的磁盤空間存儲(chǔ)克隆數(shù)據(jù)囱持。
11夯接、字符集(character_set_server),校驗(yàn)集(collation_server)纷妆,character_set_filesystem必須一致。
11晴弃、innodb_page_size必須一致掩幢。會(huì)檢查innodb_data_file_path中ibdata的數(shù)量和大小。12上鞠、目前Clone Plugin(8.0.20)的實(shí)現(xiàn)际邻,無論是Donor,還是Recipient芍阎,同一時(shí)間世曾,只能執(zhí)行一個(gè)克隆操作。后續(xù)會(huì)支持多個(gè)克隆操作并發(fā)執(zhí)行谴咸。

ERROR 3634 (HY000): Too many concurrent clone operations. Maximum allowed - 1

13轮听、Recipient需要重啟,所以其必須通過mysqld_safe或systemd等進(jìn)行管理岭佳。如果是通過mysqld進(jìn)行啟動(dòng)血巍,實(shí)例關(guān)閉后,需要手動(dòng)啟動(dòng)珊随。

ERROR 3707 (HY000): Restart server failed (mysqld is not managed by supervisor process).

終于嗶嗶完了亂七八糟的東西了述寡,字太多不愿意看,直接上操作叶洞。鲫凶。。

部署

加載插件:

# 進(jìn)行克隆插件加載配置
mysql> INSTALL PLUGIN clone SONAME 'mysql_clone.so';
或者
[mysqld]
plugin-load-add=mysql_clone.so
clone=FORCE_PLUS_PERMANENT

mysql> SELECT PLUGIN_NAME, PLUGIN_STATUS FROM INFORMATION_SCHEMA.PLUGINS WHERE PLUGIN_NAME = 'clone';
+------------------+----------------------+ 
| PLUGIN_NAME | PLUGIN_STATUS | 
+------------------+----------------------+ 
| clone | ACTIVE | 
+------------------+----------------------+ 
1 row in set (0.00 sec)

本地克埋帽佟:
1螟炫、創(chuàng)建本地克隆的專用用戶

mysql> create user clone_user@'%' identified by 'password';

mysql> grant backup_admin on *.* to 'clone_user';

-- backup_admin權(quán)限是mysql 8.0才有的備份鎖的權(quán)限;

2、進(jìn)行本地克隆操作

#創(chuàng)建克隆后的數(shù)據(jù)目錄確保這個(gè)目錄為空惭婿,并授權(quán)mysql
mkdir -p /data/test
chown -R mysql.mysql /data/

#使用本地克隆用戶的賬號(hào)登錄數(shù)據(jù)庫不恭,后執(zhí)行clone
mysql -uclone_user -ppassword
mysql> clone local data directory = '/data/test/clonedir';

3、查看克隆的進(jìn)度

 select stage,state,end_time from performance_schema.clone_progress;

4财饥、啟動(dòng)數(shù)據(jù)庫

mysqld_safe --datadir=/data/test/clonedir --port=3333 --socket=/tmp/mysql3333.sock --user=mysql --mysqlx=off &

遠(yuǎn)端克隆

1换吧、創(chuàng)建遠(yuǎn)端克隆的用戶

#在克隆捐贈(zèng)者主機(jī)上進(jìn)行授權(quán)(數(shù)據(jù)庫01主機(jī)上設(shè)置)
 
mysql> create user test_jz@'%' identified by 'password';
 
mysql> grant backup_admin on *.* to test_jz@'%' ;

# 在克隆接收者主機(jī)上進(jìn)行授權(quán)(數(shù)據(jù)庫02主機(jī)上設(shè)置)
 
mysql> create user test_js@'%' identified by 'password';
 
mysql> grant clone_admin on *.* to test_js@'%' ;

說明:可以在克隆捐贈(zèng)者主機(jī)上和接收者主機(jī)上均創(chuàng)建兩個(gè)用戶信息,防止克隆同步數(shù)據(jù)后钥星,接收者主機(jī)上不再含有接收用戶信息;

2沾瓦、進(jìn)行克隆操作

# 在克隆接收者主機(jī)上進(jìn)行設(shè)置
 
mysql> set global clone_valid_donor_list='10.30.1.190:3306';
 
-- 設(shè)置克隆同步數(shù)據(jù)的信任列表
 
# 在克隆接收者主機(jī)上進(jìn)行克隆
 
[root@xiaoq-02 ~]# mysql -utest_js -ppassword -h10.30.1.190 -P3306
 
mysql> clone instance from test_jz@'10.30.1.190':3306 identified by 'password';
 
-- 在接收者主機(jī)上實(shí)現(xiàn)遠(yuǎn)程克隆操作

3、查看克隆的進(jìn)度

 select stage,state,end_time from performance_schema.clone_progress;
圖片.png
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市贯莺,隨后出現(xiàn)的幾起案子风喇,更是在濱河造成了極大的恐慌,老刑警劉巖缕探,帶你破解...
    沈念sama閱讀 216,402評(píng)論 6 499
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件魂莫,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡爹耗,警方通過查閱死者的電腦和手機(jī)耙考,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,377評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來潭兽,“玉大人倦始,你說我怎么就攤上這事∩截裕” “怎么了鞋邑?”我有些...
    開封第一講書人閱讀 162,483評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)账蓉。 經(jīng)常有香客問我枚碗,道長(zhǎng),這世上最難降的妖魔是什么剔猿? 我笑而不...
    開封第一講書人閱讀 58,165評(píng)論 1 292
  • 正文 為了忘掉前任视译,我火速辦了婚禮,結(jié)果婚禮上归敬,老公的妹妹穿的比我還像新娘酷含。我一直安慰自己,他們只是感情好汪茧,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,176評(píng)論 6 388
  • 文/花漫 我一把揭開白布椅亚。 她就那樣靜靜地躺著,像睡著了一般舱污。 火紅的嫁衣襯著肌膚如雪呀舔。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,146評(píng)論 1 297
  • 那天扩灯,我揣著相機(jī)與錄音媚赖,去河邊找鬼。 笑死珠插,一個(gè)胖子當(dāng)著我的面吹牛惧磺,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播捻撑,決...
    沈念sama閱讀 40,032評(píng)論 3 417
  • 文/蒼蘭香墨 我猛地睜開眼磨隘,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼缤底!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起番捂,我...
    開封第一講書人閱讀 38,896評(píng)論 0 274
  • 序言:老撾萬榮一對(duì)情侶失蹤个唧,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后设预,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體徙歼,經(jīng)...
    沈念sama閱讀 45,311評(píng)論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,536評(píng)論 2 332
  • 正文 我和宋清朗相戀三年絮缅,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了鲁沥。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,696評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡耕魄,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出彭谁,到底是詐尸還是另有隱情吸奴,我是刑警寧澤,帶...
    沈念sama閱讀 35,413評(píng)論 5 343
  • 正文 年R本政府宣布缠局,位于F島的核電站则奥,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏狭园。R本人自食惡果不足惜读处,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,008評(píng)論 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望唱矛。 院中可真熱鬧罚舱,春花似錦、人聲如沸绎谦。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,659評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽窃肠。三九已至包个,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間冤留,已是汗流浹背碧囊。 一陣腳步聲響...
    開封第一講書人閱讀 32,815評(píng)論 1 269
  • 我被黑心中介騙來泰國(guó)打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留纤怒,地道東北人糯而。 一個(gè)月前我還...
    沈念sama閱讀 47,698評(píng)論 2 368
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像肪跋,于是被迫代替她去往敵國(guó)和親歧蒋。 傳聞我的和親對(duì)象是個(gè)殘疾皇子土砂,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,592評(píng)論 2 353

推薦閱讀更多精彩內(nèi)容