文章851
标签121
分类10

使用 iftop 监控网络流量

非常抱歉,似乎在转换成 Markdown 格式时出现了问题。以下是使用 iftop 监控网络流量的修正版技术博客:


使用 iftop 监控网络流量

在网络管理和故障排除中,监控网络流量是一项重要的任务。iftop 是一个开源的命令行工具,可以实时显示网络接口的流量信息。本篇博客将介绍如何使用 iftop 来监控网络流量。

什么是 iftop?

iftop 是一个基于终端的实时网络流量监控工具,它可以显示网络接口的实时流量信息,包括源IP地址、目标IP地址、端口和传输速率等。通过 iftop,您可以了解网络中的数据流向和流量分布情况。

安装 iftop

在开始使用 iftop 之前,需要先安装它。以下是在常见 Linux 发行版上安装 iftop 的命令:

  • Ubuntu/Debian:
sudo apt-get install iftop
  • CentOS/Fedora:
sudo yum install iftop

使用 iftop 监控网络流量

安装完成后,可以按照以下步骤使用 iftop 监控网络流量:

  1. 打开终端。
  2. 运行以下命令启动 iftop:
sudo iftop

如果您使用的是非特权用户,请确保以管理员权限运行命令。

  1. iftop 将显示默认网络接口的流量信息,包括源IP、目标IP、端口和传输速率。

    ![iftop][]

    在界面上,您可以看到实时的流量信息,并且可以按需排序和过滤数据。

  2. 您可以使用 iftop 的一些命令行选项来自定义输出。例如,以下命令将显示指定网络接口的流量信息:

    bashsudo iftop -i eth0

    替换 eth0 为您要监控的网络接口。

结论

通过使用 iftop,您可以方便地监控网络接口的实时流量信息。它提供了有用的数据,帮助您分析网络流量和定位潜在的问题。无论是在网络管理、故障排除还是性能优化方面,

iftop 都是一个强大而实用的工具。希望本篇技术博客对您有所帮助!

引用文献

建议收藏备查!MySQL 常见错误代码说明

先给大家看几个实例的错误分析与解决方案。

1. ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/data/mysql/mysql.sock'

问题分析:可能是数据库没有启动或者是端口被防火墙禁止。

解决方法:启动数据库或者防火墙开放数据库监听端口。

2.ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: NO)

问题分析:密码不正确或者没有权限访问。

解决方法:
1)修改 my.cnf 主配置文件,在[mysqld]下添加 skip-grant-tables,重启数据库。最后修改密码命令如下:

mysql> use mysql;
mysql> update user set password=password("123456") where user="root";

再删除刚刚添加的 skip-grant-tables 参数,再重启数据库,使用新密码即可登录。

2)重新授权,命令如下:

mysql> grant all on *.* to 'root'@'mysql-server' identified by '123456';

3.客户端报 Too many connections

问题分析:连接数超出 Mysql 的最大连接限制。
解决方法:
1、在 my.cnf 配置文件里面增加连接数,然后重启 MySQL 服务。max_connections = 10000
2、临时修改最大连接数,重启后不生效。需要在 my.cnf 里面修改配置文件,下次重启生效。

set GLOBAL max_connections=10000;

4.Warning: World-writable config file '/etc/my.cnf' is ignored ERROR! MySQL is running but PID file could not be found

问题分析:MySQL 的配置文件/etc/my.cnf 权限不对。

解决方法:

chmod 644 /et/my.cnf

5.InnoDB: Error: page 14178 log sequence number 29455369832 InnoDB: is in the future! Current system log sequence number 29455369832

问题分析:innodb 数据文件损坏。

解决方法:修改 my.cnf 配置文件,在[mysqld]下添加 innodb_force_recovery=4, 启动数据库后备份数据文件,然后去掉该参数,利用备份文件恢复数据。

6.从库的 Slave_IO_Running 为 NO

问题分析:主库和从库的 server-id 值一样.
解决方法:修改从库的 server-id 的值,修改为和主库不一样,比主库低。修改完后重启,再同步即可!

7.从库的 Slave_IO_Running 为 NO问题

问题分析:造成从库线程为 NO 的原因会有很多,主要原因是主键冲突或者主库删除或更新数据, 从库找不到记录,数据被修改导致。通常状态码报错有 1007、1032、1062、1452 等。
解决方法一:

mysql> stop slave;
mysql> set GLOBAL SQL_SLAVE_SKIP_COUNTER=1;
mysql> start slave;

解决方法二:设置用户权限,设置从库只读权限

set global read_only=true;

8.Error initializing relay log position: I/O error reading the header from the binary log

分析问题:从库的中继日志 relay-bin 损坏.
解决方法:手工修复,重新找到同步的 binlog 和 pos 点,然后重新同步即可。

mysql> CHANGE MASTER TO MASTER_LOG_FILE='mysql-bin.xxx',MASTER_LOG_POS=xxx; 

维护过MySQL的运维或DBA都知道,经常会遇到的一些错误信息中有一些类似10xx的代码。

Replicate_Wild_Ignore_Table:
         Last_Errno: 1032
         Last_Error: Could not execute Update_rows event on table xuanzhi.test; Can't find record in 'test', Error_code: 1032; handler error HA_ERR_KEY_NOT_FOUND; the event's master log mysql-bin.000004, end_log_pos 3704

但是,如果不深究或者之前遇到过,还真不太清楚,这些代码具体的含义是什么?这也给我们排错造成了一定的阻碍。

所以,今天民工哥就把主从同步过程中一些常见的错误代码,它的具体说明给大家整理出来了。

MySQL常见错误代码说明:

  • 130 :文件格式不正确。
  • 145 :文件无法打开
  • 1005:创建表失败
  • 1006:创建数据库失败
  • 1007:数据库已存在,创建数据库失败
  • 1008:数据库不存在,删除数据库失败
  • 1009:不能删除数据库文件导致删除数据库失败
  • 1010:不能删除数据目录导致删除数据库失败
  • 1011:删除数据库文件失败
  • 1012:不能读取系统表中的记录
  • 1020:记录已被其他用户修改
  • 1021:硬盘剩余空间不足,请加大硬盘可用空间
  • 1022:关键字重复,更改记录失败
  • 1023:关闭时发生错误
  • 1024:读文件错误
  • 1025:更改名字时发生错误
  • 1026:写文件错误
  • 1032:记录不存在
  • 1036:数据表是只读的,不能对它进行修改
  • 1037:系统内存不足,请重启数据库或重启服务器
  • 1038:用于排序的内存不足,请增大排序缓冲区
  • 1040:已到达数据库的最大连接数,请加大数据库可用连接数
  • 1041:系统内存不足
  • 1042:无效的主机名
  • 1043:无效连接
  • 1044:当前用户没有访问数据库的权限
  • 1045:不能连接数据库,用户名或密码错误
  • 1048:字段不能为空
  • 1049:数据库不存在
  • 1050:数据表已存在
  • 1051:数据表不存在
  • 1054:字段不存在
  • 1065:无效的SQL语句,SQL语句为空
  • 1081:不能建立Socket连接
  • 1114:数据表已满,不能容纳任何记录
  • 1116:打开的数据表太多
  • 1129:数据库出现异常,请重启数据库
  • 1130:连接数据库失败,没有连接数据库的权限
  • 1133:数据库用户不存在
  • 1141:当前用户无权访问数据库
  • 1142:当前用户无权访问数据表
  • 1143:当前用户无权访问数据表中的字段
  • 1146:数据表不存在
  • 1147:未定义用户对数据表的访问权限
  • 1149:SQL语句语法错误
  • 1158:网络错误,出现读错误,请检查网络连接状况
  • 1159:网络错误,读超时,请检查网络连接状况
  • 1160:网络错误,出现写错误,请检查网络连接状况
  • 1161:网络错误,写超时,请检查网络连接状况
  • 1062:字段值重复,入库失败
  • 1169:字段值重复,更新记录失败
  • 1177:打开数据表失败
  • 1180:提交事务失败
  • 1181:回滚事务失败
  • 1203:当前用户和数据库建立的连接已到达数据库的最大连接数,请增大可用的数据库连接数或重启数据库
  • 1205:加锁超时
  • 1211:当前用户没有创建用户的权限
  • 1216:外键约束检查失败,更新子表记录失败
  • 1217:外键约束检查失败,删除或修改主表记录失败
  • 1226:当前用户使用的资源已超过所允许的资源,请重启数据库或重启服务器
  • 1227:权限不足,您无权进行此操作
  • 1235:MySQL版本过低,不具有本功能
  • 1250:客户端不支持服务器要求的认证协议,请考虑升级客户端。
  • 1251:Client 不能支持 authentication protocol 的要求 Client does not support authentication protocol requested by server; consider upgrading MySQL clientQuote:
  • 1267:不合法的混合字符集。
  • 2002:服务器端口不对。
  • 2003:MySQL 服务没有启动,请启动该服务。
  • 2008:MySQL client ran out of memory错误指向了MySQL客户mysql。这个错误的原因很简单,客户没有足够的内存存储全部结果。
  • 2013:远程连接数据库是有时会有这个问题,MySQL 服务器在执行一条 SQL 语句的时候失去了连接造成的。
  • 10048: 建议在my.ini文件中修改最大连接数, 把 mysql_connect() 方法都改成了 mysql_pconnect() 方法. 要修改mysql_pconnect(),可以在论坛的data目录的sql_config.phppconnect = 0 ;
    // 是否持久连接修改成 pconnect = 0;
    // 是否持久连接 修改成pconnect=0;
    // 是否持久连接修改成pconnect = 1; 开启防刷新,严禁刷新太快.
  • 10055:没有缓存空间可利用,查看下你的C盘空间是否已经满,清除一些没有用的文件. 可以在后台的"论坛核心设置","核心功能设置"里"进程优化"开启,"GZIP 压缩输出"关闭.查找了一下10055(没有缓存空间可利用)
  • 10061: 启动这台机器上的MySQL服务 如服务启动失败,一定是你的my.ini文件出了差错, MySQL服务不能正常启动 你删除了它后,MySQL就会按其默认配置运行, 那就没有问题了
https://segmentfault.com/a/1190000037439451

[踩坑] 终端执行 systemctl start supervisord

今天调整生产环境 supervisord 配置 , 启动 inet_http_server 配置

# systemctl restart supervisord

我在重启服务器前 , 增加了一些配置在 /etc/supervisord.d/. 执行后抛错如下 :

Job for supervisord.service failed because the control process exited with error code. See "systemctl status supervisord.service" and "journalctl -xe" for details.

限流:别说算法了,就问你“阈值”怎么算?

限流算法:别说算法了,就问你“阈值”怎么算?

在现代互联网应用中,限流是一种非常重要的技术手段,用于保护系统免受异常突发的流量冲击。限流算法是限制流量大小的关键,它可以分为静态算法和动态算法两类。本文将介绍常见的限流算法及其实现原理,并分享如何计算适当的阈值。

令牌桶算法

令牌桶算法是一种常见的静态限流算法。它通过以固定速率产生令牌,并放入一个桶中。每个请求需要从桶中获取一个令牌才能被执行。如果桶中有足够的令牌,请求就会被处理;否则,请求将被限流。令牌桶算法可以平滑处理突发流量,但要注意设置桶的容量,以免积攒过多的令牌导致系统无法承受突发请求。

漏桶算法

漏桶算法是另一种静态限流算法,它以固定速率将请求传递给业务逻辑。当不均匀速率的请求到达服务器时,限流器会以固定速率处理这些请求,类似于一个漏桶不断漏水。与令牌桶算法不同,漏桶算法处理请求的速率是绝对均匀的。选择令牌桶算法还是漏桶算法取决于业务需求和对请求处理速率的要求。

固定窗口与滑动窗口

固定窗口和滑动窗口是两种常见的动态限流算法。固定窗口算法在一个固定时间窗口内允许执行固定数量的请求,例如每秒钟只允许执行100个请求。而滑动窗口算法与固定窗口类似,但窗口会平滑地移动,而不是突然地移动。这样可以更好地适应流量的变化。动态限流算法可以根据一系列指标判断是否应该增加或减少流量,并且与TCP的拥塞控制非常相似。

限流对象

限流对象可以是集群级别的限流,也可以是针对具体业务对象的限流。例如,可以针对VIP用户进行无限流量,而对普通用户进行限流。另外,还可以根据IP地址或业务ID进行限流,以控制请求的数量。针对不同的限流对象,可以采用不同的限流策略和算法。

限流后的处理方法

当请求被限流时,可以采取以下处理方法:

  1. 同步阻塞等待一段时间:对于偶发性触发限流的请求,可以稍微阻塞等待一段时间,后续请求有很大概率得到处理。但需要注意控制超时时间,避免让人无限期地等待。
  2. 同步转异步:对于被限流的请求,可以将其存储起来,在业务低峰期进行处理。这类似于请求的降级策略,可以减轻系统负载。
  3. 调整负载均衡算法:如果某个请求被限流,可以告知负载均衡器减少向该节点发送请求的数量,以减轻节点压力。

计算阈值

确定适当的阈值是限流算法设计中的重要一环。阈值的计算需要综合考虑系统的容量、资源消耗、响应时间以及业务需求等因素。以下是一些常见的计算方法:

  1. 基于系统容量:根据系统的硬件配置、网络带宽和处理能力等因素,计算出系统可以承受的最大请求量。根据业务需求和性能指标,设置一个留有一定缓冲空间的阈值。
  2. 基于资源消耗:分析系统在处理一个请求时所消耗的资源,例如 CPU、内存、数据库连接等。通过监控和测试,了解系统在不同请求量下的资源消耗情况,根据资源的可用性设置合理的阈值。
  3. 基于响应时间:根据业务需求和用户体验要求,设置一个能够满足响应时间要求的阈值。通过压力测试和性能监控,确定在不同请求量下系统的响应时间,并根据需求来调整阈值。
  4. 基于业务需求:根据业务的特性和需求,确定不同业务对象的限流策略和阈值。例如,对于高价值的业务或VIP用户可以设置较高的阈值,而对于普通用户或低价值业务可以设置较低的阈值。

需要注意的是,阈值的设置不是一成不变的,需要进行监控和调整。根据系统的实际情况和业务的变化,及时调整阈值以保证系统的稳定性和性能。

以上是关于限流算法及阈值计算的简要介绍,希望对你有所帮助。限流是保护系统稳定性和可用性的重要手段,合理设置阈值是限流算法设计的关键之一。通过选择适合的限流算法和合理计算阈值,可以有效地保护系统免受异常流量冲击。

https://juejin.cn/post/7282245376425459768

ERROR 1449 (HY000): The user specified as a definer ('root'@'%') does not exist

设置 触发器的账户不见了, 导致 触发器设置的标 写操作失败了

一、MySQL错误现象:

执行创建的存储过程或者触发器报:

ERROR 1449 (HY000): The user specified as a definer ('root'@'%') does not exist

二、错误原因:

这样由于创建存储过程或者触发器时间,指定的DEFINER为'root'@'%',而在MySQL的权限表(mysql.user)中,并不存在相关的user和host:

mysql> select host,user,password from mysql.user;
+-------------------------+------+----------+
| host                    | user | password |
+-------------------------+------+----------+
| localhost               | root |          |
| 127.0.0.1               | root |          |
| ::1                     | root |          |
| localhost               |      |          |
+-------------------------+------+----------+

三、解决方案:

执行下面SQL语句,为'root'@'%'授权即可:

grant all privileges on *.* to 'root'@'%' identified by ".";
flush privileges;
 
select host,user,password from mysql.user;

执行效果:

photo_2024-03-12 20.30.07.jpeg

MySQL error 1449: The user specified as a definer does not exist
">