日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 运维知识 > 数据库 >内容正文

数据库

Mysql——Innodb和Myisam概念与数据恢复

發(fā)布時(shí)間:2023/12/19 数据库 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Mysql——Innodb和Myisam概念与数据恢复 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

Innodb和Myisam是Mysql常見(jiàn)的兩種數(shù)據(jù)存儲(chǔ)引擎。沒(méi)有研究過(guò)Oracle、SQL Server等數(shù)據(jù)庫(kù),所以下面只針對(duì)Mysql。

一、兩種方式的數(shù)據(jù)存儲(chǔ)結(jié)構(gòu):

  在Myisam下,數(shù)據(jù)庫(kù)的每個(gè)數(shù)據(jù)表都有*.frm、*.YMI和*.YMD三個(gè)文件,其中*.frm存儲(chǔ)數(shù)據(jù)表的表結(jié)構(gòu),*.MYI存儲(chǔ)數(shù)據(jù)表的索引,*.MYD存數(shù)數(shù)據(jù)表的記錄數(shù)據(jù);

  在Innodb下,每個(gè)數(shù)據(jù)庫(kù)下的每個(gè)數(shù)據(jù)表只有一個(gè)*.frm存儲(chǔ)數(shù)據(jù)表的表結(jié)構(gòu),而所有數(shù)據(jù)庫(kù)的所有表數(shù)據(jù)索引、數(shù)據(jù)記錄都全部存儲(chǔ)在ibdata1文件中,而ib_logfile0和ib_logfile1是日志文件。

?

二、數(shù)據(jù)導(dǎo)入和恢復(fù):

Case1?Myisam =》 Myisam:

  由于Myisam的數(shù)據(jù)表結(jié)構(gòu)、索引、記錄數(shù)據(jù)等信息分別存儲(chǔ)在*.frm、*.MYI和*.MYD文件中,所以只需要將源數(shù)據(jù)庫(kù)數(shù)據(jù)表的相應(yīng)三個(gè)文件復(fù)制到對(duì)應(yīng)目的數(shù)據(jù)庫(kù)文件夾下就可以了。

  但是如果只有*.frm(假設(shè)test.frm)了,那么可以將test.frm復(fù)制到對(duì)應(yīng)的數(shù)據(jù)庫(kù)目錄(假設(shè)tmp數(shù)據(jù)庫(kù))之后,在tmp目錄下,新建test.MYI和test.MYD文件。此時(shí)通過(guò)“show tables;”可以看到有test表,但是查看表的數(shù)據(jù),如“desc test;”,此時(shí)報(bào)錯(cuò)無(wú)法查看,因?yàn)橹挥衪est.frm有數(shù)據(jù),而test.MYI和test.MYD是新建的無(wú)效文件。然后可以通過(guò)Mysql自帶修復(fù)操作“REPAIRTABLE test USE_FRM”修復(fù)數(shù)據(jù)表,然后就可以查看表的數(shù)據(jù),但是為空(因?yàn)閠est.frm中不包含數(shù)據(jù))。

Case2 Innodb =》 Innodb:

  由于Innodb下,表結(jié)構(gòu)存在*.frm文件,但是表的數(shù)據(jù)存儲(chǔ)在ibdata1文件中,所以導(dǎo)入時(shí),除了復(fù)制*.frm,還要復(fù)制源Mysql的data目錄下的ibdata1,替換掉目的數(shù)據(jù)庫(kù)的ibdata,如果目的數(shù)據(jù)庫(kù)中有已存在的其他數(shù)據(jù)庫(kù),此時(shí)需要先備份目的數(shù)據(jù)庫(kù)的原先data數(shù)據(jù),然后將新導(dǎo)入的表格通過(guò)其他方式導(dǎo)出,然后在還原原先的data數(shù)據(jù),將新導(dǎo)出的數(shù)據(jù)導(dǎo)入。

  如果只有*.frm(假設(shè)test.frm),沒(méi)有有效的ibdata1,那么也只能恢復(fù)表的結(jié)構(gòu)。先將test.frm復(fù)制到另一個(gè)數(shù)據(jù)庫(kù)中(假設(shè)tmp),然后在tmp下新建一個(gè)Innodb型的數(shù)據(jù)表test(有哪些字段不重要),不要添加任何記錄。然后將要恢復(fù)的test.frm復(fù)制到test目錄下替代新建test表產(chǎn)生的test.frm,重啟mysql之后,新建的test表的結(jié)構(gòu)就和要恢復(fù)的test表結(jié)構(gòu)相同

Case3 Myisam =》 Innodb 和 Innodb =》 Myisam:

  如果有*.frm、*.MYI和*.MYD三個(gè)文件,可以通過(guò)Case1的方法導(dǎo)入之后,重新導(dǎo)出sql或者其他文件,也可以導(dǎo)入后修改為Innodb,之后通過(guò)Case2方式。同樣Innodb =》 Myisam的操作類似。

?

  對(duì)于數(shù)據(jù)庫(kù)的數(shù)據(jù),除了從.frm文件恢復(fù)之外,如果有日志文件,從日志文件恢復(fù)也是一個(gè)一個(gè)選擇。但是對(duì)于數(shù)據(jù)庫(kù),進(jìn)行移植或這更換系統(tǒng)時(shí),最好還是通過(guò)導(dǎo)入導(dǎo)出工具到處相應(yīng)的sql語(yǔ)句文件。

?

三、Innodb和Myisam其他區(qū)別:

  1、Myisam多個(gè)數(shù)據(jù)庫(kù)和數(shù)據(jù)表的記錄數(shù)據(jù)是分文件存儲(chǔ)的,而Innodb所有表的記錄數(shù)據(jù)都存儲(chǔ)在ibdata1文件中,所以當(dāng)數(shù)據(jù)表記錄比較少,單個(gè)表的數(shù)據(jù)文件比較少時(shí),此時(shí)使用Myisam性能會(huì)略好于Innodb。但是如果表的數(shù)據(jù)記錄非常多,此時(shí)使用Innodb的性能會(huì)遠(yuǎn)遠(yuǎn)高于Myisam,通過(guò)測(cè)試可以發(fā)現(xiàn),隨著表的記錄增加,Innodb的性能降低很少,而Myisam的性能則迅速降低。

  2、Innodb支持事務(wù)操作,而Myisam不支持事務(wù)操作。

  事務(wù)操作:就是一組多條sql指令作為一個(gè)整體,可以并發(fā)操作,但是關(guān)鍵點(diǎn)在于事務(wù)內(nèi)的多個(gè)操作必須同時(shí)執(zhí)行完才會(huì)提交結(jié)果。所以事務(wù)內(nèi)的SQL要么都不做,要么都做。

  事務(wù)實(shí)現(xiàn)一般有下面兩種方式:

  Way1 begin、rollback和commit:

  begin表示開(kāi)始事務(wù),rollback表示事務(wù)回滾,commit表示事務(wù)提交。

  Way2 通過(guò)set來(lái)改變Mysql默認(rèn)的自動(dòng)提交模式:

  set autocommit=0 禁止自動(dòng)提交(使用事務(wù),此時(shí)每條SQL都會(huì)當(dāng)作事務(wù),必須顯示使用commit體提交結(jié)果或者rollback撤銷結(jié)果)
  set autocommit=1 開(kāi)啟自動(dòng)提交(禁用事務(wù))

例子:參考這里

轉(zhuǎn)載于:https://www.cnblogs.com/DwyaneTalk/p/4113829.html

總結(jié)

以上是生活随笔為你收集整理的Mysql——Innodb和Myisam概念与数据恢复的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。