MySQL中文參考手冊MySQL學習總結(jié)MySQL維護常見問題_第1頁
MySQL中文參考手冊MySQL學習總結(jié)MySQL維護常見問題_第2頁
MySQL中文參考手冊MySQL學習總結(jié)MySQL維護常見問題_第3頁
MySQL中文參考手冊MySQL學習總結(jié)MySQL維護常見問題_第4頁
MySQL中文參考手冊MySQL學習總結(jié)MySQL維護常見問題_第5頁
已閱讀5頁,還剩31頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

MySQL學習總結(jié)(適用版本:MySQL3.23.7alpla)TOC\o"1-3"\h\u322581.維護MySQL安裝 286461.1.使用myisamchk進行表的維護和崩潰恢復 2263391.1.1.myisamchk調(diào)用語法 3118411.1.2.myisamchk內(nèi)存使用 5236091.2.建立一個數(shù)據(jù)庫表維護規(guī)范 5116551.3.獲得關(guān)于一個表的信息 6127131.4.使用myisamchk進行崩潰恢復 13245931.4.1.怎樣檢查表的錯誤 13316521.4.2.怎樣修復表 14284071.4.3.表優(yōu)化 16213861.5.日志文件維護 16307512.問題和常見錯誤 17106582.1.如果MySQL總是崩潰怎么辦 17135092.2.使用MySQL時的一些常見錯誤 18317472.2.1.MySQLserverhasgoneaway錯誤 19218332.2.2.Can'tconnectto[local]MySQLserver錯誤 19168082.2.3.Host'...'isblocked錯誤 21175122.2.4.Toomanyconnections錯誤 2149312.2.5.Outofmemory錯誤 21218362.2.6.Packettoolarge錯誤 22101282.2.7.Thetableisfull錯誤 22151312.2.8.Commandsoutofsyncinclient錯誤 22100242.2.9.Ignoringuser錯誤 23240372.2.10.Table'xxx'doesn'texist錯誤 23154112.3.MySQL怎樣處理一個溢出的磁盤 23382.4.如何從一個文本文件運行SQL命令 2493212.5.MySQL在哪兒存儲臨時文件 243112.6.怎樣保護“/tmp/mysql.sock”不被刪除 25572.7.Accessdenied錯誤 25113602.8.怎樣作為一個一般用戶運行MySQL 25123092.9.怎樣重新設(shè)置一個忘記的口令 26167492.10.文件許可權(quán)限問題 26228322.11.文件沒找到 2728022.12.使用DATE列的問題 27136282.13.時區(qū)問題 28142402.14.在搜索中的大小寫敏感性 29114842.15.NULL值問題 2959812.16.alias問題 30314672.17.從關(guān)聯(lián)的表中刪除行 3086992.18.解決沒有匹配行的問題 31181262.19.與ALTERTABLE有關(guān)的問題 3273592.20.怎樣改變一張表中列的順序 32221103.用MySQL解決一些常見問題 3374533.1.數(shù)據(jù)庫復制 33154163.2.數(shù)據(jù)庫備份 34231223.3.在同一臺機器上運行多個MySQL服務(wù)器 34維護MySQL安裝使用myisamchk進行表的維護和崩潰恢復為了檢查/修復MyISAM表(.MYI和.MYD),你應(yīng)該使用myisamchk實用程序。為了檢查/修復ISAM表(.ISM和.ISD),你應(yīng)該使用isamchk實用程序。見9.4MySQL桌子類型。在下文中,我們將討論myisamchk,但是也適用于老的isamchk。你可以使用myisamchk實用程序來獲得有關(guān)你的數(shù)據(jù)庫桌表的信息、檢查和修復他們或優(yōu)化他們。下列小節(jié)描述如何調(diào)用myisamchk(包括它的選項的描述),如何建立一個表維護的時間表,并且如何使用myisamchk執(zhí)行其各種功能。如果你用--skip-locking運行mysqld(它在一些系統(tǒng)上是缺省的,如Linux),當mysqld正在使用同一個表時,你不能可靠地使用myisamchk檢查一張表。如果你能肯定在你運行myisamchk時沒有人通過mysqld正在存取表,在你開始檢查表之前,你僅需做mysqladminflush-tables。如果你不能保證,那么當你檢查表時,你必須停掉mysqld。如果你在mysqld正在更新表時運行myisamchk,你可能得到一個表已破壞的警告,即使它沒有。如果你沒使用--skip-locking,你能在任何時間使用myisamchk檢查表。當你這樣時,所有試圖更新表的客戶在繼續(xù)前將等到myisamchk就緒。如果你使用myisamchk修復或優(yōu)化表,你必須總是保證mysqld服務(wù)器不在使用表(如果你正在使用--skip-locking,這也適用)。如果你不停掉mysqld,在你運行myisamchk前,你至少應(yīng)該做一個mysqladminflush-tables。在大多數(shù)情況下,你也可使用命令OPTIMIZETABLES優(yōu)化并修復表,但是這不如myisamchk快或可靠(在真正的致命錯誤的情況下)。在另一方面,OPTIMIZETABLE較易使用并且你不必須關(guān)心清空表。見7.9OPTIMIZETABLE句法。myisamchk調(diào)用語法myisamchk這樣調(diào)用:shell>myisamchk[options]tbl_nameoptions指定你想要myisamchk做什么。他們在下面描述。(你也可以通過調(diào)用myisamchk--help得到一張選項表。)沒有選項,myisamchk簡單地檢查你的表。為了得到更多的信息或告訴myisamchk執(zhí)行校正操作,指定在下面和下小節(jié)描述的選項擇。tbl_name是你想要檢查的數(shù)據(jù)庫表。如果你不在數(shù)據(jù)庫目錄的某處運行myisamchk,你必須指定到文件的路徑,因為myisamchk不知道你的數(shù)據(jù)庫位于哪兒。實際上,myisamchk別在乎你正在操作的文件是否位于一個數(shù)據(jù)庫目錄;你可以拷貝對應(yīng)于一張數(shù)據(jù)庫表的文件到別處并且在那里執(zhí)行恢復操作。如果你愿意,你可以myisamchk命令行命名幾個表。你也能指定一個名字作為一個索引文件(用“.MYI”后綴),它允許你通過使用模式“*.MYI”指定在一個目錄所有的表。例如,如果你在一個數(shù)據(jù)庫目錄,你可以這樣在目錄下檢查所有的表:shell>myisamchk*.MYI如果你不在數(shù)據(jù)庫目錄下,你可通過指定到目錄的路徑檢查所有在那里的表:shell>myisamchk/path/to/database_dir/*.MYI你甚至可以通過為MySQL數(shù)據(jù)目錄的路徑指定一個通配符來檢查所有的數(shù)據(jù)庫中的所有表:shell>myisamchk/path/to/datadir/*/*.MYImyisamchk支持下列選項:-a,--analyze分析鍵值的分布。這通過讓聯(lián)結(jié)優(yōu)化器更好地選擇表應(yīng)該以什么次序聯(lián)結(jié)和應(yīng)該使用哪個鍵來改進聯(lián)結(jié)性能。-#,--debug=debug_options輸出調(diào)試記錄文件。debug_options字符串經(jīng)常是'd:t:o,filename'。-d,--description打印出關(guān)于表的一些信息。-e,--extend-check非常徹底地檢查表。這僅在極端情況下是必要的。通常,myisamchk應(yīng)該找出所有錯誤,即使沒有改選項。-f,--force覆蓋老的臨時文件。如果你在檢查表時使用-f(運行myisamchk沒有-r),myisamchk在檢查期間將自動為出現(xiàn)一個錯誤的表用-r重啟。--help顯示一條幫助消息并且退出。-i,--information打印有關(guān)被檢查的表的信息統(tǒng)計。-k#,--keys-used=#與-r一起使用。告訴ISAM表處理器僅更新頭#個索引。較高編號的索引被撤銷。這能用來使插入變得更快!撤銷的索引能通過使用myisamchk-r被重新激活。-l,--no-symlinks在修復時,不跟隨符號連接。通常myisamchk修復一個符號連接所指的表。-q,--quick與-r一起使用使得一個修復更快。通常,原來的數(shù)據(jù)文件沒被接觸;你能指定第二個-q強制使用原來的數(shù)據(jù)文件。-r,--recover恢復模式??梢孕迯蛶缀跛幸磺?,除非唯一的鍵不是唯一。-o,--safe-recover恢復模式。使用一個老的恢復方法;這比-r慢些,但是能處理一-r不能處理的情況。-Ovar=option,--set-variablevar=option設(shè)置一個變量的值??赡艿淖兞苛性谙旅?。-s,--silent沉默模式。當錯誤發(fā)生時,僅寫輸出。你能使用-s兩次(-ss)非常沉默地做myisamchk。-S,--sort-index以從高到低的順序排序索引樹塊。這將優(yōu)化搜尋并且將使按鍵值的表掃描更快。-Rindex_num,--sort-records=index_num根據(jù)一個索引排序記錄。這使你的數(shù)據(jù)更局部化并且可以加快在該鍵上的SELECT和ORDERBY的范圍搜索。(第一次做排序可能很慢!)為了找出一張表的索引編號,使用SHOWINDEX,它以myisamchk看見他們的相同順序顯示一張表的索引。索引從1開始編號。-u,--unpack解開一個用myisampack壓縮的表。-v,--verbose冗長模式。打印更多的信息。這能與-d和-e一起使用。為了更冗長,使用-v多次(-vv,-vvv)!-V,--version打印myisamchk版本并退出。-w,--wait如果表被鎖定,等待。對--set-variable(-O)選項,可能的變量是:key_buffer_size當前值:16776192read_buffer_size當前值:262136write_buffer_size當前值:262136sort_buffer_size當前值:2097144sort_key_blocks當前值:16decode_bits當前值:9myisamchk內(nèi)存使用當你運行myisamchk時,內(nèi)存分配很重要。myisamchk使用不超過你用-O選項指定的內(nèi)存量。如果你想在很大的文件上使用myisamchk,你首先應(yīng)該確定你想要它使用多少內(nèi)存。缺省僅使用大約3M來修復。通過使用更大的值,你能使myisamchk更快地操作。例如,如果你有多于32M內(nèi)存,你能使用例如這些選項(除了任何你可能指定的選項):shell>myisamchk-Osort=16M-Okey=16M-Oread=1M-Owrite=1M...使用-Osort=16M應(yīng)該可能對大多數(shù)情形就足夠了。必須明白,myisamchk使用在TMPDIR里面的臨時文件。如果TMPDIR指向一個內(nèi)存文件系統(tǒng),你可能很容易得到內(nèi)存溢出的錯誤。如果它發(fā)生,設(shè)定TMPDIR指向有更多空間的某個目錄并且重啟myisamchk。建立一個數(shù)據(jù)庫表維護規(guī)范在一個定期基礎(chǔ)而非等到問題出現(xiàn)才實施數(shù)據(jù)庫表的檢查是一個好主意。為維護目的,你能使用myisamchk-s檢查桌子。-s選項使myisamchk以沉默模式運行,當錯誤出現(xiàn)時,僅僅打印消息。在服務(wù)器啟動時檢查表是一個好主意。例如,無論何時機器在更新當中重新啟動了,你通常需要檢查所有可能被影響了的表。(這是一個“期望破壞了的表”)如果重啟后有一個舊的“.pid”(進程ID),你能為safe_mysqld加入一個測試,運行myisamchk檢查所有在過去24小時修改過的表)。(“.pid”文件在mysqld啟動時由它創(chuàng)建,并它正常終止時刪除。在系統(tǒng)啟動時存在一個“.pid”文件表明mysqld異常地終止了。)一個更好的測試將是檢查任何表,它的最后修改時間是比“.pid”文件更新。你也應(yīng)該定期在正常系統(tǒng)操作期間檢查表。在TcX,我們運行一個cron任務(wù),每周一次檢查我們所有重要的表,在一個“crontab”文件中使用這樣的行:350**0/path/to/myisamchk-s/path/to/datadir/*/*.MYI這打印出損壞的表的信息,因此我們能檢驗并且在需要時修復他們。當我們現(xiàn)在幾年(這確實是真的)都沒有任何意外損壞的表時(由于除硬件故障外的其他原因造成損壞的表),每周一次對我們是足夠了。我們建議現(xiàn)在開始,你對所有最后24小時內(nèi)被更新了表每晚都執(zhí)行myisamchk-s,直到你變得象我們那樣信任MySQL。獲得關(guān)于一個表的信息為了獲得關(guān)于一個表的描述或統(tǒng)計,使用顯示在下面的命令。我們以后更詳細地解釋某些信息。myisamchk-dtbl_name以“描述模式”運行myisamchk,生成你的表的描述。如果你用--skip-locking選項啟動MySQL服務(wù)器,myisamchk可以當它運行時報告被一個更新的表的錯誤。然而,既然在描述模式中myisamchk不改變表,沒有破壞數(shù)據(jù)的任何風險。myisamchk-d-vtbl_name為了生成更多關(guān)于myisamchk正在做什么的信息,加上-v告訴它以冗長模式運行。myisamchk-eistbl_name僅顯示一個表最重要的信息。因為必須讀取整個表,它很慢。myisamchk-eivtbl_name這類似-eis,只是告訴你正在做什么。myisamchk-d輸出的例子:MyISAMfile:company.MYIRecordformat:FixedlengthDatarecords:1403698Deletedblocks:0Recordlength:226tabledescription:KeyStartLenIndexType128uniquedouble21510multip.textpackedstripped32198multip.double46310multip.textpackedstripped51672multip.unsignedshort61774multip.unsignedlong71554multip.text81384multip.unsignedlong91774multip.unsignedlong1931textmyisamchk-d-v輸出的例子:MyISAMfile:companyRecordformat:FixedlengthFile-version:1Creationtime:1999-10-3012:12:51Recovertime:1999-10-3119:13:01Status:checkedDatarecords:1403698Deletedblocks:0Datafileparts:1403698Deleteddata:0Datafilepointer(bytes):3Keyfilepointer(bytes):3Maxdatafilelength:3791650815Maxkeyfilelength:4294967294Recordlength:226tabledescription:KeyStartLenIndexTypeRec/keyRootBlocksize128uniquedouble115845376102421510multip.textpackedstripped225062400102432198multip.double7340907776102446310multip.textpackedstripped548097280102451672multip.unsignedshort484055200768102461774multip.unsignedlong134665145856102471554multip.text499575090944102481384multip.unsignedlong8785036032102491774multip.unsignedlong1789648128010241931textmyisamchk-eis輸出的例子:CheckingMyISAMfile:companyKey:1:Keyblocksused:97%Packed:0%Maxlevels:4Key:2:Keyblocksused:98%Packed:50%Maxlevels:4Key:3:Keyblocksused:97%Packed:0%Maxlevels:4Key:4:Keyblocksused:99%Packed:60%Maxlevels:3Key:5:Keyblocksused:99%Packed:0%Maxlevels:3Key:6:Keyblocksused:99%Packed:0%Maxlevels:3Key:7:Keyblocksused:99%Packed:0%Maxlevels:3Key:8:Keyblocksused:99%Packed:0%Maxlevels:3Key:9:Keyblocksused:98%Packed:0%Maxlevels:4Total:Keyblocksused:98%Packed:17%Records:1403698M.recordlength:226Packed:0%Recordspaceused:100%Emptyspace:0%Blocks/Record:1.00Recordblocks:1403698Deleteblocks:0Recorddata:317235748Deleteddata:0Lostspace:0Linkdata:0Usertime1626.51,Systemtime232.36Maximumresidentsetsize0,Integralresidentsetsize0Nonphysicalpagefaults0,Physicalpagefaults627,Swaps0Blocksin0out0,Messagesin0out0,Signals0Voluntarycontextswitches639,Involuntarycontextswitches28966myisamchk-eiv輸出的例子:CheckingMyISAMfile:companyDatarecords:1403698Deletedblocks:0-checkfile-size-checkdelete-chainblock_size1024:index1:index2:index3:index4:index5:index6:index7:index8:index9:Norecordlinks-checkindexreference-checkdatarecordreferencesindex:1Key:1:Keyblocksused:97%Packed:0%Maxlevels:4-checkdatarecordreferencesindex:2Key:2:Keyblocksused:98%Packed:50%Maxlevels:4-checkdatarecordreferencesindex:3Key:3:Keyblocksused:97%Packed:0%Maxlevels:4-checkdatarecordreferencesindex:4Key:4:Keyblocksused:99%Packed:60%Maxlevels:3-checkdatarecordreferencesindex:5Key:5:Keyblocksused:99%Packed:0%Maxlevels:3-checkdatarecordreferencesindex:6Key:6:Keyblocksused:99%Packed:0%Maxlevels:3-checkdatarecordreferencesindex:7Key:7:Keyblocksused:99%Packed:0%Maxlevels:3-checkdatarecordreferencesindex:8Key:8:Keyblocksused:99%Packed:0%Maxlevels:3-checkdatarecordreferencesindex:9Key:9:Keyblocksused:98%Packed:0%Maxlevels:4Total:Keyblocksused:9%Packed:17%-checkrecordsandindexreferences[LOTSOFROWNUMBERSDELETED]Records:1403698M.recordlength:226Packed:0%Recordspaceused:100%Emptyspace:0%Blocks/Record:1.00Recordblocks:1403698Deleteblocks:0Recorddata:317235748Deleteddata:0Lostspace:0Linkdata:0Usertime1639.63,Systemtime251.61Maximumresidentsetsize0,Integralresidentsetsize0Nonphysicalpagefaults0,Physicalpagefaults10580,Swaps0Blocksin4out0,Messagesin0out0,Signals0Voluntarycontextswitches10604,Involuntarycontextswitches122798這是對于用在上述例子中的表的數(shù)據(jù)大小和索引文件的大小:-rw-rw-r--1montytcx317235748Jan1217:30company.MYD-rw-rw-r--1davidatcx96482304Jan1218:35company.MYM對myisamchk產(chǎn)生信息的類型在下面解釋?!発eyfile”是索引文件?!坝涗洝焙汀靶小笔峭x詞。ISAMfileISAM(索引)文件名。Isam-versionISAM格式的版本。當前總是2。Creationtime數(shù)據(jù)文件被創(chuàng)建的時間。Recovertime索引/數(shù)據(jù)文件上次被重建的時間。Datarecords在表中有多少記錄。Deletedblocks有多少刪除的塊仍然保留著空間。你可以優(yōu)化表以使這個空間減到最小。見13.4.3表優(yōu)化。Datafile:Parts對動態(tài)記錄格式,這指出有多少數(shù)據(jù)塊。對于一個沒有碎片的優(yōu)化過的表,這與Datarecords相同。Deleteddata不能回收的刪除數(shù)據(jù)有多少字節(jié)。你可以優(yōu)化表以使這個空間減到最小。見13.4.3表優(yōu)化。Datafilepointer數(shù)據(jù)文件指針的大小,以字節(jié)計。它通常是2、3、4或5個字節(jié)。大多數(shù)表用2個字節(jié)管理,但是目前這還不能從MySQL控制。對固定表,這是一個記錄地址。對動態(tài)表,這是一個字節(jié)地址。Keyfilepointer索引文件指針的大小,以字節(jié)計。它通常是1、2或3個字節(jié)。大多數(shù)表用2個字節(jié)管理,但是它自動由MySQL計算。它總是一個塊地址。Maxdatafilelength表的數(shù)據(jù)文件(.MYD文件)能夠有多長,以字節(jié)計。Maxkeyfilelength表的關(guān)鍵字文件(.MYI文件)能夠有多長,以字節(jié)計。Recordlength每個記錄占多少空間,以字節(jié)計。Recordformat用于存儲表行的格式。上面的例子使用Fixedlength。其他可能的值是Compressed和Packed.tabledescription在表中所有鍵值的一張表。對每個鍵,給出一些底層的信息:Key該鍵的編號。Start該索引部分從記錄的哪里開始。Len該索引部分是多長。對于緊湊的數(shù)字,這應(yīng)該總是列的全長。對字符串,它可以比索引的列的全長短些,因為你能索引字符串列的前綴。Indexunique或multip(multiple)。表明一個值是否能在該索引中存在多次。Type這索引部分有什么數(shù)據(jù)類型。這是一個packed、stripped或empty選項的ISAM數(shù)據(jù)類型。Root根索引塊的地址。Blocksize每個索引塊的大小。缺省是1024,但是值可以在編譯時改變。Rec/key這是由優(yōu)化器使用的統(tǒng)計值。它告訴對該鍵的每個值有多少條記錄。唯一鍵總是有一個1值。在一個表被裝載后(或改變很大),這可以用myisamchk-a更新。如果這根本沒被更新,給定一個30的缺省值。在上面第一個例子中,第個9鍵是有2個部分的多部鍵。Keyblocksused鍵塊使用的百分比是什么。因為在例子中使用的表只能用myisamchk被重新組織,值非常高(很接近理論上的最大值)。PackedMySQL試圖用一個公共后綴壓縮鍵。這只能被用于CHAR/VARCHAR/DECIMAL鍵。對長字符串如姓名,這能顯著地減少使用空間。在上面的第3個例子中,第4個鍵是10個字符長并且在空間上達到60%的縮減。Maxlevels對于該鍵的B樹有多深。有長鍵的大表有較高的值。Records表中有多少行。M.recordlength平均記錄長度。對于有定長記錄的表,這是準確的記錄長度。PackedMySQL從字符串的結(jié)尾去掉空格。Packed值表明這樣做達到的節(jié)約的百分比。Recordspaceused數(shù)據(jù)文件被使用的百分比。Emptyspace數(shù)據(jù)文件未被使用的百分比。Blocks/Record每個記錄的平均塊數(shù)(即,一個碎片記錄由多少個連接組成)。對固定格式表,這總是1。該值應(yīng)該盡可能保持接近1.0。如果它變得太大,你可用myisamchk重新組織表。見13.4.3表優(yōu)化。Recordblocks多少塊(連接)被使用。對固定格式,它與記錄的個數(shù)相同。Deleteblocks多少塊(連接)被刪除。Recorddata在數(shù)據(jù)文件中使用了多少字節(jié)。Deleteddata在數(shù)據(jù)文件中多少字節(jié)被刪除(未使用)。Lostspace如果一個記錄被改為更短的長度,就損失了一些空間。這是所有這樣的損失之和,以字節(jié)計。Linkdata當使用動態(tài)表格式,記錄碎片用指針連接(每個4~7字節(jié))。Linkdata被這樣的指針使用的內(nèi)存量之和。如果一張表已經(jīng)用myisampack壓縮了,myisamchk-d打印每個表列的附加信息。對于它的一個例子及其含義的描述,見12.5MySQL壓縮只讀表生成器。使用myisamchk進行崩潰恢復由MySQL用來存儲數(shù)據(jù)的文件格式以已經(jīng)被廣泛地測試過,但是總是有外部情況可以導致數(shù)據(jù)庫表被破壞:mysqld進程在一個寫入當中被殺死。計算機的意外關(guān)閉(例如,如果計算機掉電)。一個硬件錯誤這章描述如何檢查和處理在MySQL數(shù)據(jù)庫中的數(shù)據(jù)損壞。如果你的表損壞很多,你應(yīng)該嘗試找出其原因!見G.1調(diào)試一個MySQL服務(wù)器。在執(zhí)行崩潰恢復時,理解在一個數(shù)據(jù)庫中的每一個表tbl_name對應(yīng)的在數(shù)據(jù)庫目錄中的3個文件是很重要的:文件用途“tbl_name.frm”表定義(表格)文件“tbl_name.MYD”數(shù)據(jù)文件“tbl_name.MYI”索引文件這3個文件的每一個文件類型可能遭受不同形式的損壞,但是問題最常發(fā)生在數(shù)據(jù)文件和索引文件。myisamchk通過一行一行地創(chuàng)建一個“.MYD”(數(shù)據(jù))文件的副本來工作,它通過由刪除老的“.MYD文件并且重命名新文件到原來的文件名結(jié)束修復階段。如果你使用--quick,myisamchk不創(chuàng)建一個臨時“.MYD”文件,只是假定“.MYD”文件是正確的并且僅創(chuàng)建一個新的索引文件,不接觸“.MYD”文件,這是安全的,因為myisamchk自動檢測“.MYD”文件是否損壞并且在這種情況下,放棄修復。你也可以給myisamchk兩個--quick選項。在這種情況下,myisamchk不會在一些錯誤上(象重復鍵)放棄,相反試圖通過修改“.MYD”文件解決它們。通常,只有在你在太少的空閑磁盤空間上實施一個正常修復,使用兩個--quick選項才有用。在這種情況下,你應(yīng)該至少在運行myisamchk前做一個備份。怎樣檢查表的錯誤為了檢查一張表,使用下列命令:myisamchktbl_name這能找出所有錯誤的99.99%。它不能找出的是僅僅涉及數(shù)據(jù)文件的損壞(這很不常見)。如果你想要檢查一張表,你通常應(yīng)該沒有選項地運行myisamchk或用-s或--silent選項的任何一個。myisamchk-etbl_name它做一個完全徹底的數(shù)據(jù)檢查(-e意思是“擴展檢查”)。它對每一行做每個鍵的讀檢查以證實他們確實指向正確的行。這在一個有很多鍵的大表上可能花很長時間。myisamchk通常將在它發(fā)現(xiàn)第一個錯誤以后停止。如果你想要獲得更多的信息,你能增加--verbose(-v)選項。這使得myisamchk繼續(xù)一直到最多20個錯誤。在一般使用中,一個簡單的myisamchk(沒有除表名以外的參數(shù))就足夠了。myisamchk-e-itbl_name象前面的命令一樣,但是-i選項告訴myisamchk還打印出一些統(tǒng)計信息。怎樣修復表一張損壞的表的癥狀通常是查詢意外中斷并且你能看到例如這些錯誤:“tbl_name.frm”被鎖定不能改變。不能找到文件“tbl_name.MYI”(Errcode:###)。從表處理器的得到錯誤###(此時,錯誤135是一個例外)。意外的文件結(jié)束。記錄文件被毀壞。在這些情況下,你必須修復表。myisamchk通常能檢測并且修復出錯的大部分東西。修復過程包含最多4個階段,在下面描述。在你開始前,你應(yīng)該cd到數(shù)據(jù)庫目錄和檢查表文件的權(quán)限,確保他們可被運行mysqld的Unix用戶讀取(和你,因為你需要存取你正在檢查的文件)。如果它拒絕你修改文件,他們也必須是可被你寫入的。階段1:檢查你的表運行myisamchk*.MYI或(myisamchk-e*.MYI,如果你有更多的時間)。使用-s(沉默)選項禁止不必要的信息。你必須只修復那些myisamchk報告有一個錯誤的表。對這樣的表,繼續(xù)到階段2。如果在檢查時,你得到奇怪的錯誤(例如outofmemory錯誤),或如果myisamchk崩潰,到階段3。舞臺2:簡單安全的修復首先,試試myisamchk-r-qtbl_name(-r-q意味著“快速恢復模式”)。這將試圖不接觸數(shù)據(jù)文件來修復索引文件。如果數(shù)據(jù)文件包含它應(yīng)有的一切和在數(shù)據(jù)文件指向正確地點的刪除連接,這應(yīng)該管用并且表可被修復。開始修理下一張表。否則,使用下列過程:在繼續(xù)前做數(shù)據(jù)文件的一個備份。使用myisamchk-rtbl_name(-r意味著“恢復模式”)。這將從數(shù)據(jù)文件中刪除不正確的記錄和已被刪除的記錄并重建索引文件。如果前面的步驟失敗,使用myisamchk--safe-recovertbl_name。安全恢復模式使用一個老的恢復方法,處理常規(guī)恢復模式不行的少數(shù)情況(但是更慢)。如果在修復時,你得到奇怪的錯誤(例如outofmemory錯誤),或如果myisamchk崩潰,到階段3。舞臺3:困難的修理如果在索引文件的第一個16K塊被破壞,或包含不正確的信息,或如果索引文件丟失,你只應(yīng)該到這個階段。在這種情況下,創(chuàng)建一個新的索引文件是必要的。按如下這樣做:把數(shù)據(jù)文件移更安全的地方。使用表描述文件創(chuàng)建新的(空)數(shù)據(jù)和索引文件:shell>mysqldb_namemysql>DELETEFROMtbl_name;mysql>quit將老的數(shù)據(jù)文件拷貝到新創(chuàng)建的數(shù)據(jù)文件之中。(不要只是將老文件移回新文件之中;你要保留一個副本以防某些東西出錯。)回到階段2。現(xiàn)在myisamchk-r-q應(yīng)該工作了。(這不應(yīng)該是一個無限循環(huán))。階段4:非常困難的修復只有描述文件也破壞了,你才應(yīng)該到達這個階段。這應(yīng)該從未發(fā)生過,因為在表被創(chuàng)建以后,描述文件就不再改變了。從一個備份恢復描述文件并且回到階段3。你也可以恢復索引文件并且回到階段2。對后者,你應(yīng)該用myisamchk-r啟動。如果你沒有一個備份但是確切地知道表是怎樣被創(chuàng)建的,在另一個數(shù)據(jù)庫中創(chuàng)建表的一個拷貝。刪除新的數(shù)據(jù)文件,然后從其他數(shù)據(jù)庫將描述和索引文件移到破壞的數(shù)據(jù)庫中。這給了你新的描述和索引文件,但是讓數(shù)據(jù)文件獨自留下來了。回到階段2并且嘗試重建索引文件。表優(yōu)化為了組合成碎片的記錄并且消除由于刪除或更新記錄而浪費的空間,以恢復模式運行myisamchk:shell>myisamchk-rtbl_name你可以用SQL的OPTIMIZETABLE語句使用的相同方式來優(yōu)化一張表,OPTIMIZETABLE比較容易,但是myisamchk更快。也沒有在一個實用程序和服務(wù)器之間不必要的交互可能性,因為當你使用OPTIMIZETABLE時,服務(wù)器做所有的工作。myisamchk也有你可用來改進一個表的性能的很多其他選項:-S,--sort-index-Rindex_num,--sort-records=index_num-a,--analyze對于選項完整的描述見13.1.1myisamchk調(diào)用語法。日志文件維護當MySQL與日志文件一起使用時,你有時想要刪除/備份舊的日志文件并且告訴MySQL在新文件中開始記錄。見9.2更新日志。在一個Linux(Redhat)的安裝上,你可為此使用mysql-log-rotate腳本。如果你從RPM分發(fā)安裝MySQL,腳本應(yīng)該自動被安裝了。在其他系統(tǒng)上,你必須自己安裝一個短腳本,你可從cron啟動來處理日志文件。你可以通過使用mysqladminflush-logs或SQL命令FLUSHLOGS來強制MySQL開始使用新的日志文件。如果你正在使用MySQL3.21,你必須使用mysqladminrefresh。上面的命令做下列事情:如果使用標準日志(--log),關(guān)閉并重新打開日志文件。(“mysql.log”為缺省)。如果使用更新日志(--log-update),關(guān)閉更新日志并且重新打開有一個更高的順序閉編號的新日志文件。如果你只使用一個更新日志,你只須清空日志文件,然后移走舊的更新日志文件到一個備份中。如果你使用一般的日志,你可以這樣做:shell>cdmysql-data-directoryshell>mvmysql.logmysql.oldshell>mysqladminflush-tables然后做一個備份并刪除“mysql.old”。問題和常見錯誤如果MySQL總是崩潰怎么辦所有MySQL在發(fā)布它們之前,在許多平臺上被測試。這并不意味著在MySQL中沒有任何錯誤,但是如果有錯誤,它們是很少的并且很能難發(fā)現(xiàn)。如果你有一個問題并且如果你嘗試找出究竟是什么摧毀了你的系統(tǒng),它將總是有幫助的,因為你將有一個更好機會使得它被快速修復。首先你應(yīng)該試著找出問題mysqld守護進程是否死掉或你的問題是否與你的客戶有關(guān)。你可以用mysqladminversion檢查你的mysqld服務(wù)器正常執(zhí)行了多長時間,如果mysqld死了,你可以在文件“mysql-data-directory/'hostname'.err”中找到其原因。因為很難知道一些東西為什么崩潰,首先試著檢查為其它人工作的東西是否使你崩潰。請嘗試下列事情:與mysqladminshutdown停止mysqld守護進程,在所有表上運行myisamchk--silent--force*/*.MYI并重啟mysqld守護經(jīng)進程。這將保證你從一個干凈的狀態(tài)運行。見13維護MySQL安裝。使用mysqld--log并且試著從日志信息確定是否是某個特定的查詢殺死了服務(wù)器。全部錯誤的95%與特定的查詢有關(guān)!通常它是在日志文件中就在MySQL重啟之前的最后查詢之一。你也許可以使用下列過程驗證它:停止MySQL守護進程(用mysqladminshutdown)。在MySQL數(shù)據(jù)庫目錄下做文件的一個備份。與myisamchk-s*/*.MYI檢查表以驗證所有表是正確的。如果有任何表被損壞,用myisamchk-rpath-to-table.MYI修復它。從MySQL數(shù)據(jù)目錄刪除(或移走)任何舊的日志文件。用safe_mysql--log啟動服務(wù)器。如果mysqld現(xiàn)在死掉,你可以通過恢復備份并執(zhí)行mysql<mysql-log-file來測試問題是否是一個特定的查詢引起的。當然你可以通過用safe_mysqld--data=path-to-backup-directory啟動另一個MySQL服務(wù)器,在某個其他目錄而不是標準MySQL數(shù)據(jù)庫目錄下做后面的測試。你試用了基準測試嗎?他們應(yīng)該很好地測試MySQL。你也可以增加代碼模擬你的應(yīng)用程序!基準程序可在源代碼分發(fā)的“bench”目錄下找到,或?qū)ΧM制分發(fā),在你的MySQL安裝目錄下“sql-bench”目錄。試一下fork_test.pl和fork2_test.pl。對任何錯誤檢查文件“mysql-data-directory/'hostname'.err”。如果你配置MySQL以便調(diào)試,如果出錯,收集可能的錯誤信息將更容易。使用--with-debug選項的configure重新配置MySQL然后重新編譯。見G.1調(diào)試一個MySQL服務(wù)器。為調(diào)試而配置MySQL使它包含一個安全的內(nèi)存分配器以便能發(fā)現(xiàn)一些錯誤。它也提供關(guān)于正在發(fā)生什么的大量輸出。你為你的操作系統(tǒng)使用了最新的補丁嗎?使用mysql的--skip-locking選項.在一些系統(tǒng)上,lockd鎖管理器不能正確工作;--skip-locking選項告訴mysqld不使用外部鎖。(這意味著你不能在同一個數(shù)據(jù)上運行兩個mysqld服務(wù)器而且如果你使用myisamchk,你一定要小心,但是它對為了測試試用選項可能有益。)當mysqld好象正在運行但沒有反應(yīng)時,你嘗試過mysqladmin-urootprocesslist嗎?有時mysqld不是毫無反應(yīng),盡管你可能這樣認為。問題可能是所有在用的連接,或可能用內(nèi)部鎖定問題。mysqladminprocesslist甚至在這些情況下將通??梢赃M行一個連接,并且能提供有關(guān)當前連接數(shù)量及其狀態(tài)的有用信息。在你運行其他查詢時,在一個單獨窗口中運行命令mysqladmin-i5status,產(chǎn)生統(tǒng)計。嘗試下列步驟:通過gdb(或其他調(diào)試器)啟動mysqld。運行你的測試腳本。當mysqld核心傾倒(coredump),做back(或你調(diào)試器中的回溯-backtrace命令)。嘗試用一個Perl腳本模擬你的應(yīng)用程序以強制MySQL崩潰或表現(xiàn)不正確。或發(fā)一份正式的錯誤報告。見2.3如何報告錯誤或問題,但是要不平常更詳細。因為MySQL為很多人的工作,導致崩潰的東西可能只存在于你的計算機上(例如,與你的特定系統(tǒng)庫有關(guān)的一個錯誤)。如果你的問題有具有動態(tài)長度行的表有關(guān),并且你不使用BLOB/TEXT列(但是僅VARCHAR列),你可以用ALTERTABLE試著將全部VARCHAR改為CHAR,這將強制MySQL使用固定尺寸的行。固定尺寸的行占據(jù)很小的額外空間,但是更能容忍崩潰!當前動態(tài)行的代碼在TCX至少使用3年的時間,沒有任何問題,但是從本質(zhì)上講,動態(tài)長度的行對錯誤更敏感,因此如果上述對你有幫助,嘗試一下可能是一個好主意!使用MySQL時的一些常見錯誤MySQLserverhasgoneaway錯誤本小節(jié)也涉及有關(guān)Lostconnectiontoserverduringquery的錯誤。對MySQLserverhasgoneaway錯誤最常見的原因是服務(wù)器超時了并且關(guān)閉了連接。缺省地,如果沒有事情發(fā)生,服務(wù)器在8個小時后關(guān)閉連接。你可在啟動mysqld時通過設(shè)置wait_timeout變量改變時間限制。你可以通過執(zhí)行mysqladminversion并且檢驗正常運行的時間來檢查MySQL還沒死掉。如果你有一個腳本,你只須再發(fā)出查詢讓客護進行一次自動的重新連接。在這種請下,你通常能獲得下列錯誤代碼(你得到的是OS相關(guān)的):CR_SERVER_GONE_ERROR客戶不能發(fā)送一個問題給服務(wù)器。CR_SERVER_LOST當寫服務(wù)器時,客戶沒有出錯,但是它沒有得到對問題的一個完整的答案(或任何答案)。如果你向服務(wù)器發(fā)送不正確的或太大的查詢,你也可能得到這些錯誤。如果mysqld得到一個太大或不正常的包,它認為客戶出錯了并關(guān)閉連接。如果你需要較大的查詢(例如,如果你正在處理較大的BLOB列),你可以使用-Omax_allowed_packet=#選項(缺省1M)啟動mysqld以增加查詢限制。多余的內(nèi)存按需分配,這樣mysqld只有在你發(fā)出較大差詢時或mysqld必須返回較大的結(jié)果行時,才使用更多的內(nèi)存!Can'tconnectto[local]MySQLserver錯誤一個MySQL客戶可以兩種不同的方式連接mysqld服務(wù)器:Unix套接字,它通過在文件系統(tǒng)中的一個文件(缺省“/tmp/mysqld.sock”)進行連接;或TCP/IP,它通過一個端口號連接。Unix套接字比TCP/IP更快,但是只有用在連接同一臺計算機上的服務(wù)器。如果你不指定主機名或如果你指定特殊的主機名localhost,使用Unix套接字。錯誤(2002)Can'tconnectto...通常意味著沒有一個MySQL服務(wù)器運行在系統(tǒng)上或當試圖連接mysqld服務(wù)器時,你正在使用一個錯誤的套接字文件或TCP/IP端口。由檢查(使用ps)在你的服務(wù)器上有一個名為mysqld的進程啟動!如果沒有任何mysqld過程,你應(yīng)該啟動一個。見4.15.2啟動MySQL服務(wù)器的問題。如果一個mysqld過程正在運行,你可以通過嘗試這些不同的連接來檢查服務(wù)器(當然,端口號和套接字路徑名可能在你的安裝中是不同的):shell>mysqladminversionshell>mysqladminvariablesshell>mysqladmin-h`hostname`versionvariablesshell>mysqladmin-h`hostname`--port=3306versionshell>mysqladmin-h'ipforyourhost'versionshell>mysqladmin--socket=/tmp/mysql.sockversion注意hostname命令使用反引號“`”而非正引號“'”;這些導致hostname輸出(即,當前主機名)被代替進mysqladmin命令中。這是可能造成Can'tconnecttolocalMySQLserver錯誤的一些原因:mysqld不在運行。你正在使用MIT-pthreads的一個系統(tǒng)上運行。如果正在運行在一個沒有原生線程的系統(tǒng)上,mysqld使用MIT-pthreads軟件包。見4.2由MySQL支持的操作系統(tǒng)。然而,MIT-pthreads不支持Unix套接字,因此當與服務(wù)器連接時,在這樣一個系統(tǒng)上,你總是必須明確地指定主機名。試試使用這個命令檢查到服務(wù)器的連接:shell>mysqladmin-h`hostname`version某人刪除了mysqld使用的Unix套接字(缺省“/tmp/mysqld.sock”)。你可能有一個cron任務(wù)刪除了MySQL套接字(例如,一個把舊文件從“/tmp”目錄中刪除的任務(wù))。你總是可以運行mysqladminversion并且檢查mysqladmin正在試圖使用的套接字確實存在。在這種情況下,修復方法是刪除cron任務(wù)而不刪除“mysqld.sock或?qū)⑻捉幼址旁谄渌胤健D隳苡眠@個命令在MySQL配置時指定一個不同的套接字地點:shell>./configure--with-unix-socket-path=/path/to/socket你也可以使用--socket=/path/to/socket選項啟動safe_mysqld和在啟動你的MySQL客戶前設(shè)置環(huán)境變量MYSQL_UNIX_PORT為套接字路徑名。你可用--socket=/path/to/socket選項啟動mysqld服務(wù)器。如果你改變了服務(wù)器的套接字路徑名,你也必須通知MySQL客戶關(guān)于新路徑的情況。你可以通過設(shè)置環(huán)境變量MYSQL_UNIX_PORT為套接字路徑名或由提供套接字路徑名作為客戶的參數(shù)做到。你可用這個命令測試套接字:shell>mysqladmin--socket=/path/to/socketversion你正在使用Linux和線程已經(jīng)死了(核心傾倒了)。在這種情況中,你必須殺死其它mysqld線程(例如在啟動一個新的MySQL服務(wù)器之前,可以用mysql_zap腳本)。見18.1如果MySQL總是崩潰怎么辦。如果你得到錯誤Can'tconnecttoMySQLserveronsome_hostname,你可以嘗試下列步驟找出問題是什么:通過執(zhí)行telnetyour-host-nametcp-ip-port-number并且按幾次回車來檢查服務(wù)器是否正常運行。如果有一個MySQL運行在這個端口上,你應(yīng)該得到一個包含正在運行的MySQL服務(wù)器的版本號的應(yīng)答。如果你得到類似于telnet:Unabletoconnecttoremotehost:Connectionrefused的一個錯誤,那么沒有服務(wù)器在使用的端口上運行。嘗試連接本地機器上的mysqld守護進程,并用mysqladminvariables檢查mysqld被配置使用的TCP/IP端口(變量port)。檢查你的mysqld服務(wù)器沒有用--skip-networking選項啟動。Host'...'isblocked錯誤如果你得到象這樣的一個錯誤:Host'hostname'isblockedbecauseofmanyconnectionerrors.Unblockwith'mysqladminflush-hosts'這意味著,mysqld已經(jīng)得到了大量(max_connect_errors)的主機'hostname'的在中途被中斷了的連接請求。在max_connect_errors次失敗請求后,mysqld認定出錯了(象來字一個黑客的攻擊),并且阻止該站點進一步的連接,直到某人執(zhí)行命令mysqladminflush-hosts。缺省地,mysqld在10個連接錯誤后阻塞一臺主機。你可以通過象這樣啟動服務(wù)器很容易地調(diào)整它:shell>safe_mysqld-Omax_connect_errors=10000&注意,對給定的主機,如果得到這條錯誤消息,你應(yīng)該首先檢查該主機的TCP/IP連接有沒有問題。如果你的TCP/IP連接不在運行,增加max_connect_errors變量的值對你也不會有幫助!Toomanyconnections錯誤如果在你試土連接MySQL時,你得到錯誤Toomanyconnections,這意味著已經(jīng)有max_connections個客戶連接了mysqld服務(wù)器。如果你需要比缺省(100)更多的連接,那么你應(yīng)該重啟mysqld,用更大的max_connections變量值。注意,mysqld實際上允許(max_connections+1)個客戶連接。最后一個連接是為一個用Process權(quán)限的用戶保留的。通過不把這個權(quán)限給一般用戶(他們不應(yīng)該需要它),有這個權(quán)限一個管理員可以登錄并且使用SHOWPROCESSLIST找出什么可能出錯。見7.21SHOW句法(得到表,列的信息)。Outofmemory錯誤如果你發(fā)出查詢并且得到類似于下面的錯誤:mysql:Outofmemoryatline42,'malloc.c'mysql:needed8136byte(8k),memoryinuse:12481367bytes(12189k)ERROR2008:MySQLclientranoutofmemory注意,錯誤指向了MySQL客戶mysql。這個錯誤的原因很簡單,客戶沒有足夠的內(nèi)存存儲全部結(jié)果。為了修正這個問題,首先檢查你的查詢是否正確。它應(yīng)該返回這么多的行,這合理嗎?如果是這樣,你可以使用mysql--quick,它使用mysql_use_result()檢索結(jié)果集合。這將較少的負擔放在了客戶端(只是服務(wù)器更多)。Packettoolarge錯誤當一個MySQL客戶或mysqld服務(wù)器得到一個比max_allowed_packet個字節(jié)長的包,它發(fā)出一個Packettoolarge錯誤并終止連接。如果你正在使用mysql客戶,你可以通過用mysql--set-variable=max_allowed_packet=8M指定一個更大的緩沖區(qū)來啟動客戶程序。如果你正在使用不允許你指定最大包大小的其他客戶(例如DBI),你需要在你啟動服務(wù)器時設(shè)置包大小。你可以使用mysqld的命令行選項設(shè)置max_allowed_packet為一個更大的尺寸。例如,如果你正期望將一個全長的BLOB存入一張表中,你將需要用--set-variable=max_allowed_packet=24M選項來啟動服務(wù)器。Thetableisfull錯誤這個錯誤發(fā)生在內(nèi)存臨時表變得比tmp_table_size字節(jié)大時。為了避免這個問題,你可以使用mysqld的-Otmp_table_size=#選項來增加臨時表的大小,或在你發(fā)出有疑問的查詢之前使用SQL選項SQL_BIG_TABLES。見7.25SETOPTION句法。你也可以使用--big-tables選項啟動mysqld。這與為所有查詢使用SQL_BIG_TABLES完全相同。Commandsoutofsyncinclient錯誤如果你在你的客戶代碼中得到Commandsoutofsync;Youcan'trunthiscommandnow,你正在以錯誤的次序調(diào)用客戶函數(shù)!這可能發(fā)生,例如,如果你正在使用mysql_use_result()并且在你已經(jīng)調(diào)用了mysql_free_result()之前試圖執(zhí)行新查詢。如果你在mysql_use_result()或mysql_store_result()之間試圖執(zhí)行返回數(shù)據(jù)的2個查詢,它也可能發(fā)生。Ignoringuser錯誤如果你得到下列錯誤:Foundwrongpasswordforuser:'some_user@some_host';Ignoringuser這意味著在mysqld啟動時或在它再次裝載權(quán)限表時,它在user表中找到了一個有一個無效口令的條目。結(jié)果,條目簡單地被權(quán)限系統(tǒng)忽略。可能導致這個問題的原因和修正:你可能正在運行一個有一個老的user表的新版本mysqld。你可以通過執(zhí)行mysqlshowmysqluser看看口令字段是否少于16個字符來檢查它。如果是這樣,你可以通過運行scripts/add_long_password腳本改正這種情況。用戶有一個老式的口令(8個字符長)并且你沒使用--old-protocol選項啟動mysqld。用一個新口令更新在user表中的用戶或用--old-protocol重啟mysqld。你沒有使用PASSWORD()函數(shù)在在user表中指定了一個口令。使用mysql以一個新口令更新在user表中的用戶。確保使用PASSWORD()函數(shù):mysql>updateusersetpassword=PASSWORD('yourpassword')whereuser='XXX';Table'xxx'doesn'texist錯誤如果你得到錯誤Table'xxx'doesn'texist或Can'tfindfile:'xxx'(errno:2),這意味著在當前數(shù)據(jù)庫中沒有名為xxx的表存在。注意,因為MySQL使用目錄和文件存儲數(shù)據(jù)庫和表,數(shù)據(jù)庫和表名件是區(qū)分大小寫的?。ㄔ赪in32上,數(shù)據(jù)庫和表名不是區(qū)分大小寫的,但是在查詢中對所有表的引用必須使用相同的大小寫!)你可以用SHOWTABLES檢查你在當前數(shù)據(jù)庫中有哪個表。見7.21SHOW句法(得到表、列的信息)。MySQL怎樣處理一個溢出的磁盤當出現(xiàn)一個磁盤溢出的情況時,MySQL做下列事情:它每分鐘檢查一次看是否有足夠空間寫入當前行。如果有足夠的空間,它繼續(xù)好像發(fā)生什么事情。每6分鐘它將有關(guān)磁盤溢出的警告寫入日志文件。為了緩和這個問題,你可以采取下列行動:繼續(xù),你只需釋放足夠的空閑磁盤空間以便插入所有記錄。放棄線程,你必須發(fā)一個mysqladminkill到線程。在下一次檢查磁盤時,線程將被放棄(在1分鐘內(nèi))。注意,其他線程可能正在等待引起“磁盤溢出”條件的表。如果你有幾個“鎖定的”的線程,殺死正在等待磁盤溢出條件的那個線程將允許其他線程繼續(xù)。如何從一個文本文件運行SQL命令一般地,mysql客戶被交互性地使用,象這樣:shell>mysqldatabase然而,也可以把你的SQL命令放在一個文件中并且告訴mysql從該文件讀取其輸入。要想這樣做,創(chuàng)造一個文本文件“text_file”,它包含你想要執(zhí)行的命令。然后如下那樣調(diào)用mysql:shell>mysqldatabase<text_file你也能啟動有一個USEdb_name語句的文本文件。在這種情況下,在命令行上指定數(shù)據(jù)庫名是不必要的:shell>mysql<text_file見12.1不同的MySQL程序概述。MySQL在哪兒存儲臨時文件MySQL使用TMPDIR環(huán)境變量的值作為存儲臨時文件的目錄的路徑名。如果你沒有設(shè)置TMPDIR,MySQL使用系統(tǒng)缺省值,它通常是“/tmp”或“/usr/tmp”。如果包含你的臨時文件目錄的文件系統(tǒng)太小,你應(yīng)該編輯safe_mysqld設(shè)定TMPDIR指向你有足夠空間的一個文件系統(tǒng)!你也可以使用mysqld的--tmpdir選項目設(shè)置臨時目錄。MySQL以“隱含文件”創(chuàng)建所有臨時文件。這保證了如果mysqld被終止,臨時文件也將被刪除。使用隱含文件的缺點是你將看不到一個大的臨時文件填滿了臨時文件目錄所在的文件系統(tǒng)。當排序(ORDERBY或GROUPBY)時,MySQL通常使用一個或兩個臨時文件。最大磁盤空間需求是:(存儲東西的長度+sizeof(數(shù)據(jù)庫指針))*匹配的行數(shù)*2sizeof(數(shù)據(jù)庫指針)通常是4,但是在未來對確實很大的表可能增加。對一些SELECT查詢,MySQL也創(chuàng)建臨時SQL表。這些沒被隱含且有“SQL_*”格式的名字。ALTERTABLE和OPTIMIZETABLE在原數(shù)據(jù)庫表的同一個目錄中創(chuàng)建一張臨時表。怎樣保護“/tmp/mysql.sock”不被刪除如果你有這個問題,事實上任何人可以刪除MySQL通訊套接字“/tmp/mysql.sock”,在Unix的大多數(shù)版本上,你能通過為其設(shè)置sticky(t)位來保護你的“/tmp”文件系統(tǒng)。作為root登錄并且做下列事情:shell>chmod+t/tmp這將保護你的“/tmp”文件系統(tǒng)使得文件僅能由他們的所有者或超級用戶(root)刪除。你能執(zhí)行l(wèi)s-ld/tmp檢查sticky位是否被設(shè)置,如果最后一位許可位是t,該位被設(shè)置了。Accessdenied錯誤見6.6權(quán)限系統(tǒng)如何工作。并且特別要看6.13引起Accessdenied錯誤的原因。怎樣作為一個一般用戶運行MySQLMySQL服務(wù)器mysqld能被任何用戶啟動并運行。為了將my

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論