解决mysql无法远程连接的问题
前言
最近开发中遇到一个问题,mysql在服务器本地可以登录,但是远程通过3306端口却不可以。这个问题困扰了我一周之久,终于在今天解决了。在解决的过程中试了很多的方法,遂记录下来,希望能给大家一些提示。
排查错误位置
客户端方面
首先通过ping命令对服务器进行测试,如果ping不通,则是网络的问题,本文中没有涉及这类问题的解决。
如果能ping通,再测试端口有没有问题。首先安装telnet, telnet是windows系统自带的,搜索"启动或关闭Windows功能", 找telnet客户端,勾选即可启动。在cmd中输入telnet {服务器IP} 3306
, 如果不能正确连接,说明是端口设置的问题, 再试试22端口有没有问题,如果也有问题,就是服务器整体的端口设置有问题,如果只有3306有问题,那么就是3306端口、mysql的设置问题,继续往下测试。
服务器方面
针对只有3306端口不能连接的情况,有以下几种解决方法:
1. 修改配置文件,开启对其他ip地址的监听
输入命令netstat -ntpl |grep 3306
和 netstat -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无法远程连接的问题的更多相关文章
- LNMP一键包安装后解决MySQL无法远程连接问题
MySQL/MariaDB无法远程连接,如何开启? 1,没有给root对应的权限 -- @'192.168.1.123'可以替换为@‘%’就可任意ip访问 mysql> GRANT ALL PR ...
- 解决MySql无法远程连接
安装完MySql后远程通过Navicat访问时报错: ERROR 1130: Host ***.***.***.*** is not allowed to connect to this MySQL ...
- Linux下mysql的远程连接(转)
转载:http://www.cnblogs.com/fnlingnzb-learner/p/5830661.html 如果Mysql是按上篇的方法进行安装和设置的话,那进行远程连接就会稍微简单一点.我 ...
- MySQL数据库远程连接
12.00 MySQL数据库远程连接 参考: http://www.jb51.net/article/24508.htm http://www.linuxdiyf.com/viewarticle.ph ...
- mysql 不能远程连接
不想浪费大家时间,我这文章记录了我在vagrant上架的mysql远程连接不上的问题,不过我在整理时发现这个下面这个链接,如果我一开始能找到这个我就不会绕那么多弯了.不想看我是怎么一步步调错过程的请直 ...
- 开启本地MySql数据库远程连接
解决MySQL不允许从远程访问的方法 开启 MySQL 的远程登陆帐号有两大步: 1.确定服务器上的防火墙没有阻止 3306 端口. MySQL 默认的端口是 3306 ,需要确定防火墙没有阻止 33 ...
- Mysql开启远程连接方法
分类: 数据库开发技术 解决MySQL不允许从远程访问的方法 开启 MySQL 的远程登陆帐号有两大步: 1.确定服务器上的防火墙没有阻止 3306 端口. MySQL 默认的端口是 3306 ,需要 ...
- MySQL数据库远程连接很慢的解决方案
在开发机器上链接mysql数据库很慢,但是在数据库服务器上直接链接数据库很快.猜测应该是远程链接解析的问题,在查询MySQL相关文档和网络搜索后,发现了一个配置似乎可以解决这样的问题,就是在MySQL ...
- mysql8数据库修改root密码,以及创建用户遇到的坑,开启远程登录,用navicat进行mysql的远程连接,mysql8.0默认编码方式,部分参数配置查询命令
yum 安装MySQL8 echo "删除系统默认或之前可能安装的其他版本的 mysql" for i in $(rpm -qa|grep mysql);do rpm -e $i ...
随机推荐
- RTSP 流相关工具介绍
RTSP (Real Time Streaming Protocol),实时流协议,是一种应用层协议,专为流媒体使用.本文将介绍 GStreamer, VLC, FFmpeg 这几个工具,如何发送.接 ...
- Spring Cloud Alibaba(5)---Nacos(配置中心)
Nacos(配置中心) 有关Spring Cloud Alibaba之前写过四篇文章,这篇也是在上面项目的基础上进行开发. Spring Cloud Alibaba(1)---入门篇 Spring C ...
- 实时计算框架:Spark集群搭建与入门案例
一.Spark概述 1.Spark简介 Spark是专为大规模数据处理而设计的,基于内存快速通用,可扩展的集群计算引擎,实现了高效的DAG执行引擎,可以通过基于内存来高效处理数据流,运算速度相比于Ma ...
- 推荐个开源在线文档,助道友领悟 Django 之“道”
本文面向有手(需要一点点 Python Django 基础)的小伙伴,急需文档管理者食用最佳. 作者:HelloGitHub-吱吱(首发于 HelloGitHub 公众号) 嗷嗷待哺的小白:" ...
- Unity基础-脚本生命周期
理解Unity脚本的生命周期对游戏开发很重要,这篇文章对生命周期做一个记录和总结.Unity的脚本生命周期(消息),也就是在脚本运行时,自动并且按顺序执行的一系列函数.在unity官网中有对生命周期详 ...
- php 简易日志函数应用 debug_backtrace()
1 public static function writeILogs($datas) 2 { 3 $bt = debug_backtrace(); 4 $caller = array_shift($ ...
- The 2014 ACM-ICPC Asia Mudanjiang Regional First Round C
题意: 这个是The 2014 ACM-ICPC Asia Mudanjiang Regional First Round 的C题,这个题目当时自己想的很复杂,想的是优先队列广搜,然后再在 ...
- POJ1328贪心放雷达
题意: 有一个二维坐标,y>0是海,y<=0是陆地,然后只能在y=0的岸边上放雷达,有n个城市需要被监控,问最少放多少个雷达. 思路: 贪心去做就行了,其实题目不 ...
- 初入MongoDB
初入MongoDB 业务需求,需要用到MongoDB.向来一直是mysql数据库的思想,一下转换为nosql还是很不适应.经过一个月的开发,写一下自己的感触.本文会对应mysql数据库进行说明. 数据 ...
- 【python】Leetcode每日一题-存在重复元素3
[python]Leetcode每日一题-存在重复元素3 [题目描述] 给你一个整数数组 nums 和两个整数 k 和 t .请你判断是否存在 两个不同下标 i 和 j,使得 abs(nums[i] ...