MYSQL运维常用SQL

以下是一些MySQL运维中常用的SQL语句,涵盖性能监控、故障排查、空间管理、权限管理等关键场景,并附详细说明和优化建议:


1. 系统状态监控

1.1 查看当前连接数
sql 复制代码
SHOW STATUS LIKE 'Threads_connected';  -- 当前连接数
SHOW VARIABLES LIKE 'max_connections'; -- 最大允许连接数

说明 :检查连接数是否接近max_connections,避免超限导致新连接被拒绝。

1.2 查看活跃进程
sql 复制代码
SHOW FULL PROCESSLIST; -- 显示所有线程
SELECT * FROM information_schema.PROCESSLIST WHERE COMMAND != 'Sleep'; -- 过滤休眠线程

优化建议 :长时间处于"Sending data""Locked"状态的进程需重点关注。


2. 性能分析

2.1 慢查询分析
sql 复制代码
-- 查看慢查询配置
SHOW VARIABLES LIKE 'slow_query_log%';
SHOW VARIABLES LIKE 'long_query_time';

-- 启用慢查询日志(需在my.cnf永久配置)
SET GLOBAL slow_query_log = 'ON'; 
SET GLOBAL long_query_time = 2; -- 阈值设为2秒

-- 分析慢日志(需启用log_queries_not_using_indexes)
SELECT * FROM mysql.slow_log WHERE sql_text LIKE '%SELECT%';
2.2 执行计划分析
sql 复制代码
EXPLAIN FORMAT=JSON 
SELECT * FROM orders WHERE user_id = 100 AND status = 'paid';

关键指标 :检查possible_keyskey(实际用到的索引)、rows(扫描行数)、Extra(是否出现Using filesortUsing temporary)。


3. 存储空间管理

3.1 查看表空间
sql 复制代码
-- 按库统计大小
SELECT TABLE_SCHEMA, 
       SUM(DATA_LENGTH)/1024/1024 AS 'Data_MB',
       SUM(INDEX_LENGTH)/1024/1024 AS 'Index_MB'
FROM information_schema.TABLES
GROUP BY TABLE_SCHEMA;

-- 查看单表碎片率
SELECT TABLE_NAME,
       (DATA_FREE / (DATA_LENGTH + INDEX_LENGTH)) AS frag_ratio
FROM information_schema.TABLES 
WHERE TABLE_SCHEMA = 'your_db' AND DATA_FREE > 0;

优化建议 :碎片率超过30%时建议执行OPTIMIZE TABLE your_table(注意锁表风险)。


4. 锁与事务监控

4.1 查看当前锁
sql 复制代码
-- 5.7+版本查看锁信息
SELECT * FROM performance_schema.data_locks;
SELECT * FROM information_schema.INNODB_TRX; -- 活跃事务
4.2 终止阻塞事务
sql 复制代码
-- 查找阻塞源
SELECT BLOCKING_TRX_ID, COUNT(*) 
FROM performance_schema.data_lock_waits 
GROUP BY BLOCKING_TRX_ID;

-- 终止指定线程
KILL CONNECTION [thread_id];

5. 用户与权限管理

5.1 权限审计
sql 复制代码
-- 查看用户权限
SHOW GRANTS FOR 'user'@'host';

-- 查询所有具有SUPER权限的用户
SELECT * FROM mysql.user WHERE Super_priv = 'Y';
5.2 密码策略
sql 复制代码
-- 密码过期策略
ALTER USER 'user'@'host' PASSWORD EXPIRE INTERVAL 90 DAY;

6. 备份与恢复

6.1 逻辑备份
bash 复制代码
# Shell命令(非SQL)
mysqldump -u root -p --single-transaction --routines your_db > backup.sql

关键参数--single-transaction(InnoDB一致性备份)、--routines(包含存储过程)。


7. 高级运维技巧

7.1 动态修改配置(无需重启)
sql 复制代码
SET GLOBAL innodb_flush_log_at_trx_commit = 2; -- 调整刷盘策略(慎用!)
SET PERSIST max_connections = 1000; -- 8.0+永久生效
7.2 快速重建大表
sql 复制代码
-- 避免直接ALTER导致锁表
CREATE TABLE new_table LIKE old_table;
ALTER TABLE new_table ENGINE=InnoDB, KEY_BLOCK_SIZE=8;
INSERT INTO new_table SELECT * FROM old_table; -- 分批插入
RENAME TABLE old_table TO old_table_bak, new_table TO old_table;

优化建议总结

  1. 索引优化 :定期使用sys.schema_unused_indexes查找无用索引。
  2. 缓存调优 :监控Query_cache_hits,低命中率时考虑关闭查询缓存。
  3. 连接池管理 :合理配置wait_timeoutmax_connections
  4. 监控工具:集成Prometheus + Grafana实现实时监控。

注意:生产环境操作前务必在测试环境验证,部分操作(如锁表、KILL)需在业务低峰期执行。

相关推荐
学习路上_write3 分钟前
Linux黑马命令学习
linux·运维·服务器
Android系统攻城狮27 分钟前
Linux Gstreamer深度解析之gst_audio_channel_reorder_map调用流程与实战(十八)
linux·运维·服务器·音视频进阶·gstreamer音视频进阶
新时代牛马1 小时前
docker run 起不来?从dockerd、containerd 到runc 一条线讲透
运维·docker·容器
JavaPub-rodert1 小时前
Docker 安装 MySQL 完整教程:从零部署数据库,到生产环境持久化配置
数据库·mysql·docker
TomEval1 小时前
【App 自动化】14 - App 自动化基础与环境
运维·自动化
隔窗听雨眠1 小时前
MySQL整库迁移至KaiwuDB完全指南:从数据类型映射到生产切换的系统性实践
数据库·mysql
新时代牛马1 小时前
Linux 防火墙:nftables 与iptables 兼容层
linux·运维·服务器
xhbh6661 小时前
中小企业 Redis 运维,如何安全归档 RDB、AOF 备份文件?
运维·数据库·缓存·数据备份·文件备份·同步备份·号码备份
是逍遥子没错1 小时前
一个斜杠,击穿整座网关:API网关路径前缀绕过认证实战
运维·服务器·web安全·网络安全·渗透测试·系统安全
2301_32241428042 小时前
活力孕康复APP 47737- 原创(免费领源码+部署教程+开发环境)
java·vue.js·spring boot·mysql·微信小程序·idea·微信开发者工具