網頁

2025年7月17日 星期四

[教學] MySQL 如何匯入大型 SQL 資料檔?利用 EmEditor 分割檔案與 phpMyAdmin 匯入實戰

在網站維運的過程中,資料庫的備份與還原是家常便飯。但當資料庫成長到一定規模時,單純的匯出匯入就可能變成一場惡夢。這次,我們將分享一個處理大型 MySQL 資料庫(超過 1GB)的實戰經驗,特別是在有資源限制的虛擬主機環境(如 GoDaddy)中,如何巧妙地完成匯入工作。

前言:我們遇到的挑戰

我的部落格 bestdaylong.com 架設在 GoDaddy 的虛擬主機上,其提供的 MySQL 資料庫有 1GB 的容量上限。隨著資料日積月累,資料庫也即將觸頂,因此需要將歷史資料備份到其他地方。

我遇到的主要問題如下:

  1. 檔案過大:完整的 SQL 匯出檔超過 1GB。

  2. phpMyAdmin 限制:直接使用 phpMyAdmin 的匯入功能,會因為檔案過大及執行時間過長而導致連線逾時(Timeout),無法成功匯入。

  3. MySQL Workbench 速度緩慢:嘗試使用官方的 MySQL Workbench 工具進行資料匯入,雖然可行,但速度非常慢,且進度回饋不明顯,難以掌握狀況。

面對這些挑戰,最終的解決方案是:分割大法

核心概念:化整為零

既然單一的大檔案無法處理,那我們就將它分割成數個小檔案。最好的分割方式是依據資料的特性,例如以「年份」為單位,將一個巨大的 SQL 檔,拆分成 2015.sql2016.sql2017.sql... 等多個小檔案,再逐一進行匯入。

所需工具

  1. EmEditor:處理大型文字檔的神器。一般的文字編輯器(如 EditPlus、Notepad++)在開啟 GB 等級的檔案時可能會崩潰或沒有回應,而 EmEditor 能輕鬆應對。

  2. phpMyAdmin:虛擬主機最常見的網頁版資料庫管理工具,用來匯入分割後的小檔案。

  3. MySQL Workbench(選用):一個功能強大的本地端資料庫管理工具,在本次任務中,主要用來「監控」匯入進度。


操作步驟教學

步驟一:使用 EmEditor 開啟並篩選資料

首先,我們需要從巨大的 SQL 檔中,篩選出我們想要處理的資料表內容。在我的案例中,我想處理的是 Stock(股票資料)這張表。

  1. 用 EmEditor 開啟你巨大的 .sql 檔案。

  2. 使用 EmEditor 的篩選(或搜尋)功能,輸入 INSERT INTOStockVALUES。這會將檔案中所有與 Stock 資料表相關的插入語法全部顯示出來。

  3. 將篩選出的所有內容(Ctrl+A 全選)複製,並貼到一個新的 EmEditor 檔案中,將其另存為 stock_all.sql。這樣我們就有了一個只包含股票資料的 SQL 檔。

步驟二:依年份分割成小檔案

現在我們有了 stock_all.sql,接著要將它依年份分割。

  1. 在 stock_all.sql 檔案中,再次使用篩選功能。

  2. 例如,我想分離出 2017 年的資料,就在篩選框中輸入 2017-

  3. EmEditor 會即時篩選出所有包含 "2017-" 的資料行。

  4. 將篩選出的結果全選、複製,然後貼到一個新的檔案,並命名為 stock_2017.sql

  5. 重複此步驟,建立出 stock_2018.sqlstock_2019.sql 等檔案。

經過這個步驟,原本超過 1GB 的大檔案,就被我們成功拆解成數個幾 MB 到幾十 MB 的小檔案,為後續匯入鋪平了道路。

步驟三:透過 phpMyAdmin 匯入分割後的檔案

這是最關鍵的一步。因為檔案已經變小,phpMyAdmin 的匯入功能就能派上用場了,而且速度飛快!

  1. 登入你的 phpMyAdmin

  2. 選擇目標資料庫,並點進 Stock 資料表。

  3. 點擊頂端的 「匯入 (Import)」 頁籤。

  4. 點擊「選擇檔案」,選擇你剛剛分割好的其中一個檔案,例如 stock_2019.sql

  5. 確認設定無誤後,點擊右下角的 「執行 (Go)」

由於檔案不大,通常在幾秒到幾十秒內就能完成匯入。

步驟四(進階技巧):使用 MySQL Workbench 監控進度

phpMyAdmin 在執行匯入時,頁面會處於處理中狀態,我們無法得知確切的進度。這時,MySQL Workbench 就成了我們的監控利器。

  1. 在 phpMyAdmin 開始匯入的同時,開啟 MySQL Workbench 並連線到同一個資料庫。

  2. 在查詢視窗中,執行以下 SQL 語法來查看最新的資料:

    Generated sql
    SELECT * FROM stock0331.Stock 
    WHERE year(StockDate) = 2019 
    ORDER BY StockDate DESC;
  3. 你可以每隔幾秒鐘就重新執行一次查詢。你會發現資料筆數不斷增加,日期也不斷更新,這代表 phpMyAdmin 正在背景順利地匯入資料。透過這個方法,即使網頁沒有回饋,我們也能安心地掌握進度。

結論

處理大型資料庫的匯入問題,關鍵在於「化整為零」。MySQL Workbench 雖然功能強大,但在某些虛擬主機環境下的批次匯入效能不佳。反而是透過 EmEditor 這種專業級文字編輯器進行檔案分割,再利用主機商提供的標準工具 phpMyAdmin 進行匯入,成為了最高效、最可靠的解決方案。

希望這次的實戰分享,能幫助到遇到同樣問題的朋友!


原始操作影片參考


 


沒有留言:

張貼留言

注意:只有此網誌的成員可以留言。