如何恢復(fù)Mysql數(shù)據(jù)庫(kù)的詳細(xì)介紹
由于在一臺(tái)測(cè)試機(jī)器上打算重新安裝Mysql數(shù)據(jù)庫(kù),由于簡(jiǎn)單粗暴的直接卸載了,沒(méi)有備份公司Discuz和Redmine使用的Mysql數(shù)據(jù)庫(kù),過(guò)程可想的悲慘。
還好的是只是卸載掉了Mysql的程序,所有的數(shù)據(jù)文件還是存在的。
下面是在恢復(fù)數(shù)據(jù)庫(kù)的過(guò)程
1. Discuz數(shù)據(jù)庫(kù)
Discuz數(shù)據(jù)庫(kù)的恢復(fù)非常順利, 在安裝好新版本的Mysql后,直接將原來(lái)的數(shù)據(jù)庫(kù)文件copy到新的數(shù)據(jù)目錄中,重新啟動(dòng)mysql, 就能看到恢復(fù)的數(shù)據(jù)庫(kù)了
2. Redmine數(shù)據(jù)庫(kù)
本打算直接使用上面的經(jīng)驗(yàn),也能看到所有的表,但是就是執(zhí)行查詢的時(shí)候,總是報(bào)錯(cuò)"表不存在".
后來(lái)查了一些資料,發(fā)現(xiàn),原因應(yīng)該是Discuz和Redmine使用的Mysql引擎不一樣導(dǎo)致的。
Discuz使用的是MyISAM, 而Redmine使用的是InnoDB.
解決的辦法是,
除了要copy數(shù)據(jù)目錄外,還要記得覆蓋ibdata1文件。
以表”Table”為例: 如類型是MyISAM, 數(shù)據(jù)文件則以”Table.frm””Table.MYD””Table.MYI””三個(gè)文件存儲(chǔ)于”/data/$databasename/”目錄中. 如類型是InnoDB, 數(shù)據(jù)文件則存儲(chǔ)在”$innodb_data_home_dir/″中的ibdata1文件中(一般情況),結(jié)構(gòu)文件存在于table_name.frm中. MySQL的數(shù)據(jù)庫(kù)文件直接復(fù)制便可以使用,但是那是指“MyISAM”類型的表。 而使用MySQL-Front直接創(chuàng)建表,默認(rèn)是“InnoDB”類型,這種類型的一個(gè)表在磁盤(pán)上只對(duì)應(yīng)一個(gè)“*.frm”文件,不像MyISAM那樣還“*.MYD,*.MYI”文件。 MyISAM類型的表直接拷到另一個(gè)數(shù)據(jù)庫(kù)就可以直接使用,但是InnoDB類型的表卻不行。解決方法就是:
同時(shí)拷貝innodb數(shù)據(jù)庫(kù)表“*.frm”文件和innodb數(shù)據(jù)“ibdata1”文件到合適的位置。啟動(dòng)MySQL的Windows服務(wù) 由于MySQL這樣數(shù)據(jù)混雜的形式, 往往很容易讓使用者在備份時(shí)忘記了備份InnoDB, 從而導(dǎo)致了上述錯(cuò)誤.
意思就是說(shuō)在數(shù)據(jù)庫(kù)引擎類型為InnoDB時(shí),拷貝數(shù)據(jù)文件的同時(shí)還需要拷貝ibdata1,于是把ibdata1也拷貝過(guò)去覆蓋,發(fā)現(xiàn)還是有點(diǎn)問(wèn)題,于是停止mysql服務(wù),將目錄下的ib_logfile*文件全部刪除掉,重新啟動(dòng)mysql服務(wù),well done,可以了
高興啊,于是稍微總結(jié)了,希望以后遇到相同的問(wèn)題,能夠快速解決。
1,在進(jìn)行mysql數(shù)據(jù)庫(kù)備份的或遷移的時(shí)候,盡量備份完成所需要的數(shù)據(jù);
2,如果直接拷貝原有數(shù)據(jù)庫(kù)文件"*.frm"、"*.MYD"、"*.MYI"等文件時(shí)候,如果原數(shù)據(jù)庫(kù)引擎是InnoDB,切記還需拷貝ibdata1文件
3,備份數(shù)據(jù)庫(kù)的時(shí)候,最好是用相關(guān)的工具進(jìn)行備份或是導(dǎo)出sql文件,以免浪費(fèi)時(shí)間在數(shù)據(jù)庫(kù)恢復(fù)上
4,msyql版本或是備份工具的版本不同,也可能引起數(shù)據(jù)恢復(fù)有問(wèn)題。
實(shí)踐證明以上問(wèn)題是存在的,解決方案是可行的,哈哈,為了以后方便,寫(xiě)了這篇博客隨筆,希望大??吹搅瞬灰梢暎瑲g迎拍磚。
1:MyISAM類型的數(shù)據(jù)文件可以在不同操作系統(tǒng)中COPY,這點(diǎn)很重要,布署的時(shí)候方便點(diǎn)。(只需要拷貝 數(shù)據(jù)庫(kù)名字文件夾下面的文件,這樣數(shù)據(jù)庫(kù)就拷貝完了)
2: InnoDB類型的 要注意多拷貝 ibdata1 , 最好不要是直接復(fù)制文件夾,而是應(yīng)該用sql導(dǎo)入導(dǎo)出
相關(guān)文章
my.ini優(yōu)化mysql數(shù)據(jù)庫(kù)性能的十個(gè)參數(shù)(推薦)
這篇文章主要介紹了my.ini優(yōu)化mysql數(shù)據(jù)庫(kù)性能的十個(gè)參數(shù)(推薦),需要的朋友可以參考下2015-09-09Mysql使用sum()函數(shù)返回null的問(wèn)題詳解
MySQL的Sum()函數(shù)是用來(lái)找出所有記錄的一個(gè)字段的總和,下面這篇文章主要給大家介紹了關(guān)于Mysql使用sum()函數(shù)返回null的問(wèn)題,文中通過(guò)實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下2022-01-01mysql如何利用binlog進(jìn)行數(shù)據(jù)恢復(fù)詳解
MySQL的binlog日志是MySQL日志中非常重要的一種日志,下面這篇文章主要給大家介紹了關(guān)于mysql如何利用binlog進(jìn)行數(shù)據(jù)恢復(fù)的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),需要的朋友可以參考下2018-10-10SQL實(shí)現(xiàn)LeetCode(175.聯(lián)合兩表)
這篇文章主要介紹了SQL實(shí)現(xiàn)LeetCode(175.聯(lián)合兩表),本篇文章通過(guò)簡(jiǎn)要的案例,講解了該項(xiàng)技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下2021-08-08MySQL 遷移后無(wú)法快速導(dǎo)數(shù)據(jù)問(wèn)題解決
這篇文章主要為大家介紹了MySQL 遷移后無(wú)法快速導(dǎo)數(shù)據(jù)問(wèn)題解決,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-10-10CentOS 8 安裝 MySql并設(shè)置允許遠(yuǎn)程連接的方法
這篇文章主要介紹了CentOS 8 安裝 MySql并設(shè)置允許遠(yuǎn)程連接的方法,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-09-09mysql遞歸函數(shù)with?recursive的用法舉例
在實(shí)際開(kāi)發(fā)的過(guò)程中,我們會(huì)遇到一些數(shù)據(jù)是層級(jí)關(guān)系的、要展示數(shù)據(jù)子父級(jí)關(guān)系的時(shí)候,下面這篇文章主要給大家介紹了關(guān)于mysql遞歸函數(shù)with?recursive的用法舉例,文中通過(guò)實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下2022-08-08Mysql 的存儲(chǔ)引擎,myisam和innodb的區(qū)別
這篇文章主要介紹了Mysql 的存儲(chǔ)引擎,myisam和innodb的區(qū)別,需要的朋友可以參考下2014-12-12如何用workbench導(dǎo)出mysql數(shù)據(jù)庫(kù)關(guān)系圖
用workbench導(dǎo)出mysql數(shù)據(jù)庫(kù)關(guān)系圖的解決方法,需要的朋友請(qǐng)往下閱讀2013-03-03