異常:「OperationalError:(1042,」沒法獲取您的地址的主機名「)mysql
或者 多主機,dns慢,有的ping不通mysql,有的鏈接慢sql
或者 重啓某些服務,忽然起來不來,mysql鏈接超時緩存
分析:有防火牆?關閉 systemctl stop firewalld 沒啥用,再看看安全
處理:在mysql配置文件 /etc/mysql/my.cnf 添加服務器
skip-host-cache
skip-name-resolve
緣由: 性能
當新的客戶鏈接mysqld時,mysqld建立一個新的線程來處理請求。該線程先檢查是否主機名在主機名緩存中。若是不在,線程試圖解析主機名:
· 若是操做系統支持線程安全gethostbyaddr_r ()和gethostbyname_r()調用,線程使用它們來執行主機名解析。
· 若是操做系統不支持線程安全調用,線程鎖定一個互斥體並調用gethostbyaddr()和gethostbyname()。在這種狀況下,在第1個線程解鎖互斥體前,沒有其它線程能夠解析不在主機名緩存中的主機名。
重啓某些服務後,緩存不匹配,致使鏈接不上spa
一、 能夠用--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命令。code
四、若是你想要徹底禁止TCP/IP鏈接,用--skip-networking選項啓動mysqld。