[教學] MariaDB/MySQL備份 - 如何匯出、匯入資料庫或表格


繼上次談了資料庫中文亂碼的問題後,本文將繼續說明使用資料庫一定會遇到的問題: MariaDB/MySQL備份 ,相信大家一定會因為某些需求而需要備份資料庫,所以如何將資料庫的表格或整份資料庫匯出、匯入絕對是一個值得學習的課題,在本文中,除了介紹一些基本的相關語法外,也會試著從不同的角度來測試這些指令的操作結果,進而更了解這些指令所造成的影響。

MariaDB/MySQL備份

如果你想要有一個完整的且免費的資料庫範例可以進行練習,那麼可以試試Mariadb官方提供的「Example Databases」,這裡面有提供幾個資料量豐富的資料庫,都是蠻好的練習對象,檔案下載並解壓後其副檔名是「.sql」,配合以下要介紹的匯入功能,把範例資料庫匯入就可以使用了

匯出資料庫/表格

首先,先來說明如何將現有的資料庫做備份:需要的指令為「mysqldump」,在執行這個指令在的時候不用進入資料庫內,直接在外部執行即可,語法如下:

$ mysqldump -u account -p database_name > backup.sql
  • account:使用者帳號
  • database_name:要備份的資料庫名稱
  • backup.sql:備份輸出名稱,一般會以sql當成副檔名

執行上面的指令後,系統還會要求我們輸入密碼,輸入之後就可以將資料庫匯出到指定的檔案中。而如果只有備份資料庫中的某個表格,則只要在語法後面多加一個表格名稱即可,例如:

$ mysqldump -u account -p database_name table_name > backup_table.sql

多個表格則可以直接再加在後面即可:

$ mysqldump -u account -p database_name table_name1 table_name2 > backup_table.sql

匯入資料庫/表格

接著上面的範例,我們可以試著把現有的資料庫給刪除,然後用匯入的方式來看看是否能夠將資料庫還原,匯入資料庫的語法如下:

$ mysql -u account -p database_name < backup.sql

簡單的來說,其實就是把之前備份的「.sql」導回資料庫而已,很簡單吧。不過這邊特別要說明的是匯入時需要指定資料庫名稱,如上面的例子為「database_name」,這個資料庫必需是已經存在的才行,不然會發生找不到該資料庫的錯誤訊息。因此,你也可以新建一個資料庫,然後把舊資料庫的資料匯入,這樣新舊二個資料庫裡面的內容會是一模一樣的。如果忘了怎麼新建資料庫,那麼就試試以下指令吧:

MariaDB [(none)]> create database new_database_name;

註:匯入單一表格的語法和匯入資料庫的語法是「相同」的,不需額外再加表格名稱(table_name)

實務案例FAQ

雖然資料庫的匯入、匯出語法蠻簡單的,但是有一些實務上的運作結果可能要實際操作一下才能確定,以下就是我自己做了一些測試來解決心中疑問的案例,供大家參考

匯入資料庫時,指定的資料庫是否要存在?

這個問題上面有提到了,匯入時需要匯入「現存」的資料庫才能順利把資料帶入喔,不然會發生找不到資料庫的情況

匯入資料庫時,是否會覆蓋原表格中較新的資料?

會,新資料會不見,舉例來說:原本表格內的資料有10筆,我們將之備份後再於表格中新增1筆新資料,此時資料總數已變為11筆,若此時將之前的備份資料匯入,則新的那筆資料會不見,恢復成原本的10筆 (如果你查看.sql中的語法,就可以發現它是先Drop掉舊資料再匯入資料)

匯入資料庫時,是否會影響新表格的資料?

不會,如果原資料庫有10個表格,備份之後新增了1個新表格,此時將備份資料匯入並不會影響新表格內容;而若是舊表格被刪除了,匯入後則會復原

指令的大小寫是否會影響執行?

基本上不管大小寫,系統都是視為一樣的,所以不都可以正常執行,但有一點要注意一下,如果你的表格名稱有大寫的字母,因為匯出備份後「預設」把名稱改為小寫,之後再匯入時你的表格會變成全部小寫喔,例如:原表格名稱是「Demo」,匯出後再匯入,則表格名稱會變成「demo」,但功能是不變的。那是否可以保留原本的大小寫呢?嗯!可以的,有空再來教大家吧!^^

簡單的說就是:匯入資料庫時,會把舊表格「恢復原狀」,至於其他新表格則不會影響

延伸閱讀:
[教學] MariaDB/MySQL 常用指令操作與語法範例
[Mariadb] 如何解決資料庫中文亂碼(問號)的編碼問題