詳解MySQL如何避免克隆失敗后再次初始化
MySQL 克隆插件簡化了新副本的配置,但不會簡化失敗后的服務器恢復,除非您準備從頭開始重新安裝 MySQL 實例。
但是,當您克隆一個已經(jīng)有巨大數(shù)據(jù)集的復制副本時,您可能沒有足夠的空間容納兩個數(shù)據(jù)集:一個來自源服務器,另一個來自復制副本上的數(shù)據(jù)。
由于您決定從另一臺服務器克隆復制副本,因此您同意丟失當前數(shù)據(jù)。DATA DIRECTORY 選項的唯一需要是在出現(xiàn)故障時保持與克隆相關(guān)的權(quán)限和設置不變。您可以使用以下策略之一安全地執(zhí)行克隆操作。
從頭開始
要執(zhí)行此操作,請停止當前服務器,刪除數(shù)據(jù)目錄,再次初始化它,進行連接,并設置與克隆相關(guān)的權(quán)限和選項。這樣,您將擁有一個帶有小數(shù)據(jù)目錄的新實例,因此您可以使用選項 DATA DIRECTORY ,而不用擔心超出可用磁盤空間。
保留現(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)容。之后,啟動服務器。
如果克隆操作失敗,請刪除克隆的數(shù)據(jù),修復錯誤,然后重試。
結(jié)論
克隆操作可能會失敗,并迫使您通過重新初始化副本上的 MySQL 實例來執(zhí)行額外的步驟。要避免這種情況,請使用選項 DATA DIRECTORY。如果磁盤空間不足,無法存儲兩個數(shù)據(jù)副本,請在克隆之前清理現(xiàn)有數(shù)據(jù)。
以上就是詳解MySQL如何避免克隆失敗后再次初始化的詳細內(nèi)容,更多關(guān)于MySQL避免克隆失敗后初始化的資料請關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
解決mysql ERROR 1017:Can''t find file: ''/xxx.frm'' 錯誤
如果重啟服務器前沒有關(guān)閉mysql,MySql的MyiSAM表很有可能會出現(xiàn) ERROR #1017 :Can't find file: '/xxx.frm' 的錯誤2011-08-08
Mysql中高效JOIN操作之多表關(guān)聯(lián)查詢實戰(zhàn)指南
在現(xiàn)代軟件開發(fā)中,數(shù)據(jù)庫幾乎無處不在,而多表關(guān)聯(lián)查詢(JOIN)則是我們與數(shù)據(jù)庫交互的核心操作之一,本文將從JOIN的基礎(chǔ)知識講起,逐步深入到優(yōu)化技巧和實戰(zhàn)案例,希望對大家有所幫助2025-08-08
MySQL窗口函數(shù) over(partition by)的用法
本文主要介紹了MySQL窗口函數(shù) over(partition by)的用法, partition by相比較于group by,能夠在保留全部數(shù)據(jù)的基礎(chǔ)上,只對其中某些字段做分組排序,下面就來介紹一下具體用法,感興趣的可以了解一下2024-02-02
MySQL錯誤日志Error Log從配置到故障排查的完全指南
在MySQL數(shù)據(jù)庫運維中,遇到服務啟動失敗、連接異常、死鎖等問題時,錯誤日志(Error Log)絕對是你的 排障利器,它默認開啟,記錄著 MySQL 啟動、關(guān)閉及運行過程中的錯誤、警告與調(diào)試信息,本文將從配置查看、核心作用、進階功能三個維度,帶你全面掌握Error Log的使用技巧2026-02-02
mysql 通過拷貝數(shù)據(jù)文件的方式進行數(shù)據(jù)庫遷移實例
這篇文章主要介紹了mysql 通過拷貝數(shù)據(jù)文件的方式進行數(shù)據(jù)庫遷移實例的相關(guān)資料,需要的朋友可以參考下2016-11-11

