環境介紹:
os:rhel5.4
mysql:5.5.10
異常情景:
資料庫一直處於機房內網中訪問和使用,一天乙個國外節點需要訪問資料庫,開通訪問許可權後,他們反饋很慢;
隨即在防火牆上,開通自己公司ip進行訪問,也有類似問題!
開始排錯原因:
1.檢查網路是否穩定?得到答案,ping ttl值很穩定,ssh也正常;
2.檢查mysql執行狀態,無異常發現;
3.突然想起了,mysql利用dns做解析的引數有可能在規劃時,沒有做設定!!!
解決辦法:
1.驗證引數
mysql
> show variables like 'skip_%';
+-----------------------+-------+
| variable_name | value |
+-----------------------+-------+
| skip_external_locking | on |
| skip_name_resolve | off |
| skip_networking | off |
| skip_show_database | off |
+-----------------------+-------+
4 rows in set (0.00 sec)
mysql> show variables like 'skip_%';
2.停庫,修改my.cnf裡面引數
[mysqld]
skip_name_resolve
3.重啟資料庫後驗證:
mysql> show variables like 'skip_%';
+-----------------------+-------+
| variable_name | value |
+-----------------------+-------+
| skip_external_locking | on |
| skip_name_resolve | on |
| skip_networking | off |
| skip_show_database | off |
+-----------------------+-------+
4 rows in set (0.03 sec)
該選項用於禁用dns解析,連線速度會快很多。不過,這樣就不能在mysql的授權表中使用主機名而只能用ip位址。
mysql利用dns做解析解釋:
當 mysql 客戶端連線 mysql 伺服器 (程序為:mysqld),mysqld 會建立乙個新的執行緒來處理該請求。該執行緒先檢查是否主機名在主機名快取中。如果不在,執行緒試**析主機名。
如果系統是執行緒安全的,則 gethostbyaddr_r () 和 gethostbyname_r() 被呼叫,來執行主機名解析;
如果系統不支援執行緒安全呼叫,則執行緒會鎖定乙個互斥體並呼叫 gethostbyaddr() 和 gethostbyname() 。在這種情況下,在第1個執行緒解鎖互斥體前,沒有其它執行緒可以解析不在主機名快取中的主機名。
通過 --skip-name-resolve 選項啟動 mysqld 來禁用dns主機名查詢。此時,只可以使用 mysql 授權表中的 ip 位址,不能使用主機名。
如果 dns 解析很慢且包括許多主機,通過用--skip-name-resolve 禁用dns查詢或增加host_cache_size定義(預設值:128)並重新編譯mysqld來提高效能;
通過 --skip-host-cache 選項啟動伺服器來禁用主機名快取。要想清除主機名快取,執行 flush hosts 語句或執行 mysqladmin flush-hosts 命令。
如果要完全禁止 tcp/ip 連線,用 --skip-networking 選項啟動 mysqld 。
MySQL遠端訪問速度緩慢的解決和分析
環境介紹 os rhel5.4 mysql 5.5.10 異常情景 資料庫一直處於機房內網中訪問和使用,一天乙個國外節點需要訪問資料庫,開通訪問許可權後,他們反饋很慢 隨即在防火牆上,開通自己公司ip進行訪問,也有類似問題!開始排錯原因 1.檢查網路是否穩定?得到答案,ping ttl值很穩定,ss...
MYSQL遠端訪問速度緩慢的解決和分析
問題發生的場景 mysql安裝在linux下,本地和遠端都有應用訪問mysql,本地訪問mysql很流暢,但是遠端訪問非常之緩慢,基本上到了幾分鐘才響應的地步。ssh連線穩定,ping了下發現無丟包,排除網路問題。那麼可能就是mysql的設定問題了。查閱資料發現可以這麼配置 mysqld skip ...
mysql遠端連線緩慢
最近專案使用到mysql,在linux上安裝rpm格式的mysql,前幾天訪問正常,但今天突然發現資料庫訪問緩慢,在網上搜尋過後,發現可以在 etc my.cnf檔案中新增 skip name resolve 來解決。但我在 etc目錄下無法找到my.cnf檔案,再經過搜尋,發現解決方案 用rpm包...