① Linux 如何修復損壞的MySQL資料庫
由於斷電或非正常關機而導致MySQL資料庫出現錯誤是非常常見的問題。MySQL分別針對不同的數據表類型提供了多個數據檢測恢復工具,這些工具是:myisamchkisamchk其中myisamchk適用於MYISAM類型的數據表,而isamchk適用於ISAM類型的數據表。這兩條命令的主要參數相同,一般新的系統都使用MYISAM作為預設的數據表類型,這里以myisamchk為例子進行說明。當發現某個數據表出現問題時可以使用: myisamchk tablename.MYI 進行檢測,如果需要修復的話,可以使用: myisamchk -of tablename.MYI 關於myisamchk的詳細參數說明,可以參見它的使用幫助。需要注意的時在進行修改時必須確保MySQL伺服器沒有訪問這個數據表,保險的情況下是最好在進行檢測時把MySQL伺服器Shutdown掉。 另外可以把下面的命令放在你的rc.local裡面啟動MySQL伺服器前: [ -x /tmp/mysql.sock ] && /pathtochk/myisamchk -of /DATA_DIR/*/*.MYI 其中的/tmp/mysql.sock是MySQL監聽的Sock文件位置,對於使用RPM安裝的用戶應該是/var/lib/mysql/mysql.sock,對於使用源碼安裝則是/tmp/mysql.sock可以根據自己的實際情況進行變更,而pathtochk則是myisamchk所在的位置,DATA_DIR是你的MySQL資料庫存放的位置。 需要注意的時,如果你打算把這條命令放在你的rc.local裡面,必須確認在執行這條指令時MySQL伺服器必須沒有啟動!
② 如何修復MySQL資料庫表
有兩種方法,一種方法使用mysql的check table和repair table 的sql語句,另一種方法是使用MySQL提供的多個myisamchk, isamchk數據檢測恢復工具。前者使用起來比較簡便。推薦使用。
1. check table 和 repair table
登陸mysql 終端:
mysql -uxxxxx -p dbname
check table tabTest;
如果出現的結果說Status是OK,則不用修復,如果有Error,可以用:
repair table tabTest;
進行修復,修復之後可以在用check table命令來進行檢查。在新版本的phpMyAdmin裡面也可以使用check/repair的功能。
2. myisamchk, isamchk
其中myisamchk適用於MYISAM類型的數據表,而isamchk適用於ISAM類型的數據表。這兩條命令的主要參數相同,一般新的系統都使用MYISAM作為預設的數據表類型,這里以myisamchk為例子進行說明。當發現某個數據表出現問題時可以使用:
myisamchk tablename.MYI
進行檢測,如果需要修復的話,可以使用:
myisamchk -of tablename.MYI
關於myisamchk的詳細參數說明,可以參見它的使用幫助。需要注意的時在進行修改時必須確保MySQL伺服器沒有訪問這個數據表,保險的情況下是最好在進行檢測時把MySQL伺服器Shutdown掉。
另外可以把下面的命令放在你的rc.local裡面啟動MySQL伺服器前:
[ -x /tmp/mysql.sock ] && /pathtochk/myisamchk -of /DATA_DIR/*/*.MYI
其中的/tmp/mysql.sock是MySQL監聽的Sock文件位置,對於使用RPM安裝的用戶應該是/var/lib/mysql/mysql.sock,對於使用源碼安裝則是/tmp/mysql.sock可以根據自己的實際情況進行變更,而pathtochk則是myisamchk所在的位置,DATA_DIR是你的MySQL資料庫存放的位置。
需要注意的時,如果你打算把這條命令放在你的rc.local裡面,必須確認在執行這條指令時MySQL伺服器必須沒有啟動!檢測修復所有資料庫(表)
③ Mysql常見的幾個錯誤問題及解決方法
一、Can』t connect to MySQL server on 『localhost』 (10061)
翻譯:不能連接到 localhost 上的mysql
分析:這說明「localhost」計算機是存在的,但在這台機器上卻沒提供MySQL服務。
需要啟動這台機器上的MySQL服務,如果機子負載太高沒空相應請求也會產生這個錯誤。
解決:既然沒有啟動那就去啟動這台機子的mysql。如果啟動不成功,多數是因為你的my.ini配置的有問題。重新配置其即可。
如果覺得mysql負載異常,可以到mysql/bin 的目錄下執行mysqladmin -uroot -p123 processlist來查看mysql當前的進程。
二、Unknown MySQL Server Host 『localhosadst』 (11001)
翻譯:未知的MySQL伺服器 localhosadst
分析:伺服器 localhosasdst 不存在。或者根本無法連接
解決:仔細檢查自己論壇下面的 ./config.inc.php 找到$dbhost重新設置為正確的mysql 伺服器地址。
三、Access denied for user: 『roota@localhost』 (Using password: YES)
翻譯:用戶 roota 訪問 localhost 被拒絕(沒有允許通過)
分析:造成這個錯誤一般資料庫用戶名和密碼相對mysql伺服器不正確
解決:仔細檢查自己論壇下面的 ./config.inc.php 找到$dbuser、$dbpw核實後重新設置保存即可。
四、Access denied for user: 『red@localhost』 to database 『newbbs』
翻譯:用戶 red 在localhost 伺服器上沒有許可權操作資料庫newbbs
分析:這個提示和問題三是不同的。那個是在連接資料庫的時候就被阻止了,而這個錯誤是在對資料庫進行操作時引起的。比如在select update等等。這個是因為該用戶沒有操作資料庫相應的權力。比如select 這個操作在mysql.user.Select_priv里記錄 Y 可以操作N 不可以操作。
解決:如果是自己的獨立主機那麼更新mysql.user 的相應用戶記錄,比如這里要更新的用戶為red 。或者直接修改 ./config.inc.php 為其配置一個具有對資料庫操作許可權的用戶
或者通過如下的命令來更新授權grant all privileges on dbname.* to 『user』@』localhost』 identified by 『password』
提示:更新了mysql庫中的記錄一定要重啟mysql伺服器才能使更新生效
FLUSH PRIVILEGES;
五、No Database Selected
翻譯:沒有資料庫被選擇上
分析:產生的原因有兩種
config.inc.php 裡面$dbname設置的不對。致使資料庫根本不存在,所以在 $db->select_db($dbname); 時返回了false
和上面問題四是一樣的,資料庫用戶沒有select許可權,同樣會導致這樣的錯誤。當你發現config.inc.php的設置沒有任何問題,但還是提示這個錯誤,那一定就是這種情況了。
解決:對症下葯
打開config.inc.php 找到$dbname核實重新配置並保存
同問題四的解決方法
六、Can』t open file: 『xxx_forums.MYI』. (errno: 145)
翻譯:不能打開xxx_forums.MYI
問題分析:
這種情況是不能打開 cdb_forums.MYI 造成的,引起這種情況可能的原因有:
1、伺服器非正常關機,資料庫所在空間已滿,或一些其它未知的原因,對資料庫表造成了損壞。
2、類 unix 操作系統下直接將資料庫文件拷貝移動會因為文件的屬組問題而產生這個錯誤。
解決方法:
1、修復數據表
可以使用下面的兩種方式修復數據表:(第一種方法僅適合獨立主機用戶)
1)使用 myisamchk ,MySQL 自帶了專門用戶數據表檢查和修復的工具 —— myisamchk 。更改當前目錄到 MySQL/bin 下面,一般情況下只有在這個下面才能運行 myisamchk 命令。常用的修復命令為:myisamchk -r 數據文件目錄/數據表名.MYI;
2)通過 phpMyAdmin 修復, phpMyAdmin 帶有修復數據表的功能,進入到某一個表中後,點擊「操作」,在下方的「表維護」中點擊「修復表」即可。
注意:以上兩種修復方式在執行前一定要備份資料庫。
④ 鎬庢牱淇澶峬ysql琛
澶氭暟鎯呭喌涓,鏁版嵁搴撹鐮村潖鍙鏄鎸囩儲寮曟枃浠跺彈鍒頒簡鐮村潖,鐪熸g殑鏁版嵁琚鐮村潖鎺夌殑鎯呭喌闈炲父灝戙傚ぇ澶氭暟褰㈠紡鐨勬暟鎹搴撶牬鍧忕殑鐨勪慨澶嶇浉褰撶畝鍗曘
鍜屽墠闈㈢殑鏍¢獙涓鏍,淇澶嶇殑鏂瑰紡涔熸湁涓夌嶃
涓嬮潰璁茬殑鏂規硶鍙瀵筂yISAM鏍煎紡鐨勮〃鏈夋晥銆傚叾浠栫被鍨嬬殑鎹熷潖闇瑕佷粠澶囦喚涓鎮㈠嶃
1,REPAIR TABLE SQL statement(mysql鏈嶅姟蹇呴』澶勪簬榪愯岀姸鎬)銆
2,鍛戒護mysqlcheck(mysql鏈嶅姟鍙浠ュ勪簬榪愯岀姸鎬)銆
3,鍛戒護myisamchk(蹇呴』鍋滄帀mysql鏈嶅姟,鎴栬呮墍鎿嶄綔鐨勮〃澶勪簬涓嶆椿鍔ㄧ姸鎬)銆
鍦ㄤ慨澶嶈〃鐨勬椂鍊,鏈濂藉厛浣滀竴涓嬪囦喚銆傛墍浠ヤ綘闇瑕佷袱鍊嶄簬鍘熷嬭〃澶у皬鐨勭‖鐩樼┖闂淬傝風『淇濆湪榪涜屼慨澶嶅墠浣犵殑紜鐩樼┖闂磋繕娌℃湁鐢ㄥ畬銆
1>鐢ㄢ漴epair table鈥濇柟寮忎慨澶
璇娉:repair table 琛ㄥ悕 [閫夐」]
閫夐」濡備笅:
QUICK 鐢ㄥ湪鏁版嵁琛ㄨ繕娌¤淇鏀圭殑鎯呭喌涓,閫熷害鏈蹇
EXTENDED 璇曞浘鍘繪仮澶嶆瘡涓鏁版嵁琛,浼氫駭鐢熶竴浜涘瀮鍦炬暟鎹琛,涓囪埇鏃犲堢殑鎯呭喌涓嬬敤
USE_FRM 鐢ㄥ湪.MYI鏂囦歡涓㈠け鎴栬呭ご閮ㄥ彈鍒扮牬鍧忕殑鎯呭喌涓嬨傚埄鐢.frm鐨勫畾涔夋潵閲嶅緩緔㈠紩
澶氭暟鎯呭喌涓,綆鍗曞緱鐢ㄢ漴epair table tablename鈥濅笉鍔犻夐」灝卞彲浠ユ悶瀹氶棶棰樸備絾鏄褰.MYI鏂囦歡涓㈠け鎴栬呭ご閮ㄥ彈鍒扮牬鍧忔椂,榪欐牱鐨勬柟寮忎笉綆$敤,渚嬪:
mysql> REPAIR TABLE mytable;
+鈥斺斺斺斺斺斺斺-+鈥斺斺+鈥斺斺-+鈥斺斺斺斺斺斺斺斺斺斺斺斺斺斺+
| Table | Op | Msg_type | Msg_text |
+鈥斺斺斺斺斺斺斺-+鈥斺斺+鈥斺斺-+鈥斺斺斺斺斺斺斺斺斺斺斺斺斺斺+
| sports_results.mytable | repair | error | Can鈥檛 find file: 鈥榤ytable.MYI鈥 (errno: 2) |
+鈥斺斺斺斺斺斺斺-+鈥斺斺+鈥斺斺-+鈥斺斺斺斺斺斺斺斺斺斺斺斺斺斺+
淇澶嶅け璐ョ殑鍘熷洜鏃剁儲寮曟枃浠朵涪澶辨垨鑰呭叾澶撮儴閬鍒頒簡鐮村潖,涓轟簡鍒╃敤鐩稿叧瀹氫箟鏂囦歡鏉ヤ慨澶,闇瑕佺敤USE_FRM閫夐」銆備緥濡:
mysql> REPAIR TABLE mytable USE_FRM;
+鈥斺斺斺斺斺斺斺-+鈥斺斺+鈥斺斺-+鈥斺斺斺斺斺斺斺斺斺斺斺+
| Table | Op | Msg_type | Msg_text |
+鈥斺斺斺斺斺斺斺-+鈥斺斺+鈥斺斺-+鈥斺斺斺斺斺斺斺斺斺斺斺+
| sports_results.mytable | repair | warning | Number of rows changed from 0 to 2 |
| sports_results.mytable | repair | status | OK |
+鈥斺斺斺斺斺斺斺-+鈥斺斺+鈥斺斺-+鈥斺斺斺斺斺斺斺斺斺斺斺+
鎴戜滑鍙浠ョ湅鍒癕sg_test琛ㄩ」鐨勮緭鍑轟俊鎮鈥漮k鈥,琛ㄥ悕宸茬粡鎴愬姛淇澶嶅彈鎹熻〃銆
2>鐢╩ysql鍐呭緩鍛戒護mysqlcheck鏉ヤ慨澶
褰搈ysql鏈嶅姟鍦ㄨ繍琛屾椂,涔熷彲浠ョ敤mysql鍐呭緩鍛戒護mysqlcheck鏉ヤ慨澶嶃
璇娉:mysqlcheck -r 鏁版嵁搴撳悕 琛ㄥ悕 -uuser -ppass
%mysqlcheck -r sports_results mytable -uuser -ppass
sports_results.mytable OK
鍒╃敤mysqlcheck鍙浠ヤ竴嬈℃т慨澶嶅氫釜琛ㄣ傚彧瑕佸湪鏁版嵁搴撳悕鍚庡垪鍑虹浉搴旇〃鍚嶅嵆鍙(鐢ㄧ┖鏍奸殧寮)銆傛垨鑰呮暟鎹搴撳悕鍚庝笉鍔犺〃鍚,灝嗕細淇澶嶆暟鎹搴撲腑鐨勬墍鏈夎〃,渚嬪:
%mysqlcheck -r sports_results mytable events -uuser -ppass
sports_results.mytable OK
sports_results.events OK
%mysqlcheck -r sports_results -uuser -ppass
sports_results.mytable OK
sports_results.events OK
3>鐢╩yisamchk淇澶
鐢ㄨ繖縐嶆柟寮忔椂,mysql鏈嶅姟蹇呴』鍋滄帀,鎴栬呮墍鎿嶄綔鐨勮〃澶勪簬涓嶆椿鍔ㄧ姸鎬(閫夐」skip-external-locking娌¤浣跨敤)銆傝扮潃涓瀹氳佸湪鐩稿叧.MYI鏂囦歡鐨勮礬寰勪笅鎴栬呰嚜宸卞畾涔夊叾璺寰勩
璇娉:myisamchk [閫夐」] [琛ㄥ悕]
涓嬮潰鏄鍏墮夐」鍜屾弿榪
鈥揵ackup, -B 鍦ㄨ繘琛屼慨澶嶅墠浣滅浉鍏寵〃寰楀囦喚
鈥揷orrect-checksum 綰犳f牎楠屽拰
鈥揹ata-file-length=#, -D # 閲嶅緩琛ㄦ椂,鎸囧畾鏁版嵁鏂囦歡寰楁渶澶ч暱搴
鈥揺xtend-check, -e 璇曞浘鍘繪仮澶嶆瘡涓鏁版嵁琛,浼氫駭鐢熶竴浜涘瀮鍦炬暟鎹琛,涓囪埇鏃犲堢殑鎯呭喌涓嬬敤
鈥揻orce, -f 褰撻亣鍒版枃浠跺悕鐩稿悓鐨.TMD鏂囦歡鏃,灝嗗叾瑕嗙洊鎺夈
keys-used=#, -k # 鎸囧畾鎵鐢ㄧ殑keys鍙鍔犲揩澶勭悊閫熷害,姣忎釜浜岃繘鍒朵綅浠h〃涓涓猭ey.絎涓涓猭ey涓0
鈥搑ecover, -r 鏈甯哥敤鐨勯夐」,澶у氭暟鐮村潖閮藉彲浠ラ氳繃瀹冩潵淇澶嶃傚傛灉浣犵殑鍐呭瓨瓚沖熷ぇ,鍙浠ュ炲ぇ鍙傛暟sort_buffer_size鐨勫兼潵鍔犲揩鎮㈠嶇殑閫熷害銆備絾鏄閬囧埌鍞涓閿鐢變簬鐮村潖鑰屼笉鍞涓 鐨勮〃鏃,榪欑嶆柟寮忎笉綆$敤銆
鈥搒afe-recover 錛峯 鏈褰誨簳鐨勪慨澶嶆柟寮,浣嗘槸姣-r鏂瑰紡鎱,涓鑸鍦-r淇澶嶅け璐ュ悗鎵嶄嬌鐢ㄣ傝繖縐嶆柟寮忚誨嚭 鎵鏈夌殑琛,騫朵互琛屼負鍩虹鏉ラ噸寤虹儲寮曘傚畠鐨勭‖鐩樼┖闂撮渶奼傛瘮-r鏂瑰紡紼嶅井灝忎竴鐐,鍥 涓哄畠娌″壋寤哄垎綾葷紦瀛樸備綘鍙浠ュ炲姞key_buffer_size鐨勫兼潵鍔犲揩淇澶嶇殑閫熷害銆
鈥搒ort-recover, -n mysql鐢ㄥ畠綾誨垎綾葷儲寮,灝界$粨鏋滄槸涓存椂鏂囦歡浼氶潪甯稿ぇ
鈥揷haracter-sets-dir=鈥 鍖呭惈瀛楃﹂泦璁劇疆鐨勭洰褰
鈥搒et-character-set=name 涓虹儲寮曞畾涔変竴涓鏂扮殑瀛楃﹂泦
鈥搕mpdir=path, -t 濡傛灉浣犱笉鎯崇敤鐜澧冨彉閲廡MPDIR鐨勫肩殑璇,鍙浠ヨ嚜瀹氫箟涓存椂鏂囦歡鐨勫瓨鏀句綅緗
鈥搎uick, -q 鏈蹇鐨勪慨澶嶆柟寮,褰撴暟鎹鏂囦歡娌℃湁琚淇鏀規椂鐢,褰撳瓨鍦ㄥ氶敭鏃,絎浜屼釜-q灝嗕細淇鏀 鏁版嵁鏂囦歡
鈥搖npack, -u 瑙e紑琚玬yisampack鎵撳寘鐨勬枃浠
myisamchk搴旂敤鐨勪竴涓渚嬪瓙
% myisamchk -r mytable
- recovering (with keycache) MyISAM-table 鈥榤ytable.MYI鈥