MySql uses skip name resolve to solve the problem of slow external network link client

  • 2021-09-05 01:08:10
  • OfStack

mysql built on Tencent Cloud is always very slow when accessing navicat on the developed computer. It turns out that Mysql will resolve the domain name of the requested address, and the developed computer does not have a domain name, so it will lead to special slowness. Use the following to solve it


[mysqld]
skip-name-resolve
skip-grant-tables

An official explanation

How MySQL
uses DNS When a new thread connects to mysqld, mysqld will
spawn a new thread to handle the request. This thread will first check
if the hostname is in the hostname cache. If not the thread will call
gethostbyaddr_r() and gethostbyname_r() to resolve the hostname. If
the operating system doesn't support the above thread-safe calls, the
thread will lock a mutex and call gethostbyaddr() and gethostbyname()
instead. Note that in this case no other thread can resolve other
hostnames that is not in the hostname cache until the first thread is
ready. You can disable DNS host lookup by starting mysqld with
skip-name-resolve. In this case you can however only use IP names in
the MySQL privilege tables. If you have a very slow DNS and many
hosts, you can get more performance by either disabling DNS lookop
with skip-name-resolve or by increasing the HOST_CACHE_SIZE define
(default: 128) and recompile mysqld. You can disable the hostname
cache with skip-host-cache. You can clear the hostname cache with
FLUSH HOSTS or mysqladmin flush-hosts. If you don't want to allow
connections over TCP/IP, you can do this by starting mysqld with
skip-networking.

According to the documentation, if your mysql host queries DNS slowly or there are many client hosts, it will lead to slow connection. Because our development machine cannot connect to the external network, it is impossible to complete DNS parsing, thus understanding why the connection is so slow. At the same time, please note that after adding this configuration parameter, the host field in the authorization table of mysql can not use the domain name but only the ip address, because this is the result of prohibiting domain name resolution.

Summarize


Related articles: