2017-05-11 32 views
1

我們使用MySQL(innodb)來存儲我們的數據。 我們有集成測試來啓動mysql數據庫(通過docker容器)並連接到數據庫。我們使用MyISAM作爲測試數據庫(原因解釋如下)。如何快速克隆mysql innodb數據庫

我們這樣做的方式是,第一個測試會將sql模式加載到模板DB中,隨後的測試將簡單地使用文件副本克隆數據庫。由於MyISAM可以很好地處理文件複製,因此我們只需將整個數據庫目錄複製到新的目錄中,並且每次測試都有一個新的克隆數據庫。這一直運行良好,特別是我們的集成測試在幾秒鐘內運行。

然而,當我們添加更多的測試中,我們不斷髮現由於InnoDB和MyISAM數據(索引的大小,外鍵約束的名字等等)之間的差異問題。我們希望移動測試數據庫以使用InnoDB,但希望保持快速的克隆操作。與現在需要的100ms相比,做mysqldump和恢復需要30多秒。

我的問題是,有沒有辦法克隆InnoDB超級快?

+1

「既然MyISAM的正常工作與文件複製......」的MyISAM是一個非常原始的數據庫引擎,如果你在MyISAM數據模式下測試您的應用程序的InnoDB,你還不如在所有的測試。這些引擎的行爲方式明顯不同。 – tadman

回答

0

備份InnoDB數據庫的更快方法之一是使用像innobackupex這樣的工具。

你也可以像你的數據庫,如果你FLUSH TABLES第一,在某種程度上,如果快照,應該是一致的一切承諾到磁盤。某些服務(如亞馬遜EC2)允許運行以後可以啓動獨立或用作備份還原點情況下的成像。

+0

我不想備份。我想將同一實例中的數據庫克隆到新的命名數據庫。 –

+1

克隆僅僅是一個已經恢復到不同的系統備份。 – tadman