linux的SSH和Mysql 连接建立慢的解决办法

使用该命令:ssh -v [email protected],可以查看连接登录过程的日志

用ssh连其他linux机器,会等待10-30秒才有提示输入密码。严重影响工作效率。登录很慢,登录上去后速度正常,这种情况主要有两种可能的原因:

1. DNS反向解析的问题

OpenSSH在用户登录的时候会验证IP,它根据用户的IP使用反向DNS找到主机名,再使用DNS找到IP地址,最后匹配一下登录的IP是否合法。如果客户机的IP没有域名,或者DNS服务器很慢或不通,那么登录就会很花时间。

解决办法:

在目标服务器上修改sshd服务器端配置,并重启sshd

vi /etc/ssh/sshd_config,设置UseDNS为no即可

当然也可以通过提供DNS正确反向解析的方法解决,有如下两种思路

(1) 在server上/etc/hosts文件中把常用的ip和hostname加入,然后在/etc/nsswitch.conf看看程序是否先查询hosts文件(一般缺省是这样)。

修改server上的hosts文件,将目标机器的IP和域名加上去。或者让本机的DNS 服务器能解析目标地址。

vi /etc/hosts

192.168.12.16  ourdev

其格式是“目标机器IP 目标机器名称”这种方法促效。没有延迟就连上了。不过如果给每台都加一个域名解析,挺辛苦的。但在windows下用putty或secure-crt时可以采用这种方法。

(2)起一台dns服务器(可以是本机),加入反向解析,把这个dns服务器加入到/etc/resolv.conf中。

2. 关闭ssh的gssapi认证

用ssh -v [email protected] 可以看到登录时有如下信息:

debug1: Next authentication method: gssapi-with-mic

debug1: Unspecified GSS failure. Minor code may provide more information

注:ssh -vvv [email protected] 可以看到更细的debug信息

解决办法:

vi /etc/ssh/ssh_config(ssh,不是sshd),设置GSSAPIAuthentication no  并重启sshd

可以使用ssh -o GSSAPIAuthentication=no [email protected]登录

GSSAPI ( Generic Security Services Application Programming Interface) 是一套类似Kerberos 5 的通用网络安全系统接口。该接口是对各种不同的客户端服务器安全机制的封装,以消除安全接口的不同,降低编程难度。但该接口在目标机器无域名解析时会有问题

最近发现ssh连接的时候却很慢,ping的速度非常好,让人误以为是ssh连接不上。 分析结果,主要原因为:DNS的解析IP导致,可分别使用以下几种分析处理方式

1.linux ssh连接慢

最近发现ssh连接的时候却很慢,ping的速度非常好,让人误以为是ssh连接不上。 
分析结果,主要原因为:DNS的解析IP导致,可分别使用以下几种分析处理方式 
1、在server上/etc/hosts文件中把你本机的ip和hostname加入  
2、在server上/etc/ssh/sshd_config文件中修改或加入UseDNS=no  
3、注释掉server上/etc/resolv.conf中不使用的IP所有行  
4、修改server上/etc/nsswitch.conf中hosts为hosts:files 
5、authentication gssapi-with-mic也有可能出现问题,在server上/etc/ssh/sshd_config文件中修改 GSSAPIAuthentication no。/etc/init.d/sshd restart重启sshd进程使配置生效。 
如之前为服务器配置了双网卡,使的在/etc/resolv.conf文件中多了一行目前不使用的IP地址。注释或者删除该行即可。

2.mysql连接速度慢 
在局域网内连接其他机器的MYSQL,发现速度慢的很,不知道什么原因,总有几秒的延迟.

远程连接mysql异常缓慢,经常执行一条命令,然后要等个10几秒执行下一条。解决方法是在mysql的my.ini中的mysqld节加入skip-name-resolve,该命令参数避免了对主机名进行解析从而加快连接速度。
后来在网上发现解决方法,my.ini里面添加<linux中在/etc/my.cnf> 
[mysqld] 
skip-name-resolve 
skip-grant-tables

这样速度就快了!

  • skip-name-resolve
  • skip-grant-tables

原因是:

  • mysql客户端每次访问db,mysql就会试图去解析来访问的机器的hostname,并缓存到hostname cache,如果这时解析不了,等一段时间会失败,数据才能被取过来。
  • 2.系统将对任何用户的访问不做任何访问控制

友情提示:重启mysql生效

skip-name-resolve 
选项就能禁用DNS解析,连接速度会快很多。不过,这样的话就不能在MySQL的授权表中使用主机名了而只能用ip格式。

若使用–skip-grant-tables系统将对任何用户的访问不做任何访问控制,但可以用 mysqladmin flush-privileges或mysqladmin reload来开启访问控制;默认情况是show databases语句对所有用户开放。

还可参考:http://www.jb51.net/article/27616.htm

时间: 2024-10-14 02:47:04

linux的SSH和Mysql 连接建立慢的解决办法的相关文章

linux中ERROR: The partition with /var/lib/mysql is too full!解决办法

今天在ubuntu上遇见这个问题.应该是我的第一分区太小了. 解决办法: [email protected]:/var$ cd /var [email protected]:/var$ rm -rf log 我们删除日志文件 [email protected]:/var$ /etc/init.d/mysql start 在开启mysql就正常了 linux中ERROR: The partition with /var/lib/mysql is too full!解决办法,布布扣,bubuko.c

Linux 使用yum install安装mysql登陆不上解决办法

CentOS yum安装mysql后 Can’t connect to local MySQL server through socket ‘/var/lib/ CentOS Can’t connect to local MySQL server through socket ‘/var/lib/mysql/mysql.sock’ 如果仅仅只yum 安装了mysql这个包,启动mysql时就会提示:ERROR 2002 (HY000): Can’t connect to local MySQL

PHP多次调用Mysql存储过程报错解决办法

PHP多次调用Mysql数据库的存储过程会出现问题,主要问题为存储过程中执行多次SQL语句不能一一释放导致的,网上找了一些解决办法,比如使用 multi_query 然后一个一个释放,但是发现根本不适合我们的项目,我们使用CI框架写的,更多的是使用CI的数据库处理方法.所以只能另辟蹊径. 一次偶然,把Mysql链接方式改成了mysqli,两种不同的PHP连接mysql的扩展,官方在高版本中推荐使用mysqli,结果却奇迹般好了,使用Mysql长连接也行,天意么? PHP多次调用Mysql存储过程

navicat for mysql 显示中文乱码解决办法

navicat for mysql 显示中文乱码解决办法   最近遇到一个问题,用navicat for mysql 打开数据库时全都显示的是乱码(在用程序代码插入数据之前确保字符不是乱码),遇到问题就的寻求解决之道,百度了好长时间也没解决,网上那些解决办法都不 适合我的问题,网上的大多数解决方法是在navicat里右击一个连接,选择连接属性,切换到高级选项卡,去掉“使用mysql字符集”前的对勾,在编码 里选择utf-8,这种方法对于部分问题可能适合,但是我的乱码问题依然存在,于是乎我又将ut

linux中没有dos2UNIX或者UNIX2dos命令怎么解决办法

linux中没有dos2UNIX或者UNIX2dos命令怎么解决办法 http://blog.csdn.net/w616589292/article/details/38274475 dos2unix命令找不到怎么办 https://zhidao.baidu.com/question/1860968406611919387.html linux中没有dos2UNIX或者UNIX2dos命令怎么解决办法 http://blog.csdn.net/w616589292/article/details

Mac mySql ERROR 2002 (HY000): Can&#39;t connect to local MySQL server through socket &#39;/tmp/mysql.sock&#39; (2)的解决办法

我的环境:Mac 10.11.6 ,mysql  5.7.14  . mac mySql 报错ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2) 这个错是链接时报的错,要链接必须启动.修复的时候首先要启动mysql. 首先来了解一下 mysql.sock的作用: Mysql有两种连接方式: (1),TCP/IP (2),socket 对mysql.sock来说,其

ERROR 2002 (HY000): Can&#39;t connect to local MySQL server through socket &#39;/var/lib/mysql/mysql.sock&#39; (2) 的解决办法

更换mysql数据目录后出现ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock' (2) 的解决办法 于是关闭mysql服务: service mysqld stop 转移mysql数据目录 mv /var/lib/mysql/ /data/ 编辑my.cnf vi /etc/my.cnf 修改其中的datadir和socket到新的路径 [mysqld

Linux中error while loading shared libraries错误解决办法

Linux中error while loading shared libraries错误解决办法 默认情况下,编译器只会使用/lib和/usr/lib这两个目录下的库文件,通常通过源码包进行安装时,如果不指定--prefix,会将库安装在/usr/local/lib目录下:当运行程序需要链接动态库时,提示找不到相关的.so库,会报错.也就是说,/usr/local/lib目录不在系统默认的库搜索目录中,需要将目录加进去. 1.首先打开 /etc/ld.so.conf 文件 2.加入动态库文件所在

hung_task_timeout_secs日志linux出现ssh无法登陆ping可以的解决方法

linux服务器ssh无法登陆网站无法登陆但ping通 查看/var/log/message发生出现大量 Mar 13 11:10:08 db2car kernel: INFO: task java:19607 blocked for more than 120 seconds.Mar 13 11:10:08 db2car kernel: "echo 0 > /proc/sys/kernel/hung_task_timeout_secs" disables this messag