1. 程式人生 > >win下mysql物理備份恢復 適用與mysql 恢復

win下mysql物理備份恢復 適用與mysql 恢復

查詢mysql 安裝目錄下my.ini 檔案

首先停止源資料庫服務。然後拷貝data目錄中對應資料庫名稱的目錄(mydb),其中.frm檔案為資料庫表定義檔案。

然後拷貝到新資料庫安裝目錄的data目錄下,本文例子:c:\ProgramData/MYSQL/MYSQL SERVICE 5.5\data\

然後停止新資料庫服務,在新資料庫建立一個與舊庫名相同的庫,發現在data目錄下面已經有ib_logfile0ib_logfile1ibdata1三個檔案了(免安裝版本解壓後是沒有的),之後停掉源資料庫服務,將ibdata1檔案庫資料庫資料夾 拷貝過來進行覆蓋。最後啟動新資料庫服務就可以對資料庫進行正常操作了。

※以上步驟的操作針對innodb型別的資料庫。

因為mysql5.1版本後,innodb不再作為預設的設定了

附頁:網上的備份資料庫例子:

在使用mysql資料庫過程中,遇到了錯誤ERROR 1146 (42S02):Table doesn’t exist,經過了兩天,終於解決了這個問題。引起該錯誤的原因不同,對應的解決方法也不同。這裡只針對我的情況進行一下說明。可能寫的比較亂,希望你慢慢看,下面是我整個從犯錯誤到解決問題的整個過程,有助於你更好的瞭解相關知識。

     先說一下發生該錯誤的情形。我是將別人的資料庫目錄下的data資料夾直接複製過來的,裡面有三個資料庫mysql、test和backupctrl,主要想要backupctrl資料庫,記住不是備份,是拷貝,而且backupctrl是使用innodb作為儲存引擎的,這兩方面綜合起來就導致了1146這個錯誤。

       因為要使用innodb做儲存引擎,所以要對my.ini檔案進行相應的修改。在my.ini檔案中,你可以找到關於innodb的相關設定,但是被註釋掉了。因為mysql5.1版本後,innodb不在作為預設的設定了。首先將skip-innodb註釋掉,然後需要設定正確innodb的相關引數。

       採用innodb儲存引擎,關係到data資料夾下面的一些檔案:ib_logfile0、ib_logfile1和ibdata1,另外還有一個就是資料庫名下面的眾多.frm檔案。先對這幾個檔案作簡要介紹。

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

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

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

       在將別人的data資料夾整個複製過來後,你到mysql目錄下的bin資料夾下執行命令:

       mysql  --console

       此時,你會發現很多的錯誤提示,該命令就是對環境進行測試的。如果你不理會這些錯誤,進入資料庫,用show tables;命令發現數據庫表存在,但是執行select等操作就會出現1146:Table doesn’t exist這個錯誤了。

     其實這是由ibdata1檔案的錯誤引起的,這個應該在日誌檔案ib_logfile0和ib_logfile1中找到(這個本人沒有驗證),於是把ibdata1檔案刪除掉,再次執行該命令,發現沒有提示錯誤了,但進入資料庫以後,操作仍就導致1146這個錯誤。後來仔細一下,也是,你說你把ibdata1檔案刪除,相當於把資料庫的真實資料刪除了,這時你就會問為什麼資料庫表還存在呢,都能看到(其實我當初就是這麼想的),因為資料庫表結構的描述是在.frm的眾多檔案中的,所以能通過show tables;檢視到。

       那麼下一個問題就出來了:ibdata1檔案是從別人那裡拷貝過來的,為什麼在那邊能用,到我這邊就不能用了呢?這就是最核心的問題所在,因為mysql是採用緩衝方式來講資料寫入到ibdata1檔案中的,這正是fflush()函式存在的理由。因此當別人的mysql在執行時,你對data資料夾進行拷貝,即對ibdata1進行拷貝肯定會導致該檔案中的資料出錯的(具體錯誤原因沒有深入學習)。

       知道了上面的問題,解決就簡單多了,呵呵。首先,將別人的mysql服務停止(這個就不用說了吧,我的前兩篇博文中有,你可以參考),然後在拷貝data資料夾,替換到你的相應目錄下。這樣,你再按照我的博文http://jazka.blog.51cto.com/809003/329423中介紹的方法對資料庫進行操作就可以了。

       網上查詢解決辦法時,發現也有不少人有這個問題,而按照停止服務再拷貝的方式還是不行(我剛開始也不行,不過後來就好了,怪了,不知道為什麼)。所以這裡再說一種方法。首先在自己的mysql下,建立一個你即將要拷貝的資料庫(資料庫名要一樣,裡面不需要建表),然後將所有的.frm檔案拷貝到你建的資料庫資料夾下,此時再次進入mysql,用show  tables查看錶是否已經建立起來了。然後停止你自己的mysql服務,發現在data檔案下面已經有ib_logfile0、ib_logfile1和ibdata1三個檔案了(免安裝版解壓後是沒有的),之後停掉別人的mysql服務,只將ibdata1檔案拷貝過來進行覆蓋,最後啟動你自己的mysql服務就可以對資料庫進行正常操作了。

備份:

將上面倆資料夾備份 ()