黑族論壇

黑族論壇

黑族論壇目錄 / 程式設計 / 資料庫 / Mysql /

MySQL崩潰 - 如何救回資料

發表新主題
隨機主題
上個主題
下個主題
|
MySQL崩潰 - 如何救回資料

文章來源 mysql 官方手冊 :

所有MySQL在發布它們之前,在許多平台上被測試。這並不意味著在MySQL中沒有任何錯誤,但是如果有錯誤,它們是很少的並且很能難發現。如果你有一個問題並且如果你嘗試找出究竟是什麼摧毀了你的系統,它將總是有幫助的,因為你將有一個更好機會使得它被快速修複。

首先你應該試著找出問題mysqld守護進程是否死掉或你的問題是否與你的客戶有關。你可以用mysqladmin version檢查你的mysqld服務器正常執行了多長時間,如果mysqld死了,你可以在文件“mysql-data-directory/'hostname'.err”中找到其原因。

因為很難知道一些東西為什麼崩潰,首先試著檢查為其它人工作的東西是否使你崩潰。請嘗試下列事情:

  * 與mysqladmin shutdown停止mysqld守護進程,在所有表上運行myisamchk --silent --force */*.MYI並重啟mysqld守護經進程。這將保証你從一個幹淨的狀態運行。見13 維護MySQL安裝。
  * 使用mysqld --log並且試著從日志信息確定是否是某個特定的查詢殺死了服務器。全部錯誤的95%與特定的查詢有關!通常它是在日志文件中就在MySQL重啟之前的最後查詢之一。你也許可以使用下列過程驗証它:
      o 停止MySQL守護進程(用mysqladmin shutdown)。
      o 在MySQL數據庫目錄下做文件的一個備份。
      o 與myisamchk -s */*.MYI檢查表以驗証所有表是正確的。如果有任何表被損壞,用myisamchk -r path-to-table.MYI修複它。
      o 從MySQL數據目錄刪除(或移走)任何舊的日志文件。
      o 用safe_mysql --log啟動服務器。
      o 如果mysqld現在死掉,你可以通過恢複備份並執行mysql < mysql-log-file來測試問題是否是一個特定的查詢引起的。當然你可以通過用safe_mysqld --data=path-to-backup-directory啟動另一個MySQL服務器,在某個其他目錄而不是標准MySQL數據庫目錄下做後面的測試。
  * 你試用了基准測試嗎?他們應該很好地測試MySQL。你也可以增加代碼模擬你的應用程序!基准程序可在源代碼分發的“bench”目錄下找到,或對二進制分發,在你的MySQL安裝目錄下“sql-bench”目錄。
  * 試一下fork_test.pl和fork2_test.pl。
  * 對任何錯誤檢查文件“mysql-data-directory/'hostname'.err”。
  * 如果你配置MySQL以便調試,如果出錯,收集可能的錯誤信息將更容易。使用--with-debug選項的configure重新配置MySQL然後重新編譯。見G.1 調試一個 MySQL 服務器。
  * 為調試而配置MySQL使它包含一個安全的內存分配器以便能發現一些錯誤。它也提供關于正在發生什麼的大量輸出。
  * 你為你的操作系統使用了最新的補丁嗎?
  * 使用mysql的--skip-locking選項.在一些系統上,lockd鎖管理器不能正確工作;--skip-locking選項告訴mysqld不使用外部鎖。(這意味著你不能在同一個數據上運行兩個mysqld服務器而且如果你使用myisamchk,你一定要小心,但是它對為了測試試用選項可能有益。)
  * 當mysqld好象正在運行但沒有反應時,你嘗試過mysqladmin -u root processlist嗎?有時mysqld不是毫無反應,盡管你可能這樣認為。問題可能是所有在用的連接,或可能用內部鎖定問題。mysqladmin processlist甚至在這些情況下將通常可以進行一個連接,並且能提供有關當前連接數量及其狀態的有用信息。
  * 在你運行其他查詢時,在一個單獨窗口中運行命令mysqladmin -i 5 status,產生統計。
  * 嘗試下列步驟:
      1. 通過gdb(或其他調試器)啟動mysqld。
      2. 運行你的測試腳本。
      3. 當mysqld核心傾倒(core dump),做back(或你調試器中的回溯-backtrace命令)。
  * 嘗試用一個Perl腳本模擬你的應用程序以強制MySQL崩潰或表現不正確。
  * 或發一份正式的錯誤報告。見2.3 如何報告錯誤或問題,但是要不平常更詳細。因為MySQL為很多人的工作,導致崩潰的東西可能只存在于你的計算機上(例如,與你的特定系統庫有關的一個錯誤)。
  * 如果你的問題有具有動態長度行的表有關,並且你不使用BLOB/TEXT列(但是僅VARCHAR列),你可以用ALTER TABLE試著將全部VARCHAR改為CHAR,這將強制MySQL使用固定尺寸的行。固定尺寸的行占據很小的額外空間,但是更能容忍崩潰!當前動態行的代碼在 TCX 至少使用3 年的時間,沒有任何問題,但是從本質上講,動態長度的行對錯誤更敏感,因此如果上述對你有幫助,嘗試一下可能是一個好主意!
  • 關鍵字 : 問題, mysql, 錯誤, 特定, 查詢, 連接, 測試, 服務器, 幫助, 崩潰, mysqladmin, locking選, hostname, directory, bench, MySQL, 首先試, 首先, 額外空, 錯誤報告
0 0
2009-01-21T09:06:41+0000


  • 當您未登入黑族時,可以利用臉書 Facebook 登入來發表迴響。若使用黑族會員身份發表迴響則可獲得經驗值及虛擬金幣,用來參加黑族推出的活動。
發表迴響
驗證字串
留言