转载1:今天公司的网络做了调整,造成原本连接很快的mysql服务器,连接速度奇慢。以前几十毫秒的连接现在完成一次要近5秒钟,在排除了网络问题后,只有从mysql下手。原来每次访问db,mysql就会试图去解析来访问的机器的domain name,如果这时解析不料,等一段时间会失败,数据才能被取过来。解决方法如下:
转载2:最近,web后台管理服务器速度挺慢,一开始以为是apache瓶颈的问题,因为发现大量的搜索引擎老是爬过来,于是在防火墙上过滤掉了google、baidu等搜索引擎,没有什么好转的迹象。于是不用apache连接数据库,只测试整数、浮点运算,发现速度很快。因此,开始怀疑是数据库服务器上mysql的问题,但从本地测试mysql,查看连接数又一切正常。接着以为是两台服务器间网络连接的问题,先是修改两台机器上防火墙的设置,无效。开始从网上搜索,发现有人提到“ DNS的反向解谐。在my.cnf中设置:skip-name-resolve就OK了。发现这种连接慢的问题一般都是服务程序设置了DNS反向解析造成的。sshd,ftpd都是如此。教训。 ”
转载3:团队开发为了方便需要统一mysql,局域网内用专门的电脑作为mysql服务器。 mysql默认是不允许远程连接的,因为有很大的安全隐患。。所以我们需要手动开启。 ubuntu下mysql -u root -p 输入密码进入mysql控制台 创建远程登陆用户并授权 <!--more--> grant all PRIVILEGES on dbname.table to user@ipaddress′ identified by ‘password′; 最简单的 GRANT ALL PRIVILEGES ON *.* TO root@"%"IDENTIFIED BY 'password' WITH GRANT OPTION; 逐一分析所有的参数: all PRIVILEGES 表示赋予所有的权限给指定用户,这里也可以替换为赋予某一具体的权限,例如:select,insert,update,delete,create,drop 等,具体权限间用“,”半角逗号分隔。 dbname.* 表示上面的权限是针对于哪个表的,dbname指的是数据库,后面的 * 表示对于所有的表,由此可以推理出:对于全部数据库的全部表授权为“*.*”,对于某一数据库的全部表授权为“数据库名.*”,对于某一数据库的某一表授权为“数据库名.表名”。 user表示你要给哪个用户授权,这个用户可以是存在的用户,也可以是不存在的用户。 ipaddress表示允许远程连接的 IP 地址,如果想不限制链接的 IP 则设置为“%”即可。 password为用户的密码。 执行完毕记得重启apache:sudo /etc/init.d/apache2 restart
最终google到了解决办法: MySQL在处理新的线程连接请求时,会尝试进行DNS解析,如果在host cache和Hosts里找不到,处理起来就会很慢,因此最直接简便的方法就是禁用该反向解析功能,可以通过修改MySQL的配置文件实现,Linux下是my.cnf文件,windows下是my.ini文件,在配置文件[mysqld]下新增如下一行代码: skip-name-resolve 然后重启MySQL服务,再次连接发现已是秒连了。这个方案的不足之处就是,以后在使用grant对用户进行授权时只能使用IP格式,而不能使用主机名称了。 通过修改系统hosts文件也可以实现,举例来说,我想解决192.168.1.100远程连接MySQL服务器缓慢的问题,只需要在MySQL库所在服务器的hosts文件中新增一条记录如下: 192.168.1.100 test.com
保存退出,再次远程连接该MySQL库,同样很快。之所以说绝,是因为这样设置,你添加记录的192.168.1.100远程连接速度变快了,其他主机连接速度跟之前一样慢。该方法同样可以解决ssh远程连接某主机响应很慢的问题,原理一样。 |