客户端无法连接数据库的小问题

简介:      最近碰到了一个比较奇怪的数据库连接问题。问题的起因是做一个数据整合的时候,把服务器B的防火墙信息都拷贝到了服务器A,迁移的过程都很顺利,是一套开发测试环境,迁移完成之后,从应用的反馈来说都没有发现问题,过了几天有个开发的同事找到我说,她现在连接数据库的时候总是有超时的错误。
     最近碰到了一个比较奇怪的数据库连接问题。问题的起因是做一个数据整合的时候,把服务器B的防火墙信息都拷贝到了服务器A,迁移的过程都很顺利,是一套开发测试环境,迁移完成之后,从应用的反馈来说都没有发现问题,过了几天有个开发的同事找到我说,她现在连接数据库的时候总是有超时的错误。之前连接服务器B是没有问题的,想让我帮她看看。
   对于这个问题,最直接的思路就是防火墙了,确认客户端IP,端口库,数据库实例名都没有问题,但是她那边的反馈就是怎么都连接不了。而且比较奇怪的是和她一个组的另外一个同事连接就没有问题,所以就想如果跨网段实在访问不了,应该是得找IT的同事来解决了吧,是不是有什么特定的规则限制,最开始也没有怎么上心,但是等她再次找到我时,感觉这个问题确实有些奇怪。
   为了进一步验证,我专门抽了一些时间来了解开发同学的这个连接问题,最后为了进一步确认,我们开了远程协助,我可以看到她那边的连接情况。
基本情况如下:
tnsping 显示操作超时
使用telnet连接22号端口,显示连接失败,目前开了22号的端口
使用ping 服务器,显示正常

所以这个问题看起来就比较奇怪,而且有些让人捉摸不透,在服务器端再三确认了防火墙的设置。可以看到防火墙是开通了1521,22和1528的端口的。
# iptables -nvL|grep 10.12.1.12
  374 39102 ACCEPT     tcp  --  eth0   *       10.12.1.12          0.0.0.0/0           multiport dports 1528
    0     0 ACCEPT     tcp  --  eth0   *       10.12.1.12          0.0.0.0/0           multiport dports 22
    0     0 ACCEPT     tcp  --  eth0   *       10.12.1.12          0.0.0.0/0           multiport dports 1521
但是现在情况是tnsping和telnet都是失败的。
带着一丝尝试,重新赋予了1521端口的权限,再次查看也确认开通了,这个时候继续尝试连接就没有问题了。
# iptables -nvL|grep 10.12.1.12
    5   299 ACCEPT     tcp  --  eth0   *       10.12.1.12          0.0.0.0/0           multiport dports 1521,1522
  374 39102 ACCEPT     tcp  --  eth0   *       10.12.1.12          0.0.0.0/0           multiport dports 1528
    0     0 ACCEPT     tcp  --  eth0   *       10.12.1.12          0.0.0.0/0           multiport dports 22
    0     0 ACCEPT     tcp  --  eth0   *       10.12.1.12          0.0.0.0/0           multiport dports 1521     
这个问题虽然解决了,但是问题原因还是没有找到,于是今天继续查看。终于在同事的帮助下找到了原因。在/etc/sysconfig/iptables里面的内容和内存中的内容是同步的。得到的文件内容结果有这么一段。
-A INPUT -s 10.10.xx.61/32 -i eth0 -j ACCEPT
-A INPUT -s 10.10.xx.60/32 -i eth0 -j ACCEPT
-A INPUT -s 192.168.xx.232/32 -i eth0 -j ACCEPT
-A INPUT -s 192.168.xx.228/32 -i eth0 -j ACCEPT
-A INPUT -i eth0 -p icmp -j ACCEPT
-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
-A INPUT -i eth0 -p icmp -j ACCEPT
-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
-A INPUT -i eth1 -j DROP
-A INPUT -i eth0 -j DROP
-A INPUT -s 10.12.xx.99/32 -i eth0 -p tcp -m multiport --dports 1521 -j ACCEPT
-A INPUT -s 10.12.1.12/32 -i eth0 -p tcp -m multiport --dports 1521 -j ACCEPT
-A INPUT -s 10.127.xxx.82/32 -i eth0 -p tcp -m multiport --dports 10050 -j ACCEPT
-A INPUT -s 10.127.xxx.82/32 -i eth0 -p tcp -m multiport --dports 1521 -j ACCEPT
当然亮点的还是
-A INPUT -s 10.12.1.12/32 -i eth0 -p tcp -m multiport --dports 1521 -j ACCEPT 这一行上面的内容
-A INPUT -i eth0 -j DROP 这一行的内容代表的含义是不允许eth0的网卡访问,在防火墙设置里面还是存在这样一种依赖,自上向下,规则越严格,越要放在最上面。
所以之一行之后的连接都被限制了。当然通过iptables -nvL也确实看到后面的哪些IP确实都没有任何的流量。
问题到了这里就很清楚了,当然这也是对防火墙的操作不够规范导致的。可以把防火墙中的内容转化为iptables的命令,避免直接拷贝文件内容这种简单粗暴的方式。
目录
相关文章
|
22天前
|
前端开发 关系型数据库 数据库
使用 Flask 连接数据库和用户登录功能进行数据库的CRUD
使用 Flask 连接数据库和用户登录功能进行数据库的CRUD
24 0
|
1月前
|
SQL Oracle 关系型数据库
项目中经常看到数据库Connection连接与Session这个你好不知道吗?
项目中经常看到数据库Connection连接与Session这个你好不知道吗?
15 1
|
2月前
|
SQL 关系型数据库 MySQL
2024年阿里云数据库创建_数据库账号密码和连接教程
阿里云数据库怎么使用?阿里云百科整理阿里云数据库从购买到使用全流程,阿里云支持MySQL、SQL Server、PostgreSQL和MariaDB等数据库引擎,阿里云数据库具有高可用、高容灾特性,阿里云提供数据库备份、恢复、迁移全套解决方案。详细阿里云数据库购买和使用流程方法如下
|
2月前
|
数据采集 Java 关系型数据库
Java代码高效连接数据库
Java代码高效连接数据库
20 2
|
2月前
|
SQL 关系型数据库 MySQL
阿里云MySQL数据库价格、购买、创建账号密码和连接数据库教程
阿里云数据库使用指南:购买MySQL、SQL Server等RDS实例,选择配置和地区,完成支付。创建数据库和账号,设置权限。通过DMS登录数据库,使用账号密码访问。同地域VPC内的ECS需将IP加入白名单以实现内网连接。参考链接提供详细步骤。
376 3
|
24天前
|
关系型数据库 MySQL 数据库
用navicat连接数据库报错:1130-host ... is not allowed to connect to this MySql server如何处理
用navicat连接数据库报错:1130-host ... is not allowed to connect to this MySql server如何处理
23 0
|
1天前
|
SQL 关系型数据库 MySQL
【Go语言专栏】使用Go语言连接MySQL数据库
【4月更文挑战第30天】本文介绍了如何使用Go语言连接和操作MySQL数据库,包括选择`go-sql-driver/mysql`驱动、安装导入、建立连接、执行SQL查询、插入/更新/删除操作、事务处理以及性能优化和最佳实践。通过示例代码,展示了连接数据库、使用连接池、事务管理和性能调优的方法,帮助开发者构建高效、稳定的Web应用。
|
2天前
|
SQL DataWorks 网络安全
DataWorks操作报错合集之DataWorks连接Hive数据库时出现连接超时的问题如何解决
DataWorks是阿里云提供的一站式大数据开发与治理平台,支持数据集成、数据开发、数据服务、数据质量管理、数据安全管理等全流程数据处理。在使用DataWorks过程中,可能会遇到各种操作报错。以下是一些常见的报错情况及其可能的原因和解决方法。
7 1
|
2天前
|
弹性计算 关系型数据库 MySQL
检测MySQL 数据库连接数量
【4月更文挑战第29天】
5 0
|
2天前
|
Java 关系型数据库 MySQL
Java基础教程(20)-Java连接mysql数据库CURD
【4月更文挑战第19天】MySQL是流行的关系型数据库管理系统,支持SQL语法。在IDEA中加载jar包到项目类路径:右击项目,选择“Open Module Settings”,添加库文件。使用JDBC连接MySQL,首先下载JDBC驱动,然后通过`Class.forName()`加载驱动,`DriverManager.getConnection()`建立连接。执行CRUD操作,例如创建表、插入数据和查询,使用`Statement`或`PreparedStatement`,并确保正确关闭数据库资源。