Удаленное подключение к серверу MySQL занимает очень много времени

10

У меня на ноутбуке Linux работает сервер MySQL 5.0.75, к которому я хочу подключиться с другого компьютера в локальной сети.

Это соединение занимает 5-6 секунд:

mysql -h 172.22.65.101 -u myuser -p123

Пинг до хоста MySQL:

PING 172.22.65.101 (172.22.65.101) 56(84) bytes of data.
64 bytes from 172.22.65.101: icmp_seq=1 ttl=64 time=0.799 ms
64 bytes from 172.22.65.101: icmp_seq=2 ttl=64 time=0.000 ms
64 bytes from 172.22.65.101: icmp_seq=3 ttl=64 time=6.43 ms
64 bytes from 172.22.65.101: icmp_seq=4 ttl=64 time=0.000 ms
64 bytes from 172.22.65.101: icmp_seq=5 ttl=64 time=3.81 ms
64 bytes from 172.22.65.101: icmp_seq=6 ttl=64 time=0.706 ms
^C
--- 172.22.65.101 ping statistics ---
6 packets transmitted, 6 received, 0% packet loss, time 5027ms
rtt min/avg/max/mdev = 0.000/1.959/6.437/2.383 ms

Есть идеи? Когда я отслеживаю соединение с SHOW PROCESSLIST; на хосте MySQL я вижу, что команда «подключиться», а пользователь - «пользователь, не прошедший проверку подлинности». Это продолжается до тех пор, пока соединение не будет установлено. (Пользователь отображается как «myuser», а команда «sleep»)

Я разработчик и мне нужны ваши предложения о том, как найти узкое место!

Мой my.cnf на хосте:

[client]
port = 3306
socket = /var/run/mysqld/mysqld.sock

[mysqld_safe]
socket = /var/run/mysqld/mysqld.sock
nice  = 0

[mysqld]
user = mysql
pid-file = /var/run/mysqld/mysqld.pid
socket = /var/run/mysqld/mysqld.sock
port = 3306
basedir = /usr
datadir = /var/lib/mysql
tmpdir = /tmp
key_buffer = 16M
max_allowed_packet = 16M
thread_stack = 128K
thread_cache_size = 8
myisam-recover = BACKUP
query_cache_limit = 1M
query_cache_size = 16M
expire_logs_days = 10
max_binlog_size = 100M
skip-federated

[mysqldump]
quick
quote-names
max_allowed_packet = 16M

[isamchk]
key_buffer = 16M

кЛИЕНТ:

mysql  Ver 14.12 Distrib 5.0.51a, for debian-linux-gnu (i486) using readline 5.2

Сервер:

mysql  Ver 14.12 Distrib 5.0.75, for debian-linux-gnu (i486) using readline 5.2
Леннарт
источник

Ответы:

17

Вероятно, вы отстаете от попытки получить и проверить обратный DNS подключающегося хоста. Вы можете проверить это, включив раздел skip_name_resolvemy.cnf на сервере [mysqld].

Если это действительно так (о чем свидетельствует этот параметр, устраняющий задержку), то вы можете решить проблему, либо правильно настроив DNS (прямой и обратный) для клиента, либо запустив skip_name_resolveвсе время (что означает, что вы можете не использовать имена хостов в ваших GRANTтаблицах).

хаос
источник
Это исправило это! Я определил skip_name_resolve в my.cnf моего хоста MySQL, перезапустил MySQL, и проблема была решена. Я должен тебе пива. :)
Леннарт
Рад помочь. :)
хаос
1
отлично, спасибо! Просто чтобы прояснить это (в случае, если кто-то напутает, как я), это просто "skip_name_resolve" в одной строке, а не "skip_name_resolve = 1" или что-нибудь еще ... в противном случае ваш сервис не запустится!
Джеймс Кроули