在遠程鏈接mysql的時候,鏈接不上,出現以下報錯: Lost connection to MySQL server at 'waiting for initial communication packet', system error: 0 截圖以下:mysql
緣由分析:sql
mysql開啓了DNS的反向解析功能,這樣mysql對鏈接的客戶端會進行DNS主機名查找。 mysql處理客戶端解析過程: 1)當mysql的client連過來的時候,服務器會主動去查client的域名。 2)首先查找 /etc/hosts 文件,搜索域名和IP的對應關係。 3)若是hosts文件沒有,則查找DNS設置,進行DNS反向解析,直到timeout鏈接失敗。 mysql的DNS反向解析: 1)mysql接收到鏈接請求後,得到的是客戶端的ip,爲了更好的匹配mysql.user裏的權限記錄(某些是用hostname定義的)。 2)若是mysql服務器設置了dns服務器,而且客戶端ip在dns上並無相應的hostname,那麼這個過程很慢,致使鏈接等待。 解決方案: 1)把client的ip寫在mysql服務器的/etc/hosts文件裏,隨便給個名字作主機映射便可。 2)在my.cnf配置文件中的[mysqld]區域添加skip-name-resolve,即跳過mysql鏈接的DNS反向解析功能,這樣能很好地提升mysql性能。在這種狀況下,就只能使用MySQL受權表中的IP來鏈接mysql服務了。 對於第一種方法顯然比較笨,也不實用!強烈推薦第二種方法,添加skip-name-resolve選項能夠禁用dns解析,這樣的話,就不能在mysql的受權表中使用主機名了,只能使用IP。
my.cnf配置的幾個參數: skip-name-resolve 跳過DNS反向解析過程.(這樣就不能使用主機名鏈接mysql了,只能使用ip鏈接) skip-grant-tables 跳過受權表(當mysql登錄密碼忘記時的解決辦法) skip-networking 跳過TCP/IP鏈接 skip-host-cache 禁用主機名緩存;要想清除主機名緩存,執行FLUSH HOSTS語句或執行mysqladmin flush-hosts命令緩存
當你發現本身的才華撐不起野心時,就請安靜下來學習吧服務器