1. 程式人生 > >Mysql連接錯誤:Lost connection to Mysql server at 'waiting for initial communication packet'

Mysql連接錯誤:Lost connection to Mysql server at 'waiting for initial communication packet'

註釋 機器 錯誤 命令 添加 tab localhost grant my.cnf配置

原因分析: 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文件中配置了bind-address地址綁定的地址(說明別的機器遠程只能通過這個綁定的本機地址來連接mysql),可以將其註釋掉。 例如: bind-address = 127.0.0.1 //說明只能在本機連接mysql,並且通過-h 127.0.0.1或localhost,在遠程是無法連接這個mysql的!

--------------------------------------------------------------------------------------------------------------

my.cnf配置的幾個參數:

skip-name-resolve 跳過DNS反向解析過程.(這樣就不能使用主機名連接mysql了,只能使用ip連接)

skip-grant-tables 跳過授權表(當mysql登陸密碼忘記時的解決辦法)

skip-networking 跳過TCP/IP連接

skip-host-cache 禁用主機名緩存;要想清除主機名緩存,執行FLUSH HOSTS語句或執行mysqladmin flush-hosts命令

Mysql連接錯誤:Lost connection to Mysql server at 'waiting for initial communication packet'