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

  免費注冊 查看新帖 |

Chinaunix

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

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

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

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

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

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

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

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

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

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

 

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

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

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

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP