mysql故障不完全小結

2022-01-29 01:38:55 字數 3769 閱讀 1186

最近處理了乙個mysql的故障。記錄下來備忘。

原因是看我們的伺服器的時候發現mysql被配置成了developer-machine,對於伺服器而言,配置成這樣的卻是不應該的。於是順手用mysql server instance config wizard reconfig了一下。

問題就來了,具體表現在**不能訪問資料庫(dizcuz,wordpress),因為歷史遺留問題,**配置資料庫的時候都用root進行連線。而且這台伺服器是專用的資料庫伺服器,沒有iis之類不能用phpmyadmin.

先檢查 mysql的user表,看看root有沒有遠端訪問的許可權。

use mysql

select user,host from user;

看看遠端host有沒有訪問許可權。

如果沒有,可以新增相關許可權。用insert插入太麻煩,欄位太多(有很多字段雖然有預設值,但是插入的是n,沒有多少許可權的)。推薦用grant授權。

順便記錄下網上查到的一些命令集合。

把localhost改為%授權給全部,個人不推薦把localhost的授權改掉,因為會有問題,導致本地不能登入。下面會說。

mysql>use mysql;

mysql>update user set host = "%" where user = "root";

mysql>select host, user from user;

授權。

mysql>grant all privileges on *.* to "root"@"%"

identified by "123456" with grant option;

或者

mysql>grant all privileges on *.* to "root"@"192.168.1.1"

identified by "123456" with grant option;

最後

flush privileges
就能生效。

因為處理過程中不小心刪除了localhost ,或者忘記root密碼,或者刪除root帳戶,導致本地不能登入。可以關掉 mysqld程序,cmd進入mysql的bin目錄,用

mysqld --skip-grant-tables
?跳過許可權檢查,然後就可以直接進入mysql建立帳戶。

用下面的命令修改密碼。(不過特別注意如果有多個root的授權的話,必須在where裡新增乙個約束條件,不然多個授權的密碼都會修改。更推薦**連線不用root帳戶。

mysql>use mysql

mysql>update user set password=password("new_pass") where user="root";

mysql>flush privileges;

回到問題上來,修改上述配置之後,本地登入應該沒問題了,但是**還是不能正常訪問。

具體表現在? 非常慢,不能開啟網頁,知道請求失敗,連續幾次之後iis報告500(php錯誤次數過多),更詭異的是mysql啟動的瞬間還能開啟1-2次網頁。

在資料庫伺服器授權所有主機訪問myaql,在我的電腦上使用mysql進行遠端連線,發現非常慢,幾次都忍不住手動ctrl+c,最後發現連線失敗,錯誤報告為

#2013 - lost connection to mysql server at 'reading initial communication packet

在my.ini中[mysqld]段裡新增一行。

skip-name-resolve

?在主機的hosts裡為每個user表裡的授權host新增對映ip。

關於這個選項,是為了更好的管理授權,對ip進行dns反查,當然這個如果在主機的hosts裡沒有的話,查詢就會比較慢,經常慢到網頁卡死。

如果登陸到mysql,檢視程序的資訊

show processlist;

發現大量的程序的狀態為 login

因為mysql會對這個ip做dns反向查詢,導致大量的連線處於 login狀態.....

因此,如果關掉dns反查,而且在mysql的user表裡不用hostname而用ip位址作為host的話,連線登入至少能快很多。

?

附:mysql常見錯誤**說明

1005:建立表失敗?

1006:建立資料庫失敗?

1007:資料庫已存在,建立資料庫失敗?

1008:資料庫不存在,刪除資料庫失敗?

1009:不能刪除資料庫檔案導致刪除資料庫失敗?

1010:不能刪除資料目錄導致刪除資料庫失敗?

1011:刪除資料庫檔案失敗?

1012:不能讀取系統表中的記錄?

1020:記錄已被其他使用者修改?

1021:硬碟剩餘空間不足,**大硬碟可用空間?

1022:關鍵字重複,更改記錄失敗?

1023:關閉時發生錯誤?

1024:讀檔案錯誤?

1025:更改名字時發生錯誤?

1026:寫檔案錯誤?

1032:記錄不存在?

1036:資料表是唯讀的,不能對它進行修改?

1037:系統記憶體不足,請重啟資料庫或重啟伺服器?

1038:用於排序的記憶體不足,請增大排序緩衝區?

1040:已到達資料庫的最大連線數,**大資料庫可用連線數?

1041:系統記憶體不足?

1042:無效的主機名?

1043:無效連線?

1044:當前使用者沒有訪問資料庫的許可權?

1045:不能連線資料庫,使用者名稱或密碼錯誤?

1048:字段不能為空?

1049:資料庫不存在?

1050:資料表已存在?

1051:資料表不存在?

1054:欄位不存在?

1065:無效的sql語句,sql語句為空?

1081:不能建立socket連線?

1114:資料表已滿,不能容納任何記錄?

1116:開啟的資料表太多?

1129:資料庫出現異常,請重啟資料庫?

1130:連線資料庫失敗,沒有連線資料庫的許可權?

1133:資料庫使用者不存在?

1141:當前使用者無權訪問資料庫?

1142:當前使用者無權訪問資料表?

1143:當前使用者無權訪問資料表中的字段?

1146:資料表不存在?

1147:未定義使用者對資料表的訪問許可權?

1149:sql語句語法錯誤?

1158:網路錯誤,出現讀錯誤,請檢查網路連線狀況?

1159:網路錯誤,讀超時,請檢查網路連線狀況?

1160:網路錯誤,出現寫錯誤,請檢查網路連線狀況?

1161:網路錯誤,寫超時,請檢查網路連線狀況?

1062:字段值重複,入庫失敗?

1169:字段值重複,更新記錄失敗?

1177:開啟資料表失敗?

1180:提交事務失敗?

1181:回滾事務失敗?

1203:當前使用者和資料庫建立的連線已到達資料庫的最大連線數,請增大可用的資料庫連線數或重啟資料庫?

1205:加鎖超時?

1211:當前使用者沒有建立使用者的許可權?

1216:外來鍵約束檢查失敗,更新子表記錄失敗?

1217:外來鍵約束檢查失敗,刪除或修改主表記錄失敗?

1226:當前使用者使用的資源已超過所允許的資源,請重啟資料庫或重啟伺服器?

1227:許可權不足,您無權進行此操作?

1235:mysql版本過低,不具有本功能

不完全型別

c 允許在乙個 檔案中存放多個類,但這樣往往不便於類的管理,所以一向是提倡乙個檔案中只存放乙個類。不過呢,隨著類規模的不斷膨脹,乙個檔案中存放乙個類也有些顯得臃腫,或者是在某個角度上不便於 的組織。因此,c 2.0中引入了不完全型別的概念,即啟用了新的修飾符partial。借助該修飾符,我們可以在多...

不完全型別

不完全型別指 函式之外 型別的大小不能被確定的型別 總結一下,c的型別分為 結構體的宣告就是乙個不完全型別的典型例子。struct woman tag struct man tag struct woman tag 這樣是沒問題的。如果將man tag結構中的struct woman tag wif...

不完全型別

有時候我們在一些編譯器寫 的時候會碰見不完全型別這個編譯錯誤,那麼什麼是不完全型別,為啥會出現呢 不完全型別指 函式之外 型別的大小不能被確定的型別 只能以有限方式使用。不能定義該型別的物件。不完全型別只能用於定義指向該型別的指標及引用 1 或者用於宣告使用該型別作為形參型別或者返回值型別。c的型別...