亚洲av成人无遮挡网站在线观看,少妇性bbb搡bbb爽爽爽,亚洲av日韩精品久久久久久,兔费看少妇性l交大片免费,无码少妇一区二区三区

  免費(fèi)注冊(cè) 查看新帖 |

Chinaunix

  平臺(tái) 論壇 博客 文庫(kù)
最近訪問(wèn)板塊 發(fā)新帖
查看: 1205 | 回復(fù): 0
打印 上一主題 下一主題

MySQL:Got error 139 from storage engine [復(fù)制鏈接]

論壇徽章:
0
跳轉(zhuǎn)到指定樓層
1 [收藏(0)] [報(bào)告]
發(fā)表于 2011-12-20 09:46 |只看該作者 |倒序?yàn)g覽

做網(wǎng)站總是覺(jué)得很煩人,那邊總是修修改改,每一次都要求改數(shù)據(jù)庫(kù),雖然項(xiàng)目并不復(fù)雜,依然給我造成了許多麻煩,任誰(shuí)拿著一個(gè)東東改了又改也會(huì)煩的。前幾天交用郵件發(fā)出去,卻發(fā)現(xiàn)測(cè)試的的時(shí)候出現(xiàn)了一個(gè)錯(cuò)誤:Got error 139 from storage engine。Google了一下,找到了原因,原來(lái)MySQL每條記錄最長(zhǎng)約是8000字節(jié),而項(xiàng)目中有兩個(gè)數(shù)據(jù)庫(kù)數(shù)據(jù)項(xiàng)長(zhǎng)達(dá)40項(xiàng),并且大約有20個(gè)text類(lèi)型。因?yàn)楫?dāng)時(shí)這些數(shù)據(jù)比較緊密,而且與外部沒(méi)有關(guān)聯(lián),自己對(duì)數(shù)據(jù)庫(kù)本身研究也不是很深,就沒(méi)有分解出來(lái)。而且我做完之后只是拿了幾個(gè)小數(shù)據(jù)隨便測(cè)了一下,沒(méi)發(fā)現(xiàn)這個(gè)bug。以下是這幾天查找資料得到的一些知識(shí),稍微整理下。

上面說(shuō)到MySQL Innodb數(shù)據(jù)引擎默認(rèn)innodb_page_size的大小為2*8196,而每條記錄約為半頁(yè)小一點(diǎn),所以大約為8000。這個(gè)bug在MySQL官網(wǎng)上的報(bào)告地址為:http://bugs.mysql.com/bug.php?id=10035,并且MySQL文檔里有關(guān)于對(duì)InnoDB的限制:

· 一個(gè)表不能包含超過(guò)1000列。 
· 內(nèi)部最大鍵長(zhǎng)度是3500字節(jié),但MySQL自己限制這個(gè)到1024字節(jié)。 
· 除了VARCHAR, BLOB和TEXT列,最大行長(zhǎng)度稍微小于數(shù)據(jù)庫(kù)頁(yè)的一半。即,最大行長(zhǎng)度大約8000字節(jié)。LONGBLOB和LONGTEXT列必須小于4GB, 總的行長(zhǎng)度,頁(yè)包括BLOB和TEXT列,必須小于4GB。InnoDB在行中存儲(chǔ)VARCHAR,BLOB或TEXT列的前768字節(jié),余下的存儲(chǔ)的分散的頁(yè)面中。 
· 雖然InnoDB內(nèi)部地支持行尺寸大于65535,你不能定義一個(gè)包含VARCHAR列的,合并尺寸大于65535的行。 
· 在InnoDB中默認(rèn)數(shù)據(jù)庫(kù)頁(yè)的大小是16KB。通過(guò)編譯代碼,你可以在8KB到64KB之間來(lái)設(shè)置這個(gè)值。你不得不更新在univ.i源文件中的UNIV_PAGE_SIZE和UNIV_PAGE_SIZE_SHIFT的值。

從上面可以看出,雖然text類(lèi)型并不完全算在行中,但是它的前768個(gè)字節(jié)卻在里面,于是一個(gè)數(shù)據(jù)庫(kù)大約只能有10個(gè)text左右。所以我建的那個(gè)“超大型”表肯定是行不通的。于是我在想嘗試重試重新編譯MySQL來(lái)解決這個(gè)問(wèn)題,因?yàn)樯厦嬲f(shuō)了“最大行長(zhǎng)度稍微小于數(shù)據(jù)庫(kù)頁(yè)的一半”,如果我將頁(yè)大小重新設(shè)為64KB,那么問(wèn)題基本上迎刃而解。但是,沒(méi)想到這才是真正的讓人發(fā)狂的開(kāi)始。

關(guān)于MySQL源代碼的下載可以從這個(gè)站點(diǎn)下載到:http://download.softagency.net/MySQL/Downloads/。它里面包括了MySQL從3.23到6.0的所有版本。好了,現(xiàn)在就可以開(kāi)始修改了,找到storage/innobase/incluce/univ.i 文件在里面找到UNIV_PAGE_SIZE,可以看到這個(gè)值現(xiàn)在是16KB(默認(rèn)值),由于我自己是windows系統(tǒng),也裝了vs08,所以我嘗試用vs來(lái)重新編譯。源文件里面有一個(gè)INSTALL-WIN-SOURCE的文件,應(yīng)該就是說(shuō)的編譯方法的,打開(kāi)看看還真是,然后你想照著來(lái)就OK了你就大錯(cuò)特錯(cuò)了!你可能會(huì)遇到無(wú)數(shù)你想也想不到的錯(cuò)誤。

預(yù)備:不管怎么樣,你先把系統(tǒng)裝一個(gè)CMake,再裝一個(gè)Bison,當(dāng)然在windows下安裝就要選windows版本。還要有個(gè)VS05或08,這樣基本要求就可能達(dá)到了。然后你可能會(huì)遇到N個(gè)錯(cuò)誤就是在sql_locale.cc這個(gè)文件顯示是亂碼,你可以先用UltraEdit打開(kāi),然后用UTF-8無(wú)BOM格式存儲(chǔ),這樣在VS中打開(kāi)就會(huì)顯示正常了。

好了,現(xiàn)在基本可以按照INSTALL-WIN-SOURCE來(lái)了,先進(jìn)入到源文件根目錄中:
1.win\configure.js options, 關(guān)于options選項(xiàng)這里就不詳細(xì)說(shuō)了,大家可以從源文件里面看。一般就輸入下面這個(gè)命令就OK了:cscript win\configure.js WITH_INNOBASE_STORAGE_ENGINEWITH_PARTITION_STORAGE_ENGINE MYSQL_SERVER_SUFFIX=-pro,它會(huì)在#mysql#/win/下生成一個(gè)文件:configure.data。
2.運(yùn)行win/build-vs*.bat,根據(jù)你的系統(tǒng)和編譯器選擇相應(yīng)的bat文件運(yùn)行。但我發(fā)現(xiàn)對(duì)于不同版本提供的bat文件并不相同,如果沒(méi)有你要的,沒(méi)關(guān)系,打開(kāi)bat文件瞧一瞧,發(fā)現(xiàn)原來(lái)才一句話:cmake -G "Visual Studio 9 2008",它調(diào)用了CMake完成了操作,把"Visual Studio 8 2005"不是一樣可以用么?事實(shí)證明就是這樣。
3.好了,有了前面兩部的操作,你就可以發(fā)現(xiàn)生成了一個(gè).sln的文件,雙擊它用VS打開(kāi)就可以編譯了。好了,如果在編譯里面遇到了除上面說(shuō)的sql_locale.cc這個(gè)問(wèn)題我也無(wú)能為力了。我也是如神農(nóng)嘗百草一樣,其中印象較為深刻的當(dāng)屬這個(gè)bug:http://lists.mysql.com/commits/106896,但是我根據(jù)方案做了以后問(wèn)題并沒(méi)有解決,但是最后不知道哪里抽瘋了改回來(lái)之后竟然好了(當(dāng)然這是發(fā)生在第二天的事兒了)。
4. 編譯成功可以安裝否?到這一步我是心情“雞凍”得不得了啊。INSTALL-WIN-SOURCE里面說(shuō)了新建幾個(gè)文件夾,把文件拷過(guò)去就行啊Q!然后我竟然發(fā)現(xiàn)目錄結(jié)構(gòu)完全與里面說(shuō)得不是那么回事……文件還得自己一個(gè)一個(gè)找,應(yīng)該是找全了,應(yīng)該試試運(yùn)行一下程序了。先在windows(系統(tǒng))目錄中新建一個(gè)my.ini的文件,里面內(nèi)容如下:

 

現(xiàn)在這個(gè)問(wèn)題還沒(méi)解決,暫時(shí)決定把表拆了重寫(xiě)(萬(wàn)一那邊要裝在linux機(jī)器,我不是還要在linux上編譯一下給他們裝上么,經(jīng)得起這么折騰么)……

[mysql]
#MySQL目錄
basedir=#目錄#
#MySQL數(shù)據(jù)庫(kù)存放目當(dāng)
datadir=#目錄#
在cmd里運(yùn)行:mysql install mysql 提示服務(wù)注冊(cè)成功,哇,難道成功了?啟動(dòng)一下試試:net start mysql 于是發(fā)現(xiàn)一直是1607異常。但我也不能發(fā)現(xiàn)到底是哪個(gè)地方出問(wèn)題了,從Google里找到很多方法都對(duì)我不適應(yīng)。
您需要登錄后才可以回帖 登錄 | 注冊(cè)

本版積分規(guī)則 發(fā)表回復(fù)

  

北京盛拓優(yōu)訊信息技術(shù)有限公司. 版權(quán)所有 京ICP備16024965號(hào)-6 北京市公安局海淀分局網(wǎng)監(jiān)中心備案編號(hào):11010802020122 niuxiaotong@pcpop.com 17352615567
未成年舉報(bào)專(zhuān)區(qū)
中國(guó)互聯(lián)網(wǎng)協(xié)會(huì)會(huì)員  聯(lián)系我們:huangweiwei@itpub.net
感謝所有關(guān)心和支持過(guò)ChinaUnix的朋友們 轉(zhuǎn)載本站內(nèi)容請(qǐng)注明原作者名及出處

清除 Cookies - ChinaUnix - Archiver - WAP - TOP