Kết nối từ xa đến máy chủ MySQL mất rất nhiều thời gian


10

Tôi có một máy chủ MySQL 5.0.75 chạy trên máy tính xách tay Linux mà tôi muốn kết nối từ một máy khác trong mạng cục bộ.

Kết nối này mất 5-6 giây:

mysql -h 172.22.65.101 -u myuser -p123

Một ping đến máy chủ 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

Bất kỳ ý tưởng? Khi tôi giám sát kết nối với SHOW PROCESSLIST; trên máy chủ MySQL, tôi có thể thấy rằng lệnh là "kết nối" và người dùng là "người dùng không được xác thực". Điều này kéo dài cho đến khi kết nối được thiết lập. (Người dùng sau đó được hiển thị là "myuser" và lệnh là "ngủ")

Tôi là một nhà phát triển và cần đề xuất của bạn về cách tìm ra nút cổ chai!

My myff trên máy chủ:

[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

Bệnh nhân:

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

Người phục vụ:

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

Câu trả lời:


17

Có thể bạn đang bị trì hoãn trong nỗ lực truy xuất và xác minh DNS ngược của máy chủ kết nối. Bạn có thể kiểm tra điều này bằng cách bật skip_name_resolvetrong phần my.cnf của máy chủ [mysqld].

Nếu thực tế là trường hợp (được thể hiện bằng tham số đó loại bỏ độ trễ), thì bạn có thể giải quyết vấn đề bằng cách thiết lập DNS đúng (tiến và lùi) cho máy khách hoặc bằng cách chạy skip_name_resolvemọi lúc (có nghĩa là bạn có thể 't sử dụng tên máy chủ trong GRANTbảng của bạn ).


Cái đó đã sửa rồi! Tôi đã xác định Skip_name_resolve trong my.cnf của máy chủ MySQL của tôi, khởi động lại MySQL và vấn đề đã được giải quyết. Tôi nợ bạn một ít bia. :)
Lennart

Vui mừng được phục vụ. :)
hỗn loạn

1
tuyệt vời cảm ơn bạn! mặc dù chỉ rõ ràng (trong trường hợp có ai nhắn tin như tôi), nó chỉ đơn giản là "Skip_name_resolve" trên một dòng, không phải "Skip_name_resolve = 1" hoặc bất cứ điều gì ... nếu không thì dịch vụ của bạn sẽ không bắt đầu!
James Crowley
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.