資料庫內的資料筆數太多 我該如何備份還原

#大數據庫; #資料庫; #mysqldump

近期協助一套服務上雲端。
因為既有服務運作一段時間,客戶難免有些緊張與擔憂。
早已接受過幾次摧殘的自己,泰然自若地說,別擔心,我們可以先把服務跑起來,再透過域名指向的方式逐步讓服務經過測試、驗證與正式上線。
客戶面有難色地說,倒不是擔心我們的經驗,而是資料庫真的太大,怕匯入、匯出會遇到問題…

不免心生好奇,就算資料庫再龐大,應該也不會太難處理,就問問客戶的經驗。
客戶才緩緩說道,他習慣使用PhpMyAdmin這類的管理工具,友善的GUI方便他快速處理前期建置與後期維護的工作,但他們有些致命的問題,就是沒法上傳/匯入太大的SQL 檔案。
其實這個問題不難解決,不外乎就是調整上頭的PHP設定,加大POST的資料量、記憶體、逾時等候等參數。既然客戶習慣這個工具,就調了一版,讓所最大可以處理到500MB上傳,果然很快就聽到客戶聲音,上傳失敗…

這下越來越好奇,到底什麼資料庫這麼大…
自己對於工具的選擇倒也沒特別偏好,加上這幾年Docker中打滾,對於Linux 這類型的操作環境也越來越熟悉,乾脆直接透過MySQL dump處理掉就行了!

mysql -uroot -p
create database testDB;
exit;

mysqldump -uroot -p testDB < ./target.sql

指令全都MySQL我就不相信還會有問題,然而『意外往往就是出現在你以為沒意外的時刻』。
我收到了錯誤,系統顯示:ERROR 1146(42502) 資料表不存在…。
傻眼!這不就是在還原資料庫,而且前面不是已經插入幾筆資料,現在怎麼會告訴我資料表不存在!!

看了客戶上限的資料庫,我看到有問題的資料表竟然高達一百萬筆!!
依據過往分析SQL檔案內容,估計這就是問題所在- 資料表過於龐大無法一次性全部寫入。

既然一次性寫入不行,能不能換個方式,一筆一筆把資料寫入。
方案也就這樣確定下來了

mysql -uroot -p
create database testDB;
use testDB;
source target.sql;
exit;

這畫面很經典,果然跟預期一樣,不是一次性寫入,而是一筆一筆執行腳本插入到資料庫中,想當然爾,問題也就順利迎刃而解。

僅以此篇文章記錄我在宜蘭山上民宿,拿著一台iPad Pro 排除問題的心得紀錄…

發佈留言