InnoDB/TokuDB/Myrocks引擎轉(zhuǎn)換為X-Engine引擎
本文中含有需要您注意的重要提示信息,忽略該信息可能對(duì)您的業(yè)務(wù)造成影響,請(qǐng)務(wù)必仔細(xì)閱讀。
RDS MySQL 8.0支持X-Engine引擎,X-Engine可以提供更好的數(shù)據(jù)壓縮能力,降低磁盤空間成本。本文介紹如何將InnoDB/TokuDB/Myrocks引擎轉(zhuǎn)換為X-Engine引擎。
背景信息
X-Engine是阿里云自研的聯(lián)機(jī)事務(wù)處理OLTP(On-Line Transaction Processing)數(shù)據(jù)庫(kù)存儲(chǔ)引擎。作為自研數(shù)據(jù)庫(kù)PolarDB的存儲(chǔ)引擎之一,X-Engine已經(jīng)廣泛應(yīng)用在阿里集團(tuán)內(nèi)部諸多業(yè)務(wù)系統(tǒng)中,包括交易歷史庫(kù)、釘釘歷史庫(kù)等,大幅縮減了業(yè)務(wù)成本;同時(shí)也作為雙十一大促的關(guān)鍵數(shù)據(jù)庫(kù)技術(shù),挺過(guò)了數(shù)百倍平時(shí)流量的沖擊。
更多詳情請(qǐng)參見(jiàn):
本文旨在指導(dǎo)您如何將存量InnoDB/TokuDB/Myrocks引擎轉(zhuǎn)換為X-Engine引擎。如果是一個(gè)新業(yè)務(wù),建議您在購(gòu)買RDS MySQL 8.0實(shí)例時(shí)直接指定默認(rèn)存儲(chǔ)引擎為X-Engine,或建表語(yǔ)句指定engine=xengine。更多信息,請(qǐng)參見(jiàn)X-Engine引擎使用須知。
注意事項(xiàng)
如果原表為InnoDB引擎,轉(zhuǎn)換前請(qǐng)確保實(shí)例的剩余磁盤空間是現(xiàn)有數(shù)據(jù)量的2倍。轉(zhuǎn)換為X-Engine引擎后空間占用會(huì)減小至原數(shù)據(jù)大小的10%~50%。
使用方案一進(jìn)行轉(zhuǎn)換時(shí),需要更新配置參數(shù)并重啟實(shí)例,請(qǐng)?jiān)谕V箻I(yè)務(wù)之后進(jìn)行操作。
使用方案二進(jìn)行全庫(kù)遷移時(shí),由于需要切換連接地址,請(qǐng)?jiān)跇I(yè)務(wù)低峰期進(jìn)行操作。
在轉(zhuǎn)換線上業(yè)務(wù)引擎之前,請(qǐng)?zhí)崆斑M(jìn)行SQL兼容性測(cè)試,確認(rèn)正常后再轉(zhuǎn)換線上業(yè)務(wù)引擎。
轉(zhuǎn)換引擎后請(qǐng)修改實(shí)例參數(shù)default_storage_engine為xengine,這樣后續(xù)創(chuàng)建的表的引擎即為X-Engine。
方案建議
實(shí)例為RDS MySQL 8.0(內(nèi)核小版本20200229或以上)時(shí),建議使用方案一,無(wú)需配置各種工具。
說(shuō)明內(nèi)核小版本過(guò)低時(shí),您可以在基本信息頁(yè)面單擊升級(jí)內(nèi)核小版本按鈕進(jìn)行升級(jí)。如果沒(méi)有該按鈕,表示當(dāng)前小版本已經(jīng)是最新版。詳情請(qǐng)參見(jiàn)升級(jí)內(nèi)核小版本。
其他情況時(shí)(例如實(shí)例為MySQL 5.6/5.7),建議您使用方案二。
方案一
此方案為修改參數(shù)模板啟用X-Engine引擎,然后使用DDL語(yǔ)句轉(zhuǎn)換引擎,最簡(jiǎn)單直接。在啟用X-Engine引擎時(shí),會(huì)重啟實(shí)例,后續(xù)的轉(zhuǎn)換引擎操作會(huì)短暫阻塞寫(xiě)入操作,不影響查詢操作。
此操作會(huì)重啟實(shí)例,重啟后會(huì)將95%的內(nèi)存資源分配給X-Engine引擎使用,請(qǐng)不要混用InnoDB引擎。
- 訪問(wèn)RDS實(shí)例列表,在上方選擇地域,然后單擊目標(biāo)實(shí)例ID。
在左側(cè)導(dǎo)航欄中單擊參數(shù)設(shè)置。
在左上角單擊應(yīng)用模板,選擇MySQL_8.0_高可用系列_默認(rèn)參數(shù)模板 | 系統(tǒng)默認(rèn) | X-Engine,然后單擊確定。
在SQLConsole執(zhí)行如下命令進(jìn)行轉(zhuǎn)換:
alter table <數(shù)據(jù)庫(kù)名>.<表名> engine xengine;
示例
alter table test.sbtest1 engine xengine;
方案二
此方案為使用阿里云的數(shù)據(jù)傳輸服務(wù)DTS(Data Transmission Service)實(shí)時(shí)同步原表數(shù)據(jù)到新實(shí)例,然后將業(yè)務(wù)切換到新實(shí)例。
通過(guò)DTS遷移數(shù)據(jù)時(shí)默認(rèn)會(huì)繼承源實(shí)例的引擎類型。所以需要先單獨(dú)導(dǎo)出建表語(yǔ)句的SQL,修改Create語(yǔ)句中的引擎類型為X-Engine引擎. 然后再遷移數(shù)據(jù)到新建的X-Engine表中。
通過(guò)DMS登錄原實(shí)例,導(dǎo)出原實(shí)例的所有表結(jié)構(gòu)腳本。詳細(xì)操作步驟請(qǐng)參見(jiàn)數(shù)據(jù)庫(kù)導(dǎo)出。
解壓縮后修改表結(jié)構(gòu)腳本,將InnoDB或TokuDB修改為xengine。下圖以InnoDB修改為xengine為例進(jìn)行說(shuō)明,TokuDB修改方法相同。
新購(gòu)一個(gè)與原實(shí)例規(guī)格相同的RDS MySQL 8.0實(shí)例(購(gòu)買時(shí)選擇X-Engine參數(shù)模板)。
說(shuō)明在快速創(chuàng)建RDS MySQL實(shí)例時(shí),可以選擇應(yīng)用默認(rèn)的X-Engine參數(shù)模板來(lái)設(shè)置X-Engine為默認(rèn)存儲(chǔ)引擎。
通過(guò)DMS登錄新實(shí)例,將表結(jié)構(gòu)腳本導(dǎo)入新實(shí)例。詳細(xì)操作步驟請(qǐng)參見(jiàn)數(shù)據(jù)導(dǎo)入。
參考MySQL實(shí)例間的雙向同步將原實(shí)例的數(shù)據(jù)同步至新實(shí)例。
重要在同步初始化時(shí),請(qǐng)勿選擇結(jié)構(gòu)初始化。
執(zhí)行結(jié)果
同步完成后,您可以確認(rèn)數(shù)據(jù)是否同步成功,并進(jìn)行SQL兼容性測(cè)試,測(cè)試正常再轉(zhuǎn)換線上業(yè)務(wù)引擎。