前言

最近开发中遇到一个问题,mysql在服务器本地可以登录,但是远程通过3306端口却不可以。这个问题困扰了我一周之久,终于在今天解决了。在解决的过程中试了很多的方法,遂记录下来,希望能给大家一些提示。

排查错误位置

客户端方面

首先通过ping命令对服务器进行测试,如果ping不通,则是网络的问题,本文中没有涉及这类问题的解决。

如果能ping通,再测试端口有没有问题。首先安装telnet, telnet是windows系统自带的,搜索"启动或关闭Windows功能", 找telnet客户端,勾选即可启动。在cmd中输入telnet {服务器IP} 3306, 如果不能正确连接,说明是端口设置的问题, 再试试22端口有没有问题,如果也有问题,就是服务器整体的端口设置有问题,如果只有3306有问题,那么就是3306端口、mysql的设置问题,继续往下测试。

服务器方面

针对只有3306端口不能连接的情况,有以下几种解决方法:

1. 修改配置文件,开启对其他ip地址的监听

输入命令netstat -ntpl |grep 3306netstat -ntpl |grep 22, 查看端口的绑定情况

正确情况下应为以下输出:



如果3306只绑定的本地端口,就会出现和上图不一致的输出。需要对其配置文件进行修改:

sudo nano /etc/mysql/mysql.conf.d/mysqld.cnf

打开配置文件, 找到bind-address开头的一行,如果后面的ip地址是127.0.0.1,也就是服务器只会接收本地的连接请求,那么就需要改变此地址来指向外部的IP地址。例如,可以改为:

lc-messages-dir = /usr/share/mysql
skip-external-locking
#
# Instead of skip-networking the default is now to listen only on
# localhost which is more compatible and is not less secure.
bind-address = 0.0.0.0

如果你的mysql版本是MySQL 8+,那么mysqld.cnf中可能不会包含bind-address这一行,应该像下面所示方法进行添加:

[mysqld]
pid-file = /var/run/mysqld/mysqld.pid
socket = /var/run/mysqld/mysqld.sock
datadir = /var/lib/mysql
log-error = /var/log/mysql/error.log
bind-address = 0.0.0.0

修改完成后,保存并退出。重启mysql服务sudo systemctl restart mysql,使得配置文件的修改得以生效。

接下来再次回到客户端进行验证,如果能够telnet连接3306端口,说明配置成功,如果还是不能连接,进入下一步骤。

2. 关闭防火墙

Ubuntu默认的防火墙为ufw。防火墙的作用是管理网络规则,默认情况下打开防火墙是更好的选择, 但是这里为了排除debug时的影响,就先关闭一下。

查看防火墙状态sudo ufw status, 如果显示active, 就运行sudo ufw disable关闭。

3. 修改 iptables

iptables定义了网络访问规则,它工作在内核中,是一个网络过滤器。

运行

sudo iptables -I INPUT -p tcp --dport 3306 -j ACCEPT

表示添加接收3306端口的规则。

-I INPUT将当前命令插入在filter链的第一位置。

-p tcp表示添加tcp协议的扩展。

--dport XX-XX:指定目标端口。

-j ACCEPT: 规定的动作,这里为接收。

完成后,保存修改的配置sudo iptables-save

然后再次在客户端用telnet进行测试,得到结果:



说明连接3306端口成功了。(忽略这里的乱码)

解决mysql无法远程连接的问题的更多相关文章

  1. LNMP一键包安装后解决MySQL无法远程连接问题

    MySQL/MariaDB无法远程连接,如何开启? 1,没有给root对应的权限 -- @'192.168.1.123'可以替换为@‘%’就可任意ip访问 mysql> GRANT ALL PR ...

  2. 解决MySql无法远程连接

    安装完MySql后远程通过Navicat访问时报错: ERROR 1130: Host ***.***.***.*** is not allowed to connect to this MySQL ...

  3. Linux下mysql的远程连接(转)

    转载:http://www.cnblogs.com/fnlingnzb-learner/p/5830661.html 如果Mysql是按上篇的方法进行安装和设置的话,那进行远程连接就会稍微简单一点.我 ...

  4. MySQL数据库远程连接

    12.00 MySQL数据库远程连接 参考: http://www.jb51.net/article/24508.htm http://www.linuxdiyf.com/viewarticle.ph ...

  5. mysql 不能远程连接

    不想浪费大家时间,我这文章记录了我在vagrant上架的mysql远程连接不上的问题,不过我在整理时发现这个下面这个链接,如果我一开始能找到这个我就不会绕那么多弯了.不想看我是怎么一步步调错过程的请直 ...

  6. 开启本地MySql数据库远程连接

    解决MySQL不允许从远程访问的方法 开启 MySQL 的远程登陆帐号有两大步: 1.确定服务器上的防火墙没有阻止 3306 端口. MySQL 默认的端口是 3306 ,需要确定防火墙没有阻止 33 ...

  7. Mysql开启远程连接方法

    分类: 数据库开发技术 解决MySQL不允许从远程访问的方法 开启 MySQL 的远程登陆帐号有两大步: 1.确定服务器上的防火墙没有阻止 3306 端口. MySQL 默认的端口是 3306 ,需要 ...

  8. MySQL数据库远程连接很慢的解决方案

    在开发机器上链接mysql数据库很慢,但是在数据库服务器上直接链接数据库很快.猜测应该是远程链接解析的问题,在查询MySQL相关文档和网络搜索后,发现了一个配置似乎可以解决这样的问题,就是在MySQL ...

  9. mysql8数据库修改root密码,以及创建用户遇到的坑,开启远程登录,用navicat进行mysql的远程连接,mysql8.0默认编码方式,部分参数配置查询命令

    yum 安装MySQL8 echo "删除系统默认或之前可能安装的其他版本的 mysql" for i in $(rpm -qa|grep mysql);do rpm -e $i ...

随机推荐

  1. RTSP 流相关工具介绍

    RTSP (Real Time Streaming Protocol),实时流协议,是一种应用层协议,专为流媒体使用.本文将介绍 GStreamer, VLC, FFmpeg 这几个工具,如何发送.接 ...

  2. Spring Cloud Alibaba(5)---Nacos(配置中心)

    Nacos(配置中心) 有关Spring Cloud Alibaba之前写过四篇文章,这篇也是在上面项目的基础上进行开发. Spring Cloud Alibaba(1)---入门篇 Spring C ...

  3. 实时计算框架:Spark集群搭建与入门案例

    一.Spark概述 1.Spark简介 Spark是专为大规模数据处理而设计的,基于内存快速通用,可扩展的集群计算引擎,实现了高效的DAG执行引擎,可以通过基于内存来高效处理数据流,运算速度相比于Ma ...

  4. 推荐个开源在线文档,助道友领悟 Django 之“道”

    本文面向有手(需要一点点 Python Django 基础)的小伙伴,急需文档管理者食用最佳. 作者:HelloGitHub-吱吱(首发于 HelloGitHub 公众号) 嗷嗷待哺的小白:" ...

  5. Unity基础-脚本生命周期

    理解Unity脚本的生命周期对游戏开发很重要,这篇文章对生命周期做一个记录和总结.Unity的脚本生命周期(消息),也就是在脚本运行时,自动并且按顺序执行的一系列函数.在unity官网中有对生命周期详 ...

  6. php 简易日志函数应用 debug_backtrace()

    1 public static function writeILogs($datas) 2 { 3 $bt = debug_backtrace(); 4 $caller = array_shift($ ...

  7. The 2014 ACM-ICPC Asia Mudanjiang Regional First Round C

    题意:       这个是The 2014 ACM-ICPC Asia Mudanjiang Regional First Round 的C题,这个题目当时自己想的很复杂,想的是优先队列广搜,然后再在 ...

  8. POJ1328贪心放雷达

    题意:        有一个二维坐标,y>0是海,y<=0是陆地,然后只能在y=0的岸边上放雷达,有n个城市需要被监控,问最少放多少个雷达. 思路:       贪心去做就行了,其实题目不 ...

  9. 初入MongoDB

    初入MongoDB 业务需求,需要用到MongoDB.向来一直是mysql数据库的思想,一下转换为nosql还是很不适应.经过一个月的开发,写一下自己的感触.本文会对应mysql数据库进行说明. 数据 ...

  10. 【python】Leetcode每日一题-存在重复元素3

    [python]Leetcode每日一题-存在重复元素3 [题目描述] 给你一个整数数组 nums 和两个整数 k 和 t .请你判断是否存在 两个不同下标 i 和 j,使得 abs(nums[i] ...