mysql 远程链接问题

问题描述:

从一台linux远程连接另一台linux上的MySQL, 出现ERROR 2003 (HY000): Can‘t connect to MySQL server on ‘xxx.xxx.xxx.85‘(111)错误。

[[email protected]vcs0 ~]$ mysql -hxxx.xxx.xxx.85 -uroot -p

Enter password:  www.2cto.com

ERROR 2003 (HY000): Can‘t connect to MySQL server on ‘xxx.xxx.xxx.85‘ (111)

[[email protected] ~]$ perror 111

OS error code 111: Connection refused

查看errorCode

[[email protected] ~]$ perror 111

OS error code 111: Connection refused

问题分析:

1,可能网络连接问,远程ping xxx.xxx.xxx.85 ,能ping通,排除此情况

[[email protected] ~]$ ping xxx.xxx.xxx.85

PING xxx.xxx.xxx.85 (xxx.xxx.xxx.85) 56(84) bytes of data.

64 bytes from xxx.xxx.xxx.85: icmp_seq=1 ttl=63 time=0.230 ms

2,排查可能由于85上my.cnf里配置了skip_networking或者bind_address,只允许本地socket连接

2.1 在[mysqld]下设置skip_networking,

知识说明: 这使用MySQL只能通过本机Socket连接(socket连接也是本地连接的默认方式),放弃对TCP/IP的监听  www.2cto.com

当然也不让本地java程序连接MySQL(Connector/J只能通过TCP/IP来连接)。

2.2 可能使用了bind_address=127.0.0.1(当然也可以是其他ip)

[mysqld]

bind_address=127.0.0.1

知识说明:这种情况可以TCP/IP连接

通过查看了my.cnf文件,以上两个都是没设置的,排除掉这两种情况

3,排查DNS解析问题,检查是否设置了: skip_name_resolve。 这个情况肯定不可能,因为我用的是ip,不是主机名。

[mysqld]

skip_name_resolve

知识说明:这个参数加上后,不支持主机名的连接方式。

4, 排查用户和密码问题, 其实用户和密码的错误,不会出现111的,所以排除用户密码问题

ERROR 1045 (28000): Access denied for user ‘root‘@‘XXXX‘ (using password: YES)

5,排查--port问题,有可能85的MySQL port不是默认3306, 这样我远程连接时,没有指定--port,用的是3306, 而85上没有对3306进行监听。

ps -ef | grep mysqld

果然是: 85上的MySQL使用的是3308 port.

最终连接方式:加上--port=3308

[[email protected] ~]$ mysql -hxxx.xxx.xxx.85 -uroot -p --port=3308

Enter password:

Welcome to the MySQL monitor. Commands end with ; or \g.

为什么出现这么低级的错误呢?

因为我一直在用85上的MySQL, 而且每次都是直接用mysql -uroot就连接上了,没有指定--port,这样我就一直以为这MySQL的port一直是默认的3306的。

其实根本原因是:

1. MySQL本地连接,如果不指mysql --protocol=tcp, 连接默认是socket方式连接的。这点大家都知道。  www.2cto.com

2, MySQL socket连接是根据sokect文件来的,与--port不相关的,如果是一机多实例,则用-S(或者--socket=name )来指定连接哪个实例。

就是这个socket连接对--port无识别效果,导致排查这个问题这么久。

见下面: 其实85上只有一个port为3308的MySQL实例,但是用3306仍然是连接上此实例,说明socket连接方式忽略--port参数。

-bash-3.2$ mysql -uroot --port=3308

Welcome to the MySQL monitor. Commands end with ; or \g.

mysql -uroot --port=3306

Welcome to the MySQL monitor. Commands end with ; or \g.

再次说明基础细节很重要啊。

时间: 2024-10-07 15:19:05

mysql 远程链接问题的相关文章

允许MySQl远程链接

A机器上安装了MySQl Server,想在B机器上远程连接.不想,收到拒绝提示.搜索之,时A机器上MySQL未授权给B机器远程连接权限. 1.直接法,即将MySQL库中user表中新增一个新用户test,密码为test,然后使用授权语句授之一定的权限 grant 权限 on 数据库名.表名 to 用户名@登录主机 identified by "用户密码" A机器上,操作指令如下: 1>use mysql 2>grant all on *.* to [email prote

linux下mysql远程链接

前言:我的系统是ubuntu,默认不支持mysql远程链接.接下来的步骤改变这点. 1,首先取消mysql本机绑定 编辑/etc/mysql/my.cnf 将”bind-address = 127.0.0.1“注释 sudo /etc/init.d/mysql restart重启即可远程访问,或 sudo service mysql restart 2,你最好新增一个用户,并给这个用户限制权限.比如,只允许他访问某个库,某个表. grant all on 库名.* to [email prote

MySQL远程链接

当把本地数据库作为服务器的时候,如果你发现client无法链接到你的数据库服务器,那么有可能是: 1. 当前account没有远程链接权限,如何开通? GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'password' WITH GRANT OPTION; FLUSH PRIVILEGES; 2. 防火墙屏蔽了远程链接请求,怎么解决? netsh advfirewall firewall add rule name="MySQL

mysql远程链接 方法和flush-hosts

有时候会发现要用远程链接mysql 1 先要在mysql的host的机器上修改mysql表,最快就是复制一下本地localhost,现在phpmyadmin复制功能什么的很好用,然后把host列中的localhost改为对应的ip(远程客户端的ip)即可. 当然修改localhost为%也可以,但岂不是所以都可以登录了... 别忘记了最后要重启mysql服务才生效./etc/init.d/mysql restart 2  当然还有直接grant授权的,这个就是敲命令了... 有时候远程错误次数太

Linux下MySQL远程链接配置

1).首先进入数据库,使用系统数据库mysql mysql -u root -p mysql 2).接着对系统数据库的root账户设置远程访问的密码,与本地的root访问密码并不冲突 grant all privileges on *.* to 'root'@'%' identified by '123456' with grant option; 3).防火墙配置 firewall-cmd --zone=public --add-port=3306/tcp --permanent 4).重启.

Mac下配置PHP+Apache+phpMyAdmin+MySql远程链接

最近的项目是微信公众号平台的开发,微信官方给出的Demo是PHP的,发现大部分的学习资料也是PHP,那好吧,放弃Java,来段儿PHP吧 下面说说Mac下搭建PHP环境 数据库:MySQL-5.6.26 OS X:10.11.1 Apache:2.4.16 phpMyAdmin:4.5.2 编辑器:Sublime Text3 Apache: Mac系统下已经自带,打开『终端』输入: sudo apachectl -v 或 httpd -v 和 密码 可看到系统自带的版本信息: Server ve

解决mysql 远程链接问题

grant all privileges on *.* to 'root'@'192.168.2.204' identified by '123456' with grant option;flush privileges; 可直接用下面的,上面的执行之后,仅本机可以用ip进行链接,还是不能远程链接,下面的就ok了. GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY '123456' WITH GRANT OPTION; flush

Mysql远程链接访问权限设置

Host 'XXX' is not allowed to connect to this MySQL server 解决方案/如何开启MySQL的远程帐号 如何开启MySQL的远程帐号-1)首先以 root 帐户登陆 MySQL 在 Windows 主机中点击开始菜单,运行,输入“cmd”,进入控制台,然后cd 进入MySQL 的 bin 目录下,然后输入下面的命令. > MySQL -uroot -p123456 (123456 为 root 用户的密码.) C:\Program Files

mysql远程链接不上,本地可以链接

1.添加一个用户 grant all no *.* to 'user'@'%' identified by 'pwd'; 如果还是不行,有可能防火墙的问题 查看防火墙是否开启了3306端口 如果没有3306这个端口,就添加上去 vi /etc/sysconfig/iptables -A INPUT -m state –state NEW -m tcp -p tcp –dport 80 -j ACCEPT(允许80端口通过防火墙) -A INPUT -m state –state NEW -m t