阅读 586

远程登录mysql踩坑

远程登录服务器出现问题

登录代码: mysql -u username -p -h 服务器ip -P 端口号 -D 数据库
出现了无法登录的bug,can't connnect to MySql server on 
复制代码

网络检查

ping 服务器ip地址,可以确保不是服务器网络问题。如果是服务器问题就要找服务器网络问题的方法。

telnet 主机ip 22 port

  • 如果无法连接,可能是你的主机没有安装ssh-server(一般系统只默认安装ssh-client);

  • 也可能是防火墙把22端口禁用,不一定是网络问题(这一步仅和上一步做对比;

  • 如果能够连接,说明网络没有问题,而是你的主机配置问题,然后按以下步骤继续排查)

    我这里22端口和3306端口均不能访问,但是ip地址是可以ping通的。我自己设置的27252端口为ssh端口改成22端口为登录端口了

检查主机端口

1) netstat -ntpl | grep 3306 
tcp 0 0 127.0.0.1:3306 127.0.0.1:* LISTEN -
2) netstat -ntpl | grep 22 
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN -
复制代码

注意:3306端口ip显示为127.0.0.1表示这个地址只能被本机访问

mysql配置文件检查

检查my.cnf的配置,bind-address=addr可以配置绑定ip地址。 
不配置或者IP配置为0.0.0.0,表示监听所有客户端连接。
复制代码

注意(我踩了这个坑):mysql 5.7的目录改成了/etc/mysql/mysql.conf.d/mysqld.cnf 而非之前的 /etc/mysql/mycnf

mysql用户访问权限

进入mysql数据库

    $mysql -u root -p
    >use mysql;
    >select host,user from user;
复制代码

MySQL建用户的时候会指定一个host,默认是127.0.0.1/localhost只能本机访问; 其它机器用这个用户帐号访问会提示没有权限,host改为%,表示允许所有机器访问。

防火墙检测

— ubuntu下使用ufw工具 sudo ufw status 查看防火墙状态,在ubuntu下iptables一般被ufw接管,而selinux是默认不安装的,如果你曾经安装过,就需要禁用seliux并重启系统了。 sudo ufw enable/disable 启用和禁用防火墙 sudo ufw allow 3306 允许访问3306端口

— 以下是centos等系统的做法:

  • 1)iptables –list查看;
  • 2)开启防火墙3306端口 vim /etc/sysconfig/iptables -A INPUT -m state –state NEW -m tcp -p tcp –dport 3306 -j ACCEPT(允许3306端口通过防火墙) /etc/init.d/iptables restart(重启防火墙使配置生效)
  • 3)或者直接关闭防火墙; 参考:http://blog.csdn.net/fjssharpsword/article/details/50973283

参考资料:

blog.csdn.net/AIkiller/ar… blog.csdn.net/ynnmnm/arti… stackoverflow.com/questions/16161889/cant-connect-to-remote-mysql-server-with-error-61