1. 程式人生 > >[MySQL] MySQL資料移植遷移 + 備份【InnoDB儲存引擎】

[MySQL] MySQL資料移植遷移 + 備份【InnoDB儲存引擎】

儲存引擎:

         Myslq目前比較常用的兩個資料庫儲存引擎分別是MyISAM與InnoDB,MyISAM與InnoDB的主要的不同點在於效能和事務控制上。這裡簡單的介紹一下兩者間的區別:

MyISAM是MySQL5.5之前版本預設的資料庫儲存引擎。MYISAM提供高速儲存和檢索,以及全文搜尋能力,適合資料倉庫等查詢頻繁的應用。但不支援事務、也不支援外來鍵。MyISAM格式的一個重要缺陷就是不能在表損壞後恢復資料。

InnoDB是MySQL5.5版本的預設資料庫儲存引擎,不過InnoDB已被Oracle收購,MySQL自行開發的新儲存引擎Falcon將在MySQL6.0版本引進。InnoDB具有提交、回滾和崩潰恢復能力的事務安全。但是比起MyISAM儲存引擎,InnoDB寫的處理效率差一些並且會佔用更多的磁碟空間以保留資料和索引。儘管如此,但是InnoDB包括了對事務處理和外來鍵的支援,這兩點都是MyISAM引擎所沒有的。

應用場景:

MyISAM:

(1) 做很多count 的計算;

(2) 插入不頻繁,查詢非常頻繁;

(3) 沒有事務。

InnoDB:

(1) 可靠性要求比較高,或者要求事務;

(2) 表更新和查詢都相當的頻繁,並且表鎖定的機會比較大的情況。

(4) 效能較好的伺服器,比如單獨的資料庫伺服器,像阿里雲的關係型資料庫RDS就推薦使用InnoDB引擎。

實際問題:

         在實際開發中對於MySQL資料庫進行移植遷移或者系統故障時,資料庫未及時備份發生的問題,開始把本地data中的資料庫檔案拷貝到另一臺電腦上測試, 執行show tables ;可以看到資料庫表,但是對錶進行任何操作都報錯:ERROR 1146 (42S02): Table 'xxx' doesn't exist(表不存在),原以為Mysql的資料庫檔案.frm複製到本地安裝MySQL資料儲存目錄的data資料夾下就可以,事實不是我們想的那樣,對MySQL資料庫的移植遷移,我們能看到的只是它生成的表結構也就是說以 .frm為字尾名的檔案!以下是幾個檔案介紹。

         .frm檔案是資料庫中很多的表的結構描述檔案;

         ib_logfile0和ib_logfile1是關於資料庫的一些日誌檔案;

         ibdata1檔案時資料庫的真實資料存放檔案;

注:資料移植遷移需要資料庫版本,儲存引擎相同!(這裡做的是InnoDB儲存引擎,MyISAM沒有嘗試過,資料庫版本不同很遺憾沒能成功!)

實際環境:

# mysql 查詢版本

select version();

# mysql 檢視所有儲存引擎

show engines;

# 檢視可用的儲存引擎

show variables like 'storage_engine';

實際操作:

         應用工具:

MySQL(資料庫)

Navicat Premium(資料庫工具)

         好備份軟體上有mysql備份,但是備份出來的卻只有.frm表應用結構檔案,即時還原還是之前說的那個ERROR 1146問題,所以我採取的是檔案備份,當然檔案備份也就等同於資料的移植遷移,所以這個剛好一舉兩得!以下是備份軟體圖:

1.      選擇檔案備份,新增一個任務


2.      填寫備份任務資訊


3.      高階部分不用過,當然你也可以按自己需求來


4.      填寫完畢後確定[儲存任務]

5.      介面上有個立即備份按鈕,點選然後等提示備份成功資訊!

6.      這就是備份的所有資料庫的資料資訊


7.      測試是否備份資料可行,首先利用備份軟體備份一下當前的資料庫,然後從資料庫把某個資料庫刪掉[模擬誤刪],如圖所示



8.      還原資料,首先的關閉資料庫服務


然後進行資料還原,把剛才刪的資料庫和需要替換的幾個檔案覆蓋到資料庫的資料目錄下



9.      啟動資料庫,檢視是否成功[命令上圖已存在,下面就直接看結果]


正常無誤,大功告成![存在的一個問題就是函式沒有還原,具體原因以後分析!為了防止資料庫的儲存函式和儲存過程丟失,最好在寫的時候進行對應的儲存,如圖查詢就是我之前寫的函式儲存,這個是可以還原]

10.  非正常替換時的異常,也就是上面講到的[ERROR 1146 (42S02): Table 'xxx' doesn't exist(表不存在)],關閉資料庫服務,然後如圖我在還原前把誤刪時的檔案保留下來,就是為了演示這個異常,對還原正常的資料庫進行再次覆蓋,也就是假如我們只進行了tdrxwg這個資料庫進行了還原。如圖:


進行驗證,啟動資料庫服務,如下圖所示表雖然還原成功但是對錶進行操作時異常。到此結束,如果大家有更好的備份方式請互相交流!還有就是我的這個資料庫是存在著存檔案的,雖然可以用別的方式儲存sql語句,但是還原時不通過,這種情況不知為什麼!OK!個人能力有限,到時為止!謝謝!


--------------------------------------------------------------------------------------------------------------------
一花一世界,一葉一菩提。

我自落葉飄零,尋夢旅途繁忙!