?? manual_questions.html
字號:
<h2><a NAME="Bug_reports" HREF="manual_toc.html#Bug_reports">2.3 怎樣報告錯誤或問題</a></h2>
<p>寫一份好的錯誤報告需要耐心,但是第一次就做得正確可節省你我的時間。本節將幫助你正確撰寫你的報告,以使你不浪費時間,也可能做一些根本不能幫助我們的事情。</p>
<p>如果可能的話,我們鼓勵每個人使用<code> mysqlbug </code>腳本產生一份錯誤報告(或關于任何問題的一份報告)。<code>mysqlbug</code>可在源代碼分發或二進制分發的<strong> MySQL</strong>安裝目錄<tt>下的'bin'</tt>目錄中的<tt>'scripts'</tt>
目錄下找到。如果你不能使用<code>mysqlbug,</code>你仍然應該包括在本節列出的所有必要的信息。</p>
<p><code>mysqlbug </code>腳本通過自動確定下列很多信息來幫助你生成一份報告,但是如果一些重要的東西不見了,請在你的消息中包含它!請仔細閱讀本節并且保證這里描述的所有信息包含在你的報告中。</p>
<p>要記住,有可能回復一條包含太多的信息消息,但不回復包含極少信息的消息,因為人們認為他們知道一個問題的原因并且假設某些細節無所謂,所以他們常常忽略事實。一個好的原則是:如果你懷疑所說的事情,繼續說!在你的報告中寫上幾行,比因為第一次沒有包含足夠的信息而被迫追問和等待答案要快上千倍,而且少些麻煩。</p>
<p>最常見的錯誤是人們不指出他們正在使用的<strong>MySQL</strong>分發的版本號,或不指出在什么平臺上平臺安裝了<strong> MySQL </strong>(包括平臺版本號)。這是極其相關的信息,并且沒有它99%錯誤報告是無用的!我們經常得到這樣的提問“為什么它不給我工作?”,然后我們發現所需的功能還沒有在該版本的<strong> MySQL </strong>中實現,或在一份報告中描述的一個錯誤已經在更新的<strong>MySQL </strong>版本修正了。有時錯誤是依賴于平臺,在這種情況下,不知道平臺操作系統和版本號根本不可能修正任何東西。</p>
<p>還要記住,要提供你的編譯器信息,如果它與問題有關。人們經常發現錯在編譯器而認為<strong>MySQL</strong>的問題。大多數編譯器始終都在開發中并且隨版本也逐漸變得更好。為了確定決定你的問題是否依賴于你的編譯器,我們需要知道使用什么編譯器。注意每個編譯器得問題應該被認為是一個錯誤,因此要報告。</p>
<p>在錯誤報告中包含一個問題的完好描述是最有幫助的。即,你所做的導致這個問題的一個好的例子和確切描述的問題本身。最好的報告是包括顯示如何再次產生錯誤或問題的一個完整例子。</p>
<p>如果一個程序產生一條錯誤信息,非常重要的是在你的錯誤報告中要包含它!如果我們試著從使用程序的檔案中找一些東西,最好是報告的錯誤消息精確地匹配程序所產生的。(甚至注意大小寫!)你決不應該試圖記住錯誤消息是什么,相反,將全部消息拷貝并且粘貼進你的報告中!</p>
<p>如果你有一個MyODBC問題,你應該嘗試產生一個 MyODBC 跟蹤文件,詳見<a
HREF="manual_ODBC.html#MyODBC_bug_report">16.6 報告 MyODBC的問題</a>. </p>
<p>請記住,將要閱讀你報告的人有很多使用80列顯示。在產生報告或使用<code>mysql</code>命令行工具的例子時,你應該為那些可能超出顯示可用寬度的輸出(例如,<code>EXPLAIN
SELECT</code>語句,見下面的例子)使用<code>--vertical</code>選項(或<code>\G</code>語句終止符)。</p>
<p>請在你的報告中包括下列信息:
<ul>
<li>你正在使用的<strong> MySQL </strong>分發的版本號(例如,<strong> MySQL </strong> 3.22.22 )。你可以執行<code>mysqladmin
version</code>找到你正在運行哪個版本。<code>mysqladmin</code>可以在你的<strong>MySQL</strong>安裝目錄<tt>的'bin'</tt>目錄下面找到。</li>
<li>你正在使用的機器的制造商和型號。</li>
<li>操作系統名字和版本。對大多數操作系統,你可以通過執行一條Unix命令<code>uname -a</code>
得到有關信息。 </li>
<li>有時存儲器的數量(物理和虛擬的)是有意義的,如果有疑問,包含這些值。</li>
<li>如果你正在使用一個<strong>MySQL</strong>源代碼分發<strong> </strong>,則需要使用的編譯器的名稱和版本號。如果你有一個二進制代碼的分發,就需要該分發的名字。</li>
<li>如果問題在編譯期間發生,則包含準確的錯誤消息,并且也包含問題發生的文件中出錯代碼周圍的一些上下文。</li>
<li>如果任何數據庫表與問題有關,包含從<code> mysqldump --db_name tbl_name1 tbl_name2 …</code>的輸出結果。這是很容易做到的,并且它是一個獲得有關任何數據庫表信息的有效方法,將幫助我們創造一個匹配你所遇到問題的環境。</li>
<li>對于與速度或<code>SELECT</code>語句有關的問題,你總是應該包括<code>EXPLAIN
SELECT...</code>的輸出和至少<code>SELECT</code>語句產生的行數。你給出有關你的情況越多的信息,某些人越能幫助你。例如,下列的例子是一份很好的錯誤報告(當然它應該用與<code> mysqlbug </code>腳本郵寄):運行<code> mysql </code>命令行工具的例子(注意對其輸出超過80列顯示設備的語句使用<code>\G</code>終止符):<pre>mysql> SHOW VARIABLES;
mysql> SHOW COLUMNS FROM ...\G
<output-from-SHOW-COLUMNS>
mysql> EXPLAIN SELECT ...\G
<output-from-EXPLAIN>
mysql> FLUSH STATUS;
mysql> SELECT ...;
<A short version of the output from SELECT,
including the time taken to run the query>
mysql> SHOW STATUS;
<output from SHOW STATUS>
</pre>
</li>
</ul>
<ul>
<li>如果在運行<strong> MySQL </strong>時是發生問題,嘗試一下提供一個重現問題的輸入腳本,該腳本應該包括任何必要的源文件,重現你情況的腳本越準確越好。如果你不能提供腳本,你至少應該在你的郵件中包括從<code> mysqladmin variables
extended-status processlist</code>的輸出以提供你的系統怎樣運行!</li>
<li>如果你認為<strong> MySQL </strong>產生一個奇怪的查詢結果,不僅要包含結果,而且也要包含應該是什么結果的意見和描述你意見所依據的理由。</li>
<li>當給出問題的一個例子時,最好使用在你的真實情況下的而不是一個新的變量名、表名等等。這個問題應該與一個變量的名、表等有關!也許這些條件是苛刻的,但是安全比擔心更好。不管怎么說,提供使用你實際情況的例子應該比較容易,并且各方面來講它對我們更好一些。如果你有不想把數據顯示別人看,你可使用<code>ftp</code>把它上傳到<a
HREF="http://ftp@www.mysql.com/pub/mysql/secret/default.htm">ftp://www.mysql.com/pub/mysql/secret/</a>。如果數據確實是高度機密的,甚至不想讓我們看到它們,那么繼續,并提供使用其它名字的例子,但是請注意這是最后選擇。</li>
<li>如果可能,包括相關程序的所有選項,例如,指明你啟動<code> mysqld </code>守護程序和運行任何<strong> MySQL </strong>客戶程序所使用的選項,對象<code>mysqld</code>
和 <code>mysql</code>等程序和<code>configure</code>
的選項常常是答案的關鍵和至關重要的!包括他們絕對不是一個壞主意!如果你使用任何模塊,例如Perl或PHP,請也包括它們的版本號。</li>
<li>如果你不能產生一個行數少的測試,或如果測試表太大,不能寄給郵件列表(超過10行),你應該使用<code>mysqldump</code>倒出(dump)數據庫表并且創建<tt>“README”</tt>文件描述你的問題,用<code>tar</code>和<code>gzip</code>造創建你的文件的一個壓縮的檔案,并且使用<code>ftp</code>把檔案文件轉移到<a
HREF="http://ftp@www.mysql.com/pub/mysql/secret/default.htm">ftp://www.mysql.com/pub/mysql/secret/</a>,然后把問題的簡短描述發到<a
HREF="mailto:mysql@lists.mysql.com">mysql@lists.mysql.com </a>。 </li>
<li>如果你的問題與權限系統有關。請包括<code>mysqlaccess </code>、<code>mysqladmin reload</code>的輸出和所有嘗試連接時得到的錯誤消息!當你測試你的權限時,你應該首先運行<code>mysqlaccess</code>。在這以后,執行<code> mysqladmin reload
version</code>,最后你應該嘗試用你有問題的程序進行連接。<code> mysqlaccess </code>可在你的<strong> MySQL </strong>安裝目錄下的<tt>“bin”</tt>目錄找到。</li>
<li>如果你有一個對錯誤的補丁程序,那最好,但是千萬別假設補丁程序是我們需要的一切,或即使你不提供一些必要信息如補丁能修正的錯誤的前提條件,就可使用它。我們可能發現你的補丁程序問題,或者我們可能根本不理解它。如果是這樣,我們不能使用它。在這里測試條件將幫助我們,這意味著補丁程序將處理一切可能出現的情況。如果我們發現了補丁不能工作的邊界條件(即使很怪),它可能毫無用處。</li>
<li>對錯誤是什么、為什么發生或它依賴什么的猜測通常是錯誤的。我們甚至不能在沒有首先使用一個調試器以確定一個錯誤的真正原因時做這種猜測。</li>
<li>在你的郵件消息說明你已經檢查了參考手冊和郵件歸檔,以便讓其他人知道你自己嘗試解決你的問題。</li>
<li>如果你得到一<code>個parse error</code>,請仔細檢查你的語法!如果你不能它發現有什么不對,極有可能是你當前<strong> MySQL </strong>版本不支持你正在使用的查詢。如果你正在使用最新版而且<a
HREF="http://www.mysql.com/doc.html"> http://www.mysql.com/doc.html </a>的參考手冊沒有涉及你正在使用的語法,<strong> MySQL </strong>就不支持你的查詢。在這種情況下,你唯一的選擇是自己實現語法并郵寄過來。如果手冊涉及你正在使用的語法,但是你有一個更舊版本的<strong> MySQL </strong>,你應該檢查<strong> MySQL </strong>的更新歷史來找出語法何時被實現。見<a
HREF="manual_News.html#News">D MySQL 變遷歷史</a>。這時你有升級到一個更新<strong> MySQL</strong>版本的選擇。</li>
<li>如果你有一個這樣的問題:當你存取某些特定數據庫表時,你的數據好像已破壞或出錯,你應該首先用<code>myisamchk</code>檢查然后嘗試修復你的數據庫表<code>。</code>見<a
HREF="manual_Maintenance.html#Maintenance"> 13 維護 MySQL 安裝</a>.
</li>
<li>你經常得到破壞了的數據庫表,你應該嘗試發現這何時和為何發生!此時<tt>“mysql-data-directory/'hostname'.err”</tt>文件可能包含所發生事情的一些信息。請在你的錯誤報告包含這個文件的任何有用信息!如果沒有在更新當中殺死了<code>mysqld</code>,通常應該<strong>絕對不</strong>破壞數據庫表!如果你能找出<code>mysqld為什么</code>死掉的原因,對于我們,更容易向你提供對問題的修正!</li>
<li>如果可能,下載最新版本的<strong> MySQL </strong>,并且檢查它是否解決你的問題。<strong>MySQL</strong>的所有版本都被徹底地測試并且應該毫無問題地運行!我們相信使一切盡可能向后兼容,并且你應該能在數分鐘內切換<strong> MySQL </strong>版本!見<a
HREF="manual_Installing.html#Which_version"> 4.3 要使用 MySQL 哪個版本</a>。
</li>
</ul>
<p>如果你是一個支持客戶,請直接郵寄錯誤報告到適當的郵件列表,看看是否有其他人有這個問題的經驗(或許已經解決)。</p>
<p>對于報導<strong>MyODBC</strong>錯誤的信息,見<a
HREF="manual_ODBC.html#ODBC_Problems"> 16.2 怎樣報告 MyODBC 問題</a>。
</p>
<p>一些常見問題的答案,見<a HREF="manual_Problems.html#Problems"> 18
問題和常見的錯誤</a>。</p>
<p>當答案個別發給你而不是郵件列表時,總結答案并且將總結發到郵件列表以便其它人可以從你收到的幫助你解決問題的答案中受益,這被認為是一個很好的規矩。</p>
<p><a NAME="IDX13"></a></p>
<h2><a NAME="Answering_questions" HREF="manual_toc.html#Answering_questions">2.4 在郵件列表上回答問題的指南</a></h2>
<p>如果你認為你的答案引起廣泛的興趣,你可能想要把它寄到郵件列表中而不是直接答復提問的人。試著讓你的答案足夠普遍,讓不是郵寄者的其他人可從它獲益。當你郵寄到郵件列表時,請保證你的回答不和以前的答案重復。</p>
<p>請不要從有 HTML 模式的瀏覽器投寄郵件消息!許多用戶不用瀏覽器讀郵件!<a
NAME="IDX14"></a><a NAME="IDX15"></a></p>
<hr>
<p><a HREF="manual_Introduction.html">第一章</a>, <a HREF="manual_Introduction.html">前一章</a>,
<a HREF="manual_Licensing_and_Support.html">下一章</a>, <a
HREF="manual_Concept_Index.html">最后一章</a>,<a HREF="manual_toc.html">目錄</a>. </p>
</body>
</html>
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -