1.查看nginx连接数
1.1 用 netstat
/ss
查看端口连接数
netstat -anp | grep 80 | wc -l
ss -ant | grep 80 | wc -l
1.2.使用 Nginx 内置状态模块 stub_status
(最常用状态页)
在 nginx 配置里增加一个监控接口
server {
# 监听端口
listen 8080;
# 服务器名称
server_name localhost;
# 配置 Nginx 状态监控路径
location /nginx_status {
# 启用 stub_status 模块(需 Nginx 编译时支持)
stub_status on;
# 仅允许本地 IP 访问
allow 127.0.0.1;
# 拒绝其他所有 IP 访问
deny all;
}
}
1.3.使用第三方监控工具
Prometheus + Grafana:通过 nginx-exporter 收集 Nginx 连接数、请求数、响应时间等指标
Zabbix / Nagios:通过插件监控 Nginx 活动连接数
Datadog / NewRelic:云端可视化监控
1.4.通过日志分析
可以用 awk
、goaccess
等工具分析访问日志:
2.MySQL 查看连接情况
2.1.使用 SHOW PROCESSLIST
查看当前连接数统计
show status like 'Threads_connected'; -- 当前活跃连接数
show status like 'Threads_running'; -- 正在执行语句的连接数
2.2.查询 information_schema.PROCESSLIST
2.3.查看 MySQL 状态变量
2.4.使用性能模式(Performance Schema)
2.5.使用命令行工具
2.6.使用监控工具
MySQL Workbench:可实时查看连接数和状态
Percona Monitoring and Management (PMM):提供图形化连接趋势、查询性能
Zabbix / Prometheus + mysqld_exporter:自动化监控连接数、慢查询等
3.怎么自定义一个zabbix监控项
配置 Zabbix 监控项(Item)主要有几个步骤:创建主机 → 添加监控项 → 配置触发器 → 配置图表。我给你详细说明,并以 MySQL 监控为例。
1️⃣ 登录 Zabbix
打开 Zabbix Web 界面
使用管理员账号登录
2️⃣ 创建主机(Host)
配置 → 主机 → 创建主机
填写:
主机名:例如
mysql-01
可见名称:可选
群组:选择已有群组或新建(如 MySQL 服务器)
接口:填写被监控服务器 IP 和端口
Zabbix agent:默认 10050
SNMP 或 IPMI 可选
3️⃣ 添加监控项(Item)
主机页面 → 监控项 → 创建监控项
填写基本信息:
名称:监控项显示名,例如
MySQL Threads_connected
类型:
Zabbix agent(主动或被动采集)
Simple check(如 ping)
SNMP
External script / UserParameter(自定义脚本)
键值(Key):唯一标识
示例:
MySQL 线程数:
mysql.threads_connected
(需在 agent 配置里定义 UserParameter)自定义 shell:
system.run[mysql -e "SHOW STATUS LIKE 'Threads_connected';"]
类型信息(Type of information):
数值(整数/浮点)、文本、日志、布尔
更新间隔:多久采集一次,比如 60 秒
历史数据保存时间:默认 90 天
点击 添加
4️⃣ 配置触发器(Trigger)
监控项创建好后 → 触发器 → 创建触发器
填写:
名称:
MySQL 连接数过多
表达式:选择监控项 → 设置阈值
{mysql-01:mysql.threads_connected.last()}>500
表示当前线程数超过 500 就告警
设置严重等级和告警动作
5️⃣ 可选:创建图表(Graph)
主机 → 图表 → 创建图表
选择监控项,设置显示样式(折线/柱状等)
6️⃣ Zabbix Agent 自定义 MySQL 监控示例
如果使用 Zabbix agent + UserParameter:
编辑 /etc/zabbix/zabbix_agentd.d/userparameter_mysql.conf
:
UserParameter=mysql.threads_connected,mysql -uroot -e "SHOW STATUS LIKE 'Threads_connected';" | grep Threads_connected | awk '{print $2}'
UserParameter=mysql.threads_running,mysql -uroot -e "SHOW STATUS LIKE 'Threads_running';" | grep Threads_running | awk '{print $2}'
重启 agent: systemctl restart zabbix-agent
在 Zabbix Web 端用 mysql.threads_connected
创建监控项
4.DML和DDl区别
1️⃣ DML(Data Manipulation Language)数据操作语言
作用:操作数据库中的数据(表里的记录)
常用语句:
SELECT
:查询数据INSERT
:插入数据UPDATE
:更新数据DELETE
:删除数据
特点:
操作的是 表中的数据,不改变表结构
支持事务(可以
COMMIT
或ROLLBACK
)对数据库影响较小,但会修改内容
示例:
-- 插入数据 INSERT INTO users (id, name) VALUES (1, 'Alice');
-- 更新数据 UPDATE users SET name='Bob' WHERE id=1;
-- 删除数据 DELETE FROM users WHERE id=1;
-- 查询数据 SELECT * FROM users;
2️⃣ DDL(Data Definition Language)数据定义语言
作用:操作数据库结构(表、库、索引等)
常用语句:
CREATE
:创建数据库、表、索引等ALTER
:修改表结构DROP
:删除数据库、表、索引TRUNCATE
:清空表
特点:
操作的是 数据库对象和结构
通常不支持事务(执行后立即生效)
会影响数据库的结构和元数据
示例:
-- 创建表
CREATE TABLE users (
id INT PRIMARY KEY,
name VARCHAR(50)
);
-- 修改表结构 ALTER TABLE users ADD COLUMN age INT;
-- 删除表 DROP TABLE users;
-- 清空表 TRUNCATE TABLE users;
3️⃣ 总结对比
特性 | DML | DDL |
---|---|---|
操作对象 | 表中的数据 | 数据库对象/表结构 |
是否支持事务 | 支持(可回滚) | 通常不支持(立即生效) |
影响 | 数据内容 | 数据库结构 |
常用语句 | SELECT, INSERT, UPDATE, DELETE | CREATE, ALTER, DROP, TRUNCATE |
💡 面试小技巧:
可以补充
TRUNCATE
既清空表又相当于 DDL,因为它会重置表的自增 ID,立即生效且无法回滚(在大部分数据库中)强调 DML 操作是“数据层”,DDL 操作是“结构层”
5.怎么添加一个新的主机添加到zabbix-server中
1️⃣ 登录 Zabbix 前端
打开 Zabbix Web 界面,输入账号密码登录。
2️⃣ 添加主机
进入 “配置(Configuration)” → “主机(Hosts)” → “创建主机(Create host)”。
填写主机信息:
主机名称(Host name):例如
mysql-server-01
。可见名称(Visible name,可选):在监控列表中显示的名字。
群组(Groups):选择或创建一个群组,例如
Database Servers
。接口(Agent interface):
输入主机 IP 地址或 DNS 名称。
保留默认端口
10050
(Zabbix Agent 端口)。
3️⃣ 关联模板
在 模板(Templates) 中点击 “选择模板(Select)”。
常见模板:
Template OS Linux
→ Linux 系统基础监控Template DB MySQL
→ MySQL 监控
点击 添加(Add),然后保存主机。
4️⃣ 在主机上安装 Zabbix Agent
Linux 主机示例
# 安装 agent (以CentOS为例)
yum install -y zabbix-agent
# 编辑配置文件 /etc/zabbix/zabbix_agentd.conf
Server=<Zabbix Server IP> # Zabbix 服务器 IP
ServerActive=<Zabbix Server IP> # 主动检查服务器
Hostname=<主机名> # 必须与 Web 前端主机名一致
# 启动 agent
systemctl enable zabbix-agent
systemctl start zabbix-agent
Windows 主机示例
下载 Zabbix Agent 安装包。
安装时填写 Zabbix Server IP。
启动服务。
5️⃣ 验证主机连接
在 Zabbix Web 前端的 “最新数据(Latest data)” 查看数据是否正常采集。
如果数据未显示,可检查:
Agent 是否启动
防火墙是否放行
10050
端口配置的主机名是否与 Agent 中一致
6.怎么自定义一个zabbix监控项多种方法
1️⃣ 通过 Zabbix Agent 自定义
1.1 UserParameter
编辑 Zabbix Agent 配置文件
/etc/zabbix/zabbix_agentd.conf
,添加:
UserParameter=custom.mysql.connections,mysql -e "SHOW STATUS LIKE 'Threads_connected';" | awk '{print $2}'重启 Zabbix Agent: systemctl restart zabbix-agent
在 Zabbix Web 前端创建 **Item**:
- 类型(Type):Zabbix agent
- 键(Key):`custom.mysql.connections`
- 数据类型(Type of information):Numeric (unsigned)
- 单位(Units):可选,例如 `connections`
1.2 自定义脚本
编写脚本,例如
/usr/local/bin/check_disk.sh
:#!/bin/bash df / | awk 'NR==2 {print $5}' | sed 's/%//'
在 Zabbix Agent 配置中添加:UserParameter=disk.usage,/usr/local/bin/check_disk.sh
然后在 Zabbix Web 中添加对应 Item。
2️⃣ 通过 Zabbix Trapper 主动采集
Trapper 是被动接收数据的方式,由外部脚本主动发送。
示例发送命令:zabbix_sender -z <Zabbix_Server_IP> -s "mysql-server-01" -k custom.mysql.qps -o 123
在 Web 前端创建 Item:
类型(Type):Zabbix trapper
键(Key):
custom.mysql.qps
3️⃣ 通过 Zabbix External Script
将自定义脚本放到 Zabbix server 的
/usr/lib/zabbix/externalscripts/
。在 Web 前端创建 Item:
类型(Type):External check
键(Key):脚本名,例如
check_mysql_replication.sh
4️⃣ 通过 Zabbix Low-Level Discovery (LLD)
自动发现和监控多实例:
创建一个 LLD 规则,例如发现数据库实例或磁盘分区。
配置 Item prototype 来定义每个发现的实体要监控的指标。
示例:
LLD JSON 输出:
{ "data":[ {"{#DISK}":"/"}, {"{#DISK}":"/var"} ] }
自动生成磁盘使用监控项。
5️⃣ 使用 Zabbix API
通过 API 添加 Item,适合批量配置:
curl -X POST \
-H 'Content-Type: application/json' \
-d '{
"jsonrpc": "2.0",
"method": "item.create",
"params": {
"name": "Custom Connections",
"key_": "custom.mysql.connections",
"hostid": "10105",
"type": 0,
"value_type": 3
},
"auth": "YOUR_AUTH_TOKEN",
"id": 1
}' \
http://<ZABBIX_SERVER>/api_jsonrpc.php
小结
方法 | 场景 | 优点 |
---|---|---|
UserParameter | Linux Agent | 灵活,直接调用脚本或命令 |
Trapper | 脚本主动发送 | 数据主动推送,适合异步采集 |
External Script | Server 执行脚本 | 无需修改 Agent,跨平台 |
LLD | 动态发现 | 自动生成大量监控项,减轻手动工作 |
API | 自动化/批量 | 自动化部署或批量管理监控项 |
7.zabbix-proxy作用
Zabbix Proxy 是 Zabbix 监控体系中的一个中间组件,主要作用是在分布式或网络隔离环境下收集监控数据,然后再统一发送给 Zabbix Server。详细解释如下:
1️⃣ 作用概述
数据缓冲和转发
Proxy 收集被监控主机的数据,缓存到本地数据库(通常是 SQLite 或 MySQL/PostgreSQL)。
定时将数据批量发送到 Zabbix Server,减少 Server 的压力。
支持网络隔离或远程环境
对于无法直接访问 Zabbix Server 的远程站点或分支机构,可以部署 Proxy。
Proxy 与 Zabbix Server 仅需单向通信,解决防火墙或跨网络访问问题。
分布式监控
当监控主机数量巨大时,可以通过 Proxy 分担 Server 的压力。
每个 Proxy 管理一部分主机,Server 统一接收 Proxy 上报的数据。
高可用和容错
Proxy 可以缓存数据,即使短时间与 Server 失联,也不会丢失监控数据。
恢复通信后会批量上报,保证数据完整性。
2️⃣ 工作流程
监控主机 → Zabbix Agent → Zabbix Proxy → Zabbix Server → 前端展示
Agent → Proxy:Proxy 定期轮询或接收被动数据。
Proxy → Server:Proxy 将数据定期批量发送给 Server。
Server → 前端:集中存储和展示数据。
3️⃣ 使用场景
远程分支机构:Proxy 部署在远程网络内,只需允许 Proxy 与 Server 通信。
大规模集群:大量主机时,使用 Proxy 分担 Server 压力。
高可靠性要求:网络短时中断,Proxy 缓存数据避免丢失。
异地监控:监控不同网络区域,统一管理和收集数据。
4️⃣ 总结
特性 | Proxy 作用 |
---|---|
数据收集 | 收集远程主机数据,支持主动和被动模式 |
缓存 | 数据暂存本地数据库,避免丢失 |
转发 | 批量发送给 Zabbix Server |
分布式 | 减轻 Server 负载,支持远程站点监控 |
网络隔离 | Server 无法直接访问主机时,Proxy 可桥接 |
8.mysql主从延迟怎么办
MySQL 主从延迟(Replication Lag)是运维中常见的问题,通常发生在从库追不上主库写入速度。解决方法需要排查原因、优化配置和架构调整。下面给你整理一份全面指南:
1️⃣ 查看延迟情况
使用
SHOW SLAVE STATUS\G
(MySQL 5.7 及以下):Seconds_Behind_Master
显示从库落后主库的秒数。
对于 MySQL 8.0,使用:
SELECT * FROM performance_schema.replication_connection_status; SELECT * FROM performance_schema.replication_applier_status;
查看二进制日志延迟:
SHOW BINARY LOGS; SHOW MASTER STATUS;
2️⃣ 常见原因
从库硬件瓶颈:CPU、内存或磁盘 I/O 不足,导致 SQL 执行慢。
主库写入过快:写入量超过从库执行能力。
慢查询或事务大:大事务会阻塞从库应用 binlog。
网络延迟:主从位于不同数据中心或跨网络,传输慢。
配置问题:
sync_binlog
,innodb_flush_log_at_trx_commit
,slave_parallel_workers
未优化。
3️⃣ 解决思路
(1)优化从库性能
增加 CPU、内存、IOPS。
调整 InnoDB 参数:
innodb_buffer_pool_size = 70-80% of memory innodb_flush_log_at_trx_commit = 2 # 可以降低同步压力
开启并行复制:
slave_parallel_workers = 4 # MySQL 5.7+ slave_parallel_type = LOGICAL_CLOCK
(2)优化 SQL/事务
避免大事务一次提交。
对慢查询添加索引,优化执行计划。
避免频繁更新全表或批量删除大数据。
(3)优化主库写入
批量写入分批提交。
减少不必要的 binlog 写入。
(4)网络优化
主从部署在同一机房或低延迟网络。
对跨机房同步,可以考虑异步或半同步复制。
(5)临时应急措施
停止主库写入一段时间,让从库追上。
调整
slave_skip_errors
(慎用)跳过特定错误。
4️⃣ 高级方案
异步/半同步复制:半同步:主库等待至少一个从库确认,减少延迟带来的风险。
GTID 复制:更方便故障切换和追踪延迟。
中间缓存:对高并发写入场景,使用 Redis 等缓存缓冲,减轻主库压力。
9.mysql怎么做的读写分离
MySQL 做读写分离通常有几个实现方式,可以用面试口语化的方式总结:
主从复制(Master-Slave)
主库负责写操作,从库负责读操作,通过 binlog 同步数据。
应用层或者中间件负责把写请求发到主库,读请求发到从库。
中间件代理
使用 ProxySQL、MaxScale、Mycat 等中间件做读写路由。
中间件感知主从角色,把写请求发主库,读请求发从库。
应用层控制
在代码里直接区分读写逻辑,例如写操作调用
master
数据源,读操作调用slave
数据源。
注意点
要考虑 主从延迟,避免读取到旧数据。
写操作必须严格走主库,避免数据冲突。
10.你们公司有多少台mysql
“我们公司 MySQL 做读写分离主要用 Mycat。主库负责写,从库负责读。Mycat 做中间件代理,它会把写请求自动路由到主库,读请求发到从库。这样可以减轻主库压力,同时提升查询性能。平时也会关注主从延迟,确保读到的数据是最新的。”
可以用更专业、更自然的“加强版”口语化回答:
“我们公司大概有 20~30 台 MySQL,主从架构,一主多从,主库负责写操作,从库主要做读请求分流和备份容灾。平时会结合 监控和告警,实时关注主从延迟和性能指标,一旦发现异常可以快速定位和处理,保证业务平稳运行。同时会定期做 备份和演练,确保容灾方案可用。”
这版强调了监控、容灾和运维能力,听起来更有水平。
我可以帮你压缩成面试中 25~30 秒内流畅讲完的口语版。
11.几台redis实例
“我们公司 Redis 大概有 10 来台实例,分布在不同环境和业务线上。有主从结构,部分集群模式,用来做缓存、队列和会话存储。平时会关注内存使用、命中率和持久化状态,确保高可用和性能。”
12.你写过哪些技术文档
“我在运维工作中写过多种技术文档,主要包括几个方面:
服务器和数据库部署手册:比如 Linux 服务器安装配置流程、MySQL/MongoDB 集群搭建、版本升级步骤等。
运维流程文档:比如数据库备份和恢复流程、服务器巡检流程、应急故障处理流程。
监控和告警说明:包括 Zabbix/Prometheus 监控项配置、告警触发条件、处理方法,以及仪表盘的使用说明。
自动化脚本文档:我写过运维自动化脚本的使用说明,包括参数说明、执行步骤、注意事项。
故障排查指南:针对常见问题,比如 MySQL 主从延迟、服务挂掉、磁盘满等,整理了排查步骤和解决方案。
这些文档的目标是让团队成员能快速上手,也方便新人理解系统架构,同时保证遇到问题时有标准流程可参考。”
“我写过的技术文档主要包括:服务器部署和配置手册、数据库备份恢复流程、监控和告警配置说明、自动化脚本使用说明,以及一些故障排查指南。主要目的是让团队成员能快速上手,也方便排查问题。”
“我平时写过服务器和数据库部署手册、运维流程文档、监控和告警规则说明、自动化运维脚本使用手册,以及常见故障排查和性能优化指南。写这些文档的时候,我不仅记录操作步骤,还会结合架构设计、依赖关系、注意事项和最佳实践,让团队成员能够快速上手、标准化执行,同时方便新人理解整个系统的架构和运维逻辑,也便于后续优化和故障追踪。”
13.你运维工作待了3年了,平时工作内容是什么
回答这个问题时,可以按 日常工作 / 项目经验 / 工具使用 来拆分,尽量具体且体现价值:
示例回答结构
1️⃣ 日常运维工作
服务器维护:Linux 系统管理、用户权限、磁盘和网络监控、日志排查。
数据库运维:MySQL / Redis / MongoDB 的安装、配置、备份恢复、性能调优。
监控告警:配置 Zabbix / Prometheus / Grafana 监控项,处理告警。
自动化脚本:用 Shell / Python / Ansible / Terraform 自动化日常运维任务。
2️⃣ 项目经验
数据库高可用:部署 MySQL 主从/主主、Redis 哨兵、ProxySQL、MHA 等。
容量规划与优化:定期评估服务器负载、优化 SQL 查询、调整缓存策略。
故障处理:处理系统宕机、服务不可用、数据库延迟、磁盘满等紧急情况。
3️⃣ 工具和技术栈
监控:Zabbix、Prometheus、Grafana
自动化:Ansible、Shell、Python
日志与排错:ELK、journalctl、dmesg
容器化与编排:Docker、Kubernetes 基础运维
4️⃣ 总结亮点
“整体上,我的工作主要是保证系统和数据库稳定可靠,通过自动化和监控提高效率,同时参与部署高可用架构和故障排查。”
✅ 示例回答(口语化)
“我主要负责 Linux 服务器和数据库的日常运维,包括 MySQL 主从部署、备份恢复、性能调优,以及 Redis、缓存和应用服务的维护。我也会做监控告警配置(Zabbix/Grafana)、自动化脚本来提高工作效率。在日常工作中,我经常处理故障排查、系统优化,确保服务稳定可靠,同时参与一些高可用架构的部署和优化。”
14.家常话:你都是怎么学习运维的怎么回答
面试官问这个问题,其实想了解 你的主动性、学习方法、实践能力。回答可以从 学习渠道 + 实践经验 + 项目驱动 三方面来组织。这里有一个精简、有面试亮点的回答示例:
1️⃣ 学习渠道
书籍和文档:系统学习 Linux、网络、数据库、容器、监控等知识
例如:《鸟哥的Linux私房菜》《高性能MySQL》《Kubernetes权威指南》
官方文档和社区:跟随技术更新、学习最佳实践
MySQL 官方文档、Nginx、Zabbix、Prometheus 文档等
在线课程和教程:补充短板或学习新技术
B站/慕课网/Pluralsight/Kubernetes 官方教程
2️⃣ 实践经验
动手操作:在虚拟机、云服务器、容器里部署服务
比如:自己搭建 MySQL 主从复制,做高可用实验
小型项目练习:模拟生产环境问题
写监控告警脚本、搭建日志收集、做自动化运维
总结文档:记录遇到的问题和解决方案,形成自己的知识库
3️⃣ 项目驱动
公司实际项目:参与真实运维任务
比如:MySQL 集群维护、Nginx 高并发调优、部署 CI/CD 流程
问题导向学习:遇到问题就查资料、做实验
遇到性能瓶颈,先查监控,再调参数,再验证
✅ 示例回答(口语化)
“我平时主要通过看书、官方文档和在线课程学习运维理论知识,然后会在虚拟机或者云服务器上动手搭建服务,比如 MySQL 高可用集群、Nginx 负载均衡等。遇到问题,我会查官方文档和社区解决方案,调试并总结经验。此外,我也会把自己的操作步骤和问题记录下来,形成个人知识库,方便复盘和提升。”
示例回答
“我学习运维主要通过三种方式:
理论学习:阅读书籍、官方文档和在线课程,比如《鸟哥的Linux私房菜》、《高性能MySQL》,以及 Kubernetes、Zabbix 官方教程。
动手实践:在虚拟机或云服务器上搭建环境,例如 MySQL 主从复制、高可用集群,Nginx 负载均衡等,通过实际操作理解原理。
项目驱动:在公司项目中遇到问题,会查文档、社区和源码,解决问题后总结经验形成知识库,提升解决问题的能力。”