Віддалене підключення до сервера 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_resolveв розділі my.cnf сервера [mysqld].

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


Це виправило! Я визначив skip_name_resolve в my.cnf мого хоста MySQL, перезапустив MySQL і проблема була вирішена. Я тобі завдячую пивом. :)
Леннарт

Радий бути корисним. :)
хаос

1
чудово, дякую! щоб було зрозуміло, хоча (у випадку, якщо хтось псується, як я), це просто "skip_name_resolve" на одному рядку, а не "skip_name_resolve = 1" чи що-небудь ... інакше ваша послуга не запуститься!
Джеймс Кроулі
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.