1、找回表結(jié)構(gòu),如果表結(jié)構(gòu)沒(méi)有丟失直接到下一步\x0d\x0a\x0d\x0aa、先創(chuàng)建一個(gè)數(shù)據(jù)庫(kù),這個(gè)數(shù)據(jù)庫(kù)必須是沒(méi)有表和任何操作的。\x0d\x0a\x0d\x0ab、創(chuàng)建一個(gè)表結(jié)構(gòu),和要恢復(fù)的表名是一樣的。表里的字段無(wú)所謂。一定要是innodb引擎的。CREATE TABLE `weibo_qq0`( `weiboid` bigint(20)) ENGINE=InnoDB DEFAULT CHARSET=utf8;\x0d\x0a\x0d\x0ac、關(guān)閉mysql, service mysqld stop;\x0d\x0a\x0d\x0ad、用需要恢復(fù)的frm文件覆蓋剛新建的frm文件;\x0d\x0a\x0d\x0ae、修改my.ini 里 innodb_force_recovery=1 , 如果不成修改為 2,3,4,5,6。\x0d\x0a\x0d\x0af、 啟動(dòng)mysql,service mysqld start;show create table weibo_qq0 就能li到表結(jié)構(gòu)信息了。\x0d\x0a\x0d\x0a2、找回?cái)?shù)據(jù)。記得上面把 innodb_force_recovery改掉了,需要注釋掉,不然恢復(fù)模式不好操作。 這里有個(gè)關(guān)鍵的問(wèn)題,就是innodb里的任何數(shù)據(jù)操作都是一個(gè)日志的記錄點(diǎn)。也就是如果我們需要數(shù)據(jù)恢復(fù),必須把之前的表的數(shù)據(jù)的日志記錄點(diǎn)添加到一致。\x0d\x0a\x0d\x0aa、建立一個(gè)數(shù)據(jù)庫(kù),根據(jù)上面導(dǎo)出的創(chuàng)建表的sql執(zhí)行創(chuàng)建表。\x0d\x0a\x0d\x0ab、找到記錄點(diǎn)。先要把當(dāng)前數(shù)據(jù)庫(kù)的表空間廢棄掉,使當(dāng)前ibd的數(shù)據(jù)文件和frm分離。 ALTER TABLE weibo_qq0 DISCARD TABLESPACE;\x0d\x0a\x0d\x0ac、把之前要恢復(fù)的 .ibd文件復(fù)制到新的表結(jié)構(gòu)文件夾下。 使當(dāng)前的ibd 和frm發(fā)生關(guān)系。ALTER TABLE weibo_qq0 IMPORT TABLESPACE; 結(jié)果不出意外肯定會(huì)報(bào)錯(cuò)。就和我們開(kāi)展數(shù)據(jù)開(kāi)始說(shuō)的那樣,數(shù)據(jù)記錄點(diǎn)不一致。我們看看之前ibd記錄的點(diǎn)在什么位置。開(kāi)始執(zhí)行 import tablespace,報(bào)錯(cuò) ERROR 1030 (HY000): Got error -1 from storage engine。找到mysql的錯(cuò)誤日志,InnoDB: Error: tablespace id in file ‘.testweibo_qq0.ibd’ is 112, but in the InnoDB InnoDB: data dictionary it is 1. 因?yàn)?weibo_qq0 之前的記錄點(diǎn)在112,當(dāng)前的表只創(chuàng)建一次,所以記錄點(diǎn)是1.\x0d\x0a\x0d\x0ad、那怎么從1記錄到112。for ($1=1; $i
創(chuàng)新互聯(lián)公司專業(yè)為企業(yè)提供龍湖網(wǎng)站建設(shè)、龍湖做網(wǎng)站、龍湖網(wǎng)站設(shè)計(jì)、龍湖網(wǎng)站制作等企業(yè)網(wǎng)站建設(shè)、網(wǎng)頁(yè)設(shè)計(jì)與制作、龍湖企業(yè)網(wǎng)站模板建站服務(wù),十年龍湖做網(wǎng)站經(jīng)驗(yàn),不只是建網(wǎng)站,更提供有價(jià)值的思路和整體網(wǎng)絡(luò)服務(wù)。
回答于?2022-11-16
1、第一步,查詢語(yǔ)句:select* from table_name;或select * from table_name where [條件]
2、第二步,增加語(yǔ)句或插入數(shù)據(jù)insert into table_name (clus...) values(values...)實(shí)例如圖:
3、修改數(shù)據(jù):update tablename set xx=xx,xxx=xx where xxx=xxx and xxx=xxx;
4、第四步, 刪除語(yǔ)句delete table_name where 條件實(shí)例如圖:
簡(jiǎn)單情況下:進(jìn)入原來(lái)mysql安裝路徑下的data文件夾下,找到相應(yīng)的庫(kù)和ibdata1,進(jìn)行copy,就可回復(fù)原來(lái)的數(shù)據(jù)。
復(fù)雜情況下:
從另一臺(tái)機(jī)上把MySQL數(shù)據(jù)庫(kù)的mysql文件夾拷貝到本地機(jī)上,目的是恢復(fù)本地機(jī)對(duì)數(shù)據(jù)的訪問(wèn)和操作。經(jīng)過(guò)如下幾種情況的操作。
1. 在本地重裝MySQL(安裝目錄D:\Program Files\MySQL\MySQL Server 5.0),直接把mysql文件夾拷貝至D:\Program Files\MySQL\MySQL Server 5.0\。結(jié)果,失敗:數(shù)據(jù)庫(kù)連接錯(cuò)誤。
2. 卸載后重裝MySQL,將D:\Program Files\MySQL\MySQL Server 5.0\下的數(shù)據(jù)備份,只把mysql\data文件夾全部?jī)?nèi)容拷貝到D:\Program Files\MySQL\MySQL Server 5.0\data下。結(jié)果,失?。簲?shù)據(jù)庫(kù)連接錯(cuò)誤。將備份的數(shù)據(jù)還完覆蓋。結(jié)果,失敗,還是連接不上數(shù)據(jù)庫(kù)。
3. 卸載后重裝MySQL,將mysql\data文件夾里的cf1,last文件夾(這兩個(gè)是原來(lái)MySQL里的數(shù)據(jù)庫(kù))拷貝進(jìn)D:\Program Files\MySQL\MySQL Server 5.0\data。連接成功,在Navicat for MySQL里看到數(shù)據(jù)庫(kù)cf1和last,但是不能訪問(wèn),因?yàn)閿?shù)據(jù)全為零。明白了原來(lái)data里以數(shù)據(jù)庫(kù)命名的文件存儲(chǔ)的是數(shù)據(jù)庫(kù)的表結(jié)構(gòu),不是元數(shù)據(jù)。下一步,把data文件夾里的ibdata1文件(3.4G大,明顯存儲(chǔ)了元數(shù)據(jù))拷貝到D:\Program Files\MySQL\MySQL Server 5.0\data里,代替原來(lái)的ibdata1文件。重啟電腦,打開(kāi)Navicat for MySQL,連接成功,數(shù)據(jù)可以訪問(wèn)操作。
至此,操作終于成功。其實(shí)當(dāng)初在那臺(tái)機(jī)上把數(shù)據(jù)導(dǎo)出來(lái),而不是現(xiàn)在直接把文件夾mysql復(fù)制過(guò)來(lái)會(huì)更容易恢復(fù)。但那臺(tái)機(jī)已經(jīng)重裝了系統(tǒng),也就是說(shuō)MySQL失效了。
以下情況可以恢復(fù)數(shù)據(jù):
1 innodb引擎表開(kāi)啟了事務(wù),執(zhí)行dml語(yǔ)句,比如delete、update、insert之類,并且沒(méi)有提交即commit操作的話,可以執(zhí)行rollback進(jìn)行回滾恢復(fù)。如果是ddl操作,如drop、create、alter之類的操作時(shí)無(wú)效的
2 在進(jìn)行刪除操作之前有備份,比如mysqldump,物理備份數(shù)據(jù)文件之類的操作,那么可以恢復(fù)到刪除前的數(shù)據(jù)
3 如果你的刪除操作是直接對(duì)data下的文件進(jìn)行刪除,注意,不是粉碎文件操作,那么你可以嘗試用磁盤(pán)恢復(fù)軟件來(lái)找回被誤刪的數(shù)據(jù)文件;
除以上情況,其他真的是沒(méi)法恢復(fù)了,不過(guò)貌似很多公司號(hào)稱能夠恢復(fù),要收費(fèi),具體他們?cè)趺椿謴?fù)我就不曉得了。