最近處理了乙個mysql的故障。記錄下來備忘。看看遠端host有沒有訪問許可權。原因是看我們的伺服器的時候發現mysql被配置成了developer-machine,對於伺服器而言,配置成這樣的卻是不應該的。於是順手用mysql server instance config wizard reconfig了一下。
問題就來了,具體表現在**不能訪問資料庫(dizcuz,wordpress),因為歷史遺留問題,**配置資料庫的時候都用root進行連線。而且這台伺服器是專用的資料庫伺服器,沒有iis之類不能用phpmyadmin.
先檢查 mysql的user表,看看root有沒有遠端訪問的許可權。
use mysql
select user,host from user;
如果沒有,可以新增相關許可權。用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的型別...