詳解MySQL如何避免克隆失敗后再次初始化
MySQL 克隆插件簡化了新副本的配置,但不會簡化失敗后的服務(wù)器恢復(fù),除非您準(zhǔn)備從頭開始重新安裝 MySQL 實例。
但是,當(dāng)您克隆一個已經(jīng)有巨大數(shù)據(jù)集的復(fù)制副本時,您可能沒有足夠的空間容納兩個數(shù)據(jù)集:一個來自源服務(wù)器,另一個來自復(fù)制副本上的數(shù)據(jù)。
由于您決定從另一臺服務(wù)器克隆復(fù)制副本,因此您同意丟失當(dāng)前數(shù)據(jù)。DATA DIRECTORY
選項的唯一需要是在出現(xiàn)故障時保持與克隆相關(guān)的權(quán)限和設(shè)置不變。您可以使用以下策略之一安全地執(zhí)行克隆操作。
從頭開始
要執(zhí)行此操作,請停止當(dāng)前服務(wù)器,刪除數(shù)據(jù)目錄,再次初始化它,進(jìn)行連接,并設(shè)置與克隆相關(guān)的權(quán)限和選項。這樣,您將擁有一個帶有小數(shù)據(jù)目錄的新實例,因此您可以使用選項 DATA DIRECTORY
,而不用擔(dān)心超出可用磁盤空間。
保留現(xiàn)有 MySQL 架構(gòu)
如果不想重新安裝實例,可以從中刪除用戶數(shù)據(jù)。
- 列出所有帶查詢的非系統(tǒng)數(shù)據(jù)庫。
SELECT SCHEMA_NAME FROM INFORMATION_SCHEMA.SCHEMATA WHERE SCHEMA_NAME NOT IN ('mysql', 'sys', 'information_schema', 'performance_schema');
- 將它們逐一移除。您可以使用以下存儲過程來執(zhí)行此操作。
CREATE PROCEDURE p1() BEGIN DECLARE done INT DEFAULT FALSE; DECLARE dbname VARCHAR(64); DECLARE c1 CURSOR FOR SELECT SCHEMA_NAME FROM INFORMATION_SCHEMA.SCHEMATA WHERE SCHEMA_NAME NOT IN ('mysql', 'sys', 'information_schema', 'performance_schema', 'test'); DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = TRUE; OPEN c1; drop_loop: LOOP FETCH c1 INTO dbname; IF done THEN LEAVE drop_loop; END IF; SET @temp = CONCAT('DROP DATABASE ', dbname); PREPARE stmt FROM @temp; EXECUTE stmt; END LOOP; CLOSE c1; END
如果您將 InnoDB 數(shù)據(jù)存儲在共享表空間中(InnoDB_file_per_table=0),則文件
ibdata
將不會收縮,并且您將無法以這種方式釋放磁盤空間。
克隆實例
手動刪除數(shù)據(jù)釋放磁盤空間后,可以使用帶有選項 DATA DIRECTORY
的 CLONE INSTANCE
命令。
CLONE INSTANCE FROM ‘clone_user'@'source_host':3306 \ IDENTIFIED BY 'password' DATA DIRECTORY = '/path/to/custom_dir';
如果克隆成功,您需要通過一個額外的步驟來完成它:停止 MySQL 實例,并將數(shù)據(jù)目錄的內(nèi)容替換為用于克隆操作的目錄的內(nèi)容。之后,啟動服務(wù)器。
如果克隆操作失敗,請刪除克隆的數(shù)據(jù),修復(fù)錯誤,然后重試。
結(jié)論
克隆操作可能會失敗,并迫使您通過重新初始化副本上的 MySQL 實例來執(zhí)行額外的步驟。要避免這種情況,請使用選項 DATA DIRECTORY
。如果磁盤空間不足,無法存儲兩個數(shù)據(jù)副本,請在克隆之前清理現(xiàn)有數(shù)據(jù)。
以上就是詳解MySQL如何避免克隆失敗后再次初始化的詳細(xì)內(nèi)容,更多關(guān)于MySQL避免克隆失敗后初始化的資料請關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
mysql 使用存儲過程實現(xiàn)樹節(jié)點的獲取方法
這篇文章主要介紹了mysql 使用存儲過程實現(xiàn)樹節(jié)點的獲取方法,本文通過實例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2020-06-06Mysql插入數(shù)據(jù)方式(insert into 、replace into解析)
這篇文章主要介紹了Mysql插入數(shù)據(jù)方式(insert into 、replace into解析),具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2024-01-01