1. 程式人生 > >連接mysql慢或者多臺服務器ping不通mysql

連接mysql慢或者多臺服務器ping不通mysql

min 支持 rational 完全 沒有 resolv fire ddr hosts

異常:“OperationalError:(1042,”無法獲取您的地址的主機名“)

  或者 多主機,dns慢,有的ping不通mysql,有的連接慢

  或者 重啟某些服務,突然起來不來,mysql連接超時

分析:有防火墻?關閉 systemctl stop firewalld 沒啥用,再看看

處理:在mysql配置文件 /etc/mysql/my.cnf 添加

skip-host-cache
skip-name-resolve

原因:

當新的客戶連接mysqld時,mysqld創建一個新的線程來處理請求。該線程先檢查是否主機名在主機名緩存中。如果不在,線程試圖解析主機名:

·         如果操作系統支持線程安全gethostbyaddr_r ()和gethostbyname_r()調用,線程使用它們來執行主機名解析。

·         如果操作系統不支持線程安全調用,線程鎖定一個互斥體並調用gethostbyaddr()和gethostbyname()。在這種情況下,在第1個線程解鎖互斥體前,沒有其它線程可以解析不在主機名緩存中的主機名。

   重啟某些服務後,緩存不匹配,導致連接不上

1、 可以用--skip-name-resolve選項啟動mysqld來禁用DNS主機名查找。然而,在這種情況下,你只可以使用MySQL中的授權表中的IP號。

2、如果你有一個很慢的DNS和許多主機,你可以通過用--skip-name-resolve禁用DNS查找或增加HOST_CACHE_SIZE定義(默認值:128)並重新編譯mysqld來提高性能。

3、可以用--skip-host-cache選項啟動服務器來禁用主機名緩存。要想清除主機名緩存,執行FLUSH HOSTS語句或執行mysqladmin flush-hosts命令。

4、如果你想要完全禁止TCP/IP連接,用--skip-networking選項啟動mysqld。

連接mysql慢或者多臺服務器ping不通mysql