问题

数据库总是访问不了以致不得不反反复复的重启MySQL数据库。

但是重启的效果并不明显,重启10几分钟后问题依然出现。导致前端用户难以正常访问网站。
另外他们还通过google,百度搜索,怀疑是数据库连接设置太少。设定加大并发连接,无效。flush host,无效。经过详细了解情况后,得出如下信息:

一、系统正常;
二、MySQL本身服务正常(可以在本地用phpmyadmin操作,速度很快);
三、另外一台服务器的WEB端访问MySQL很慢,甚至无法访问;
四、网络拓扑:WEB、数据库分离,并且在不同机房;

排查

根据他反映的情况,开始就怀疑与防火墙有关。因为这个问题,我遇到过,有切身体会。
但是我仍然按照常规步骤,逐一排查故障。这里可以排除网络缘故,网络方面的可能性已经排除。
另外,由于涉及数据私隐,这里仅仅描述排查步骤及排查命令,不提供具体数据和命令执行结果。

检查磁盘空间

# df -h
查看进程状况 # pstree
查看网络连接 # netstat -an
查看系统日志 # tail -f /var/log/messages
查看MySQL日志 # cat xxx.err |less
查看系统设置 # ulimit
# cat /proc/sys/net/ipv4/ip_local_port_range
# cat /proc/sys/net/ipv4/ip_conntrack_max

经过这几个步骤的检查下来,大致可以确定问题所在。因为前面的排查,并没有发现异常的地方。而系统设置确是RedHat AS 4的默认值。而这些默认值,对于比较大的服务来说,是不能满足的。因此,再结合问题的症状,可以断定问题就在于系统设置上。

处理

经过上面的排查后,已经断定为系统设置上的问题。因此通过修改这三个设置,来观测效果。

# ulimit -HSn
# echo > /proc/sys/net/ipv4/ip_local_port_range
# echo '' > /proc/sys/net/ipv4/ip_conntrack_max

这些设置,已经在很多生产环境里应用,因此可以放心使用。

解决

应用了上面的三个设置后,经过一个多小时,问题不再出现。由此更可以断定,问题就是系统默认设置导致问题。
为了使得下次重启服务器后,这些设置仍然有效。通过修改 /etc/rc.local 来实现。

# vi /etc/rc.local
#增加如下三行代码
ulimit -HSn
echo > /proc/sys/net/ipv4/ip_local_port_range
echo '' > /proc/sys/net/ipv4/ip_conntrack_max

在第二天,问题已经彻底解决,运行了一天多,没有再出现问题。

总结

这些放行版操作系统,都是通用性的。为了满足通用,会不同程度的牺牲系统的性能。因此,作为系统管理员,一个很重要的工作,就是根据自己不同的业务,不同的应用,对系统进行优化。

原文:http://www.lvtao.net/database/643.html

防火墙导致MySQL无法访问的问题解决案例的更多相关文章

  1. MySQL SYS CPU高的案例分析(一)

    原文:MySQL SYS CPU高的案例分析(一) [现象] 最近关注MySQL CPU告警的问题时,发现有一种场景,有一些服务器最近都较频繁的出现CPU告警,其中的现象是 SYS CPU占比较高. ...

  2. Can't connect to local MySQL server through socket 问题解决

    Fedora8启动mysql 报错:ERROR 2002 (HY000): Can’t connect to local MySQL server through socket ‘/var/lib/m ...

  3. 阿里云ECS(linux)磁盘满触发的mysql的表异常修复案例

    阿里云ECS(linux)磁盘满触发的mysql的表异常修复案例 阿里云技术支持:完颜镇江 问题现象: 磁盘空间满了,第一想到的就是删除无用的服务日志或者升级数据盘. 通常是使用du –sh去分析目录 ...

  4. mysql远程访问1045的问题解决

    mysql远程访问1045的问题解决 首先进入mysql数据库,然后输入下面两个命令 grant all privileges on *.* to 'root'@'%' identified by ' ...

  5. MySQL 独立表空间恢复案例

    创建表的时候就会得到元数据.可以通过定义的方式对表的元数据进行生成 这个地方要注意的是 独立表空间当中   ibd & frm分别存储的是什么数据? 表空间:文件系统,为了更好的扩容数据库的存 ...

  6. MySQL CPU %sys 高的案例分析(三)

    [现象] 最近有台服务器晚上CPU告警,系统抓取的故障期间的snapshot显示CPU %sys较高,同时context switch在300K以上. 是否过高的context switch引起的%s ...

  7. mysql数据安全一之数据恢复案例

    mysql数据安全一之数据恢复案例 --chenjianwen 应用场景:适宜开启binlog 日志功能,定时备份并使用--master-data参数备份,在某个时间点丢失数据,用于数据恢复 开篇总结 ...

  8. 《PHP实用问题解决案例》系列分享专栏

    <PHP实用问题解决案例>已整理成PDF文档,点击可直接下载至本地查阅https://www.webfalse.com/read/201725.html 文章 PHP汉字拼音转换和公历农历 ...

  9. FAQ | 是什么导致MySQL数据库服务器磁盘I/O高(本文章来自知数堂)

    FAQ | 是什么导致MySQL数据库服务器磁盘I/O高 2016-12-26 叶金荣 老叶茶馆 0.导读 有个MySQL服务器的磁盘I/O总有过高报警,怎么回事? 本文约1500字,阅读时间约10分 ...

随机推荐

  1. 【ERROR】Oracle11g两个监听同名进程的故障

    问题: 一个实例启动了另个两个监听. 解决方法: #ps -ef | grep tnslsnr #oracle 925826 1 0 Apr 06 - 234:50 /u01/app/oracle/p ...

  2. bash 基本功能

    1 shell概述 shell是一个命令解释器,为用户提供了一个向Linux内核发送请求以便运行程序的界面系统级程序.用户可以用shell启动.挂起.停止甚至是编写一些程序. shell是一个功能强大 ...

  3. CListCtrl控件中显示进度条

    CListCtrl控件的subitem中显示进度条 http://www.codeproject.com/Articles/6813/List-Control-Extended-for-Progres ...

  4. 【转载】Gradle构建多模块项目

    本文转载自:https://yq.aliyun.com/articles/25589写的非常好! 改动如下: 1. 增加了一些[补充说明]. 2. 将执行命令使用较为显眼的博客园样式. 3. 将输出结 ...

  5. mysql - 语法复习与学习

    //本月的第一天,最后一天 $start=date('Y-m-01', strtotime(date("Y-m-d"))); echo date('Y-m-d', strtotim ...

  6. jquery插件Flot的简单讲解

    只是说一下基本用法,举一两个例子,详细用法请查看官方文档 使用方法是要先引入jquery插件,然后引入flot插件. <script type="text/javascript&quo ...

  7. linux shell 命令获取字符串/文件的MD5值

    获取字符串的MD5值: 字符串“hello”的MD5: $ echo -n 'hello'|md5sum|cut -d ' ' -f1 得到的MD5值: 5d41402abc4b2a76b9719d9 ...

  8. [hihoCoder] #1032 : 最长回文子串

    时间限制:1000ms 单点时限:1000ms 内存限制:64MB 描述 小Hi和小Ho是一对好朋友,出生在信息化社会的他们对编程产生了莫大的兴趣,他们约定好互相帮助,在编程的学习道路上一同前进. 这 ...

  9. 解决Linux(ubuntu),windows双系统重装后恢复开机选单

    1 重装ubuntu后恢复开机选单十分简单.直接更新grub就能够了: sudo update-grub 2  重装windows后显得麻烦一点.需用u盘写入ubuntu镜像重新启动使电脑从u盘启动, ...

  10. 微信公众号支付安卓和WP支付成功,苹果不能支付!

    花了几天时间,终于搞好了,代码是从官网上下的.NET DEMO的代码改的,测试的时候发现安卓和WP手机都能进行支付,但是苹果的怎么支付都支付不了,主要是在下面这个界面 点支付按钮就是苹果支付不了,其他 ...