2017-10-12 78 views
1

我和我的團隊正在努力糾正我們前任所做的事情,這正在破壞我們的服務器結構。我們的前任將大量服務器放在同一個數據庫上(數據庫名稱,表等),每個服務器都包含其他數據不可用的數據。在同一服務器上導入兩個具有相同模式(數據庫名稱)的不同mysql轉儲文件

例子:

服務器1包含客戶信息,但沒有客戶交易

服務器2沒有客戶信息,但有客戶交易

等等...

現在,我們正在糾正這些問題。僅將來自2個服務器的所有數據放到一臺服務器上。

手頭上,我們有兩個不同的mysql轉儲和一個服務器。

問題:是否可以導入具有相同數據庫名稱,表格等的兩個mysql轉儲,但在已經具有上述數據庫的服務器上包含不同的數據?

我已經導入了mysql dump的大內容,所以我正在等待您的確認。

我的服務器是Ubuntu的服務器16.04.3(以最小的GUI)

MySQL服務器5.7與MySQL工作臺

非常感謝......

UPDATE

由於mysql dump只包含CREATE TABLE tablenameINSERT INTO部分和NO DROP TABLE IF IT EXIST tablename。我只是繼續使用OPTION執行mysql轉儲來忽略錯誤(但是不可取,當然,這取決於您的情況),因爲我唯一的擔心是隻添加來自兩個mysql轉儲的缺失數據,我遇到的錯誤是「重複輸入」,這對我的情況來說是完美的。

謝謝。

回答

1

轉儲文件,在默認情況下,無非是這樣一堆SQL語句:

-- 
-- Table structure for table `foo` 
-- 

DROP TABLE IF EXISTS `foo`; 

CREATE TABLE `foo` (
    `id` int(11) NOT NULL AUTO_INCREMENT, 
    ...other columns... 
    PRIMARY KEY (`id`) 
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; 

-- 
-- Dumping data for table `foo` 
-- 

INSERT INTO `foo` VALUES (...lots of rows of data...); 

注意,它會爲每個表做的第一件事就是DROP TABLE,然後重新CREATE TABLE。

不要這樣做!

如果您的表具有相同的名稱,那麼它將清除迄今已加載的數據。

我建議你創建一個新的數據庫並將轉儲文件加載到該文件中。然後,即使這些表具有相同的名稱,您也可以訪問一個MySQL實例中的所有數據。然後,您可以使用SQL運行跨數據庫查詢來以任何您想要的方式合併數據(例如,使用多表UPDATE語句連接每個數據庫中同名的每個表)。

我想知道爲什麼您的前數據庫開發人員將數據分離出來......這可能與Sarbanes-Oxley合規性有關嗎?在合併數據之前,您可能需要考慮這一點。

+0

感謝您的回覆。我會研究你的建議,儘管我對此不太瞭解。我所知道的原因是,他們體驗糟糕的表現,比如裝載需要很長時間。但根據我的評估,糟糕的性能是服務器規格和配置較差的結果。但是我們仍然會測試這個只是爲了合併所有的數據,由於數據丟失,無法找到一些事務。 – Markmeplease

+0

嗨比爾卡爾文,問題,如果mysql轉儲沒有 'DROP TABLE IF EXUSTS foo;' 'CREATE TABLE foo' - - 我可以執行該mysql轉儲到服務器?非常感謝。 – Markmeplease

+1

@Markmeplease,是的,甚至有可用於mysqldump的選項可以省去DROP和CREATE語句。我鼓勵你閱讀文檔,然後嘗試一下! –

相關問題