说明:MySQL管理与运维涉及数据库的日常监控、备份恢复、日志管理、性能调优、复制维护等方面。本指南涵盖 DBA 日常工作中最常用的运维命令,附详细语法和实用示例。
一、监控与诊断命令
1.1 SHOW STATUS:服务器状态监控
SHOW STATUS 用于查看 MySQL 服务器的运行状态变量,这些变量是服务器从启动开始累计的计数器,而非瞬时值。
语法:
-- 查看所有会话级别状态变量
SHOW STATUS;
-- 查看全局级别状态变量(推荐使用)
SHOW GLOBAL STATUS;
-- 使用 LIKE 模式过滤
SHOW GLOBAL STATUS LIKE 'Threads%';
SHOW GLOBAL STATUS LIKE 'Innodb_buffer_pool%';
示例:
-- 查看连接数
SHOW GLOBAL STATUS LIKE 'Threads_connected';
-- 查看服务器运行时间(秒)
SHOW GLOBAL STATUS LIKE 'Uptime';
-- 查看总查询次数
SHOW GLOBAL STATUS LIKE 'Queries';
-- 查看 InnoDB 缓冲池相关指标
SHOW GLOBAL STATUS LIKE 'Innodb_buffer_pool_read%';
常用监控指标:
| 指标 | 说明 | 判断建议 |
|---|---|---|
Threads_connected | 当前打开的连接数 | 接近 max_connections 时需扩容 |
Threads_running | 当前正在执行的线程数 | 过高说明并发压力大 |
Uptime | 服务器运行时间(秒) | 可评估稳定性 |
Queries | 从启动至今的总查询次数 | 结合 Uptime 计算 QPS |
Slow_queries | 慢查询总数 | 与阈值比较判断慢查询配置 |
Innodb_buffer_pool_read_requests | 逻辑读请求次数 | — |
Innodb_buffer_pool_reads | 物理读次数 | 物理读比例越低越好 |
Handler_read_rnd_next | 全表扫描时读下一行的次数 | 数值过大说明存在全表扫描 |
重置会话计数器:
FLUSH STATUS; -- 将会话级别计数器清零
-- 执行待分析查询
SELECT * FROM large_table WHERE condition;
-- 查看相关计数器
SHOW STATUS WHERE Variable_name LIKE 'Handler%';
执行后可通过 Handler_read_rnd_next 等指标分析查询是否执行了全表扫描。
1.2 SHOW VARIABLES:查看配置参数
语法:
SHOW VARIABLES;
SHOW GLOBAL VARIABLES;
SHOW VARIABLES LIKE 'max_connections';
SHOW GLOBAL VARIABLES LIKE 'innodb%';
示例:
-- 查看最大连接数
SHOW VARIABLES LIKE 'max_connections';
-- 查看缓冲池大小
SHOW VARIABLES LIKE 'innodb_buffer_pool_size';
-- 查看所有与超时相关的配置
SHOW VARIABLES LIKE '%timeout%';
1.3 SHOW PROCESSLIST:查看当前连接和查询
语法:
SHOW PROCESSLIST;
SHOW FULL PROCESSLIST; -- 显示完整 SQL 语句
示例:
-- 查看所有正在运行的查询
SHOW FULL PROCESSLIST;
-- 在终端中自动刷新(Linux 命令行)
mysqladmin -u root -p processlist
诊断思路:通过 Time 列查看执行时长,通过 State 列(如 Locked、Copying to tmp table)判断异常状态。
终止长时间运行的查询:
-- 先找到连接 ID(Id 列)
SHOW PROCESSLIST;
-- 终止指定连接
KILL CONNECTION 123; -- 礼貌关闭连接
KILL QUERY 123; -- 仅终止当前查询,不关闭连接
1.4 SHOW ENGINE:查看存储引擎状态
语法:
SHOW ENGINE INNODB STATUS\G
说明:该命令输出 InnoDB 存储引擎的详细运行状态,包括事务列表、锁信息、缓冲池统计、I/O 活动等。
示例:
-- 查看 InnoDB 状态
SHOW ENGINE INNODB STATUS\G
-- 查看事务信息(较简洁的替代方式)
SELECT * FROM information_schema.INNODB_TRX;
1.5 EXPLAIN:分析查询执行计划
语法:
EXPLAIN SELECT 查询语句;
EXPLAIN FORMAT=JSON SELECT 查询语句; -- JSON 格式输出
示例:
-- 基本用法
EXPLAIN SELECT * FROM users WHERE age > 30;
-- 分析多表连接查询
EXPLAIN SELECT u.name, o.order_id
FROM users u
INNER JOIN orders o ON u.id = o.user_id
WHERE u.status = 'active';
EXPLAIN 关键字段解读:
| 字段 | 含义 | 优化建议 |
|---|---|---|
type | 访问类型(ALL → index → range → ref → eq_ref → const → system,从左到右性能提升) | 应避免 ALL(全表扫描) |
possible_keys | 可能使用的索引 | — |
key | 实际使用的索引 | 若为 NULL,需考虑添加索引 |
rows | 预估扫描行数 | 数值越小越好 |
Extra | 额外信息(如 Using filesort、Using temporary) | 出现 Using filesort 或 Using temporary 时需优化查询或索引 |
1.6 Performance Schema:内置性能监控框架
Performance Schema 是 MySQL 原生的性能监控框架,用于收集数据库运行时的低级指标(如 SQL 执行、锁等待等)。
启用 Performance Schema(需 SUPER 权限):
# 在 my.cnf 中添加
performance_schema = ON
示例查询:
-- 查看当前活跃连接及执行的查询
SELECT * FROM performance_schema.events_statements_current;
-- 统计慢查询 TOP10(按总执行时间排序)
SELECT DIGEST_TEXT, COUNT_STAR, SUM_TIMER_WAIT / 1000000000000 AS total_sec
FROM performance_schema.events_statements_summary_by_digest
ORDER BY SUM_TIMER_WAIT DESC
LIMIT 10;
-- 查看全局锁等待时间
SELECT * FROM performance_schema.events_waits_summary_global_by_event_name;
1.7 SHOW PROFILE:单条 SQL 性能剖析
语法:
SET profiling = 1; -- 启用 profiling
SELECT * FROM users WHERE age > 30;
SHOW PROFILES; -- 显示已记录的查询列表
SHOW PROFILE FOR QUERY 1; -- 查看指定查询的详细剖析
SET profiling = 0; -- 关闭 profiling
MySQL 8.0 中
SHOW PROFILE标记为 deprecated,推荐使用 Performance Schema 作为替代。
1.8 mysqladmin:轻量级命令行工具
mysqladmin 是 MySQL 自带的命令行管理工具,可在操作系统终端直接运行。
常用命令:
# 查看服务器状态摘要
mysqladmin -u root -p status
# 查看扩展状态(每分钟刷新)
mysqladmin -u root -p extended-status
# 查看服务器版本
mysqladmin -u root -p version
# 查看当前连接数
mysqladmin -u root -p processlist
# 检查服务器是否存活
mysqladmin -u root -p ping
# 关闭 MySQL 服务
mysqladmin -u root -p shutdown
# 重新加载权限表
mysqladmin -u root -p reload
# 刷新所有日志(日志切换)
mysqladmin -u root -p flush-logs
二、备份与恢复命令
2.1 mysqldump:逻辑备份
mysqldump 是 MySQL 官方提供的逻辑备份工具,将数据库导出为 SQL 语句。
语法:
mysqldump -u 用户名 -p [选项] [数据库名] [表名] > 备份文件.sql
示例:
# 备份单个数据库
mysqldump -u root -p mydb > mydb_backup.sql
# 备份多个表
mysqldump -u root -p mydb users orders > users_orders_backup.sql
# 备份所有数据库
mysqldump -u root -p --all-databases > all_databases_backup.sql
# 仅备份表结构(不备份数据)
mysqldump -u root -p --no-data mydb > mydb_structure.sql
# 仅备份数据(不备份表结构)
mysqldump -u root -p --no-create-info mydb > mydb_data.sql
# 备份时包含存储过程和事件
mysqldump -u root -p --routines --events mydb > mydb_full.sql
# 备份时使用事务保证一致性
mysqldump -u root -p --single-transaction mydb > mydb_consistent.sql
# 备份时锁表(适用于 MyISAM)
mysqldump -u root -p --lock-all-tables mydb > mydb_locked.sql
常用 mysqldump 选项:
| 选项 | 说明 |
|---|---|
--single-transaction | 使用事务保证一致性,适用于 InnoDB |
--lock-all-tables | 锁所有表,适用于 MyISAM |
--no-data | 仅导出表结构 |
--no-create-info | 仅导出数据 |
--routines | 包含存储过程和函数 |
--events | 包含事件调度器 |
--where='condition' | 按条件导出部分数据 |
--compress | 传输时压缩数据 |
--master-data[=1/2] | 在备份中添加 CHANGE MASTER |
2.2 数据恢复:mysql 命令
语法:
mysql -u 用户名 -p [数据库名] < 备份文件.sql
示例:
# 恢复整个数据库(备份文件中包含 CREATE DATABASE)
mysql -u root -p < all_databases_backup.sql
# 先创建数据库再恢复
mysql -u root -p -e "CREATE DATABASE newdb;"
mysql -u root -p newdb < mydb_backup.sql
# 恢复时显示执行进度
pv backup.sql | mysql -u root -p mydb
在 MySQL 客户端内恢复:
USE target_db;
SOURCE /path/to/backup.sql;
2.3 物理备份工具简介
| 工具 | 说明 | 特点 |
|---|---|---|
| Percona XtraBackup | 开源物理备份工具 | 支持热备,不锁表,适用于 InnoDB |
| MySQL Enterprise Backup | 官方企业版备份工具 | 支持增量备份、压缩、加密 |
| cp / rsync | 直接复制数据文件 | 需停止服务,适用于冷备 |
XtraBackup 基本用法:
# 全量备份
xtrabackup --backup --target-dir=/backup/full --datadir=/var/lib/mysql
# 准备备份(应用重做日志)
xtrabackup --prepare --target-dir=/backup/full
# 恢复备份
xtrabackup --copy-back --target-dir=/backup/full
2.4 表维护操作
检查表:
CHECK TABLE 表名;
CHECK TABLE 表名 QUICK; -- 快速检查
修复表:
REPAIR TABLE 表名;
REPAIR TABLE 表名 QUICK;
优化表:
OPTIMIZE TABLE 表名;
分析表(更新索引统计信息):
ANALYZE TABLE 表名;
三、日志管理命令
3.1 错误日志(Error Log)
错误日志记录 MySQL 启动、运行和关闭过程中的错误信息、警告信息,是问题排查的首要依据。
查看错误日志路径:
SHOW VARIABLES LIKE 'log_error';
查看日志内容(在操作系统终端):
tail -f /var/log/mysql/error.log
3.2 二进制日志(Binary Log)
二进制日志记录所有数据变更操作,用于数据恢复和主从复制。
查看二进制日志状态
-- 查看二进制日志是否启用
SHOW VARIABLES LIKE 'log_bin';
-- 查看所有二进制日志文件列表
SHOW BINARY LOGS;
SHOW MASTER LOGS; -- 与 SHOW BINARY LOGS 等价
查看主库当前状态
SHOW MASTER STATUS;
输出示例:
+------------------+----------+--------------+------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+------------------+----------+--------------+------------------+
| mysql-bin.000005 | 120 | | |
+------------------+----------+--------------+------------------+
清理二进制日志
-- 删除指定文件之前的所有日志
PURGE BINARY LOGS TO 'mysql-bin.000010';
-- 删除指定时间之前的所有日志
PURGE BINARY LOGS BEFORE '2026-01-01 00:00:00';
-- 删除所有二进制日志,重置编号为 000001
RESET MASTER;
PURGE BINARY LOGS 在从库正在复制时也可安全执行,但需确保目标日志文件未被从库读取。
查看二进制日志内容
使用 mysqlbinlog 命令行工具:
# 查看日志内容
mysqlbinlog /var/lib/mysql/mysql-bin.000001
# 按时间范围查看
mysqlbinlog --start-datetime="2026-01-01 00:00:00" \
--stop-datetime="2026-01-02 00:00:00" \
mysql-bin.000001
# 按位置范围查看
mysqlbinlog --start-position=120 --stop-position=500 mysql-bin.000001
# 重放日志到数据库
mysqlbinlog mysql-bin.000001 | mysql -u root -p
自动清理配置
-- 查看当前过期天数(MySQL 5.7)
SHOW VARIABLES LIKE 'expire_logs_days';
-- 查看当前过期秒数(MySQL 8.0)
SHOW VARIABLES LIKE 'binlog_expire_logs_seconds';
设置自动清理(推荐在 my.cnf 中配置):
# MySQL 5.7
expire_logs_days = 7
# MySQL 8.0
binlog_expire_logs_seconds = 604800 # 7天 = 604800秒
3.3 慢查询日志(Slow Query Log)
慢查询日志用于记录执行时间超过指定阈值的 SQL 语句,是性能优化的核心工具。
启用慢查询日志
配置文件方式(持久化):
[mysqld]
slow_query_log = 1
slow_query_log_file = /var/log/mysql/slow-query.log
long_query_time = 2
log_queries_not_using_indexes = 1
动态设置方式(即时生效):
SET GLOBAL slow_query_log = ON;
SET GLOBAL slow_query_log_file = '/var/log/mysql/slow-query.log';
SET GLOBAL long_query_time = 2;
SET GLOBAL log_queries_not_using_indexes = ON;
查看慢查询日志配置
SHOW VARIABLES LIKE 'slow_query_log%';
SHOW VARIABLES LIKE 'long_query_time';
SHOW VARIABLES LIKE 'log_queries_not_using_indexes';
分析慢查询日志
使用 mysqldumpslow(MySQL 自带):
# 按执行时间排序,显示前10条
mysqldumpslow -s t -t 10 /var/log/mysql/slow-query.log
# 按平均执行时间排序
mysqldumpslow -s at /var/log/mysql/slow-query.log
# 按扫描行数排序
mysqldumpslow -s r /var/log/mysql/slow-query.log
使用 pt-query-digest(Percona Toolkit):
pt-query-digest /var/log/mysql/slow-query.log > slow_report.txt
3.4 通用查询日志(General Query Log)
记录所有客户端连接和执行的 SQL 语句。
启用:
SET GLOBAL general_log = ON;
SET GLOBAL general_log_file = '/var/log/mysql/general.log';
3.5 日志文件刷新
-- 刷新所有日志(关闭并重新打开所有日志文件)
FLUSH LOGS;
-- 刷新二进制日志(产生新的 binlog 文件)
FLUSH BINARY LOGS;
-- 刷新错误日志
FLUSH ERROR LOGS;
四、复制管理命令
4.1 查看复制状态
在主库执行(查看所有连接到主库的 slave):
SHOW SLAVE HOSTS;
在从库执行(查看从库复制状态):
SHOW SLAVE STATUS\G
关键输出字段:
| 字段 | 含义 |
|---|---|
Slave_IO_Running | IO 线程状态,应为 Yes |
Slave_SQL_Running | SQL 线程状态,应为 Yes |
Master_Host | 主库地址 |
Master_Log_File | 主库当前读取的 binlog 文件 |
Read_Master_Log_Pos | 已读取到的位置 |
Relay_Log_File | 中继日志文件名 |
Relay_Log_Pos | 中继日志位置 |
Seconds_Behind_Master | 从库延迟秒数 |
Last_IO_Error | IO 线程最后错误 |
Last_SQL_Error | SQL 线程最后错误 |
4.2 配置复制(CHANGE MASTER TO)
语法(MySQL 8.0.23 之前):
CHANGE MASTER TO
MASTER_HOST = 'master_host',
MASTER_USER = 'replication_user',
MASTER_PASSWORD = 'password',
MASTER_LOG_FILE = 'mysql-bin.000001',
MASTER_LOG_POS = 120;
MySQL 8.0.23 之后的语法:
CHANGE REPLICATION SOURCE TO
SOURCE_HOST = 'master_host',
SOURCE_USER = 'replication_user',
SOURCE_PASSWORD = 'password',
SOURCE_LOG_FILE = 'mysql-bin.000001',
SOURCE_LOG_POS = 120;
4.3 启动和停止复制
启动复制:
START SLAVE;
-- 或者仅启动特定线程
START SLAVE IO_THREAD; -- 仅启动 IO 线程
START SLAVE SQL_THREAD; -- 仅启动 SQL 线程
停止复制:
STOP SLAVE;
STOP SLAVE IO_THREAD;
STOP SLAVE SQL_THREAD;
4.4 重置复制
-- 重置从库(删除中继日志和复制状态,需先停止 SLAVE)
RESET SLAVE;
-- 重置主库(删除所有二进制日志,重新开始)
RESET MASTER;
4.5 跳过复制错误
-- 跳过当前复制错误(风险操作,会丢失数据一致性)
SET GLOBAL sql_slave_skip_counter = 1;
START SLAVE;
-- 或设置 SLAVE 自动跳过错误(不推荐生产环境)
CHANGE MASTER TO MASTER_HOST='...', MASTER_LOG_POS=xxx;
五、服务器维护命令
5.1 启停 MySQL 服务
Linux(systemd):
sudo systemctl start mysql
sudo systemctl stop mysql
sudo systemctl restart mysql
sudo systemctl status mysql
Linux(SysV init):
sudo service mysql start
sudo service mysql stop
sudo service mysql restart
Windows:
net start MySQL
net stop MySQL
5.2 检查服务器状态
-- 查看服务器版本
SELECT VERSION();
-- 查看当前数据库名
SELECT DATABASE();
-- 查看当前用户
SELECT USER();
SELECT CURRENT_USER();
-- 查看服务器所有状态变量
SHOW STATUS;
-- 查看服务器所有系统变量
SHOW VARIABLES;
5.3 连接管理
-- 查看最大连接数配置
SHOW VARIABLES LIKE 'max_connections';
-- 查看当前连接数
SHOW STATUS LIKE 'Threads_connected';
-- 查看连接使用率峰值
SHOW STATUS LIKE 'Max_used_connections';
5.4 存储引擎管理
-- 查看所有支持的存储引擎
SHOW ENGINES;
-- 查看默认存储引擎
SHOW VARIABLES LIKE 'default_storage_engine';
-- 查看表的存储引擎
SHOW TABLE STATUS LIKE 'users';
SELECT ENGINE FROM information_schema.tables WHERE table_name = 'users';
5.5 字符集管理
-- 查看所有可用的字符集
SHOW CHARACTER SET;
-- 查看所有可用的排序规则
SHOW COLLATION;
-- 查看当前字符集设置
SHOW VARIABLES LIKE 'character_set%';
SHOW VARIABLES LIKE 'collation%';
-- 设置客户端字符集
SET NAMES utf8mb4;
5.6 权限刷新
-- 重新加载权限表,使用 GRANT/REVOKE 后通常无需手动执行
FLUSH PRIVILEGES;
5.7 表缓存刷新
-- 关闭所有打开的表
FLUSH TABLES;
-- 关闭指定表并重新打开
FLUSH TABLES users, orders;
-- 清空查询缓存(MySQL 5.7)
FLUSH QUERY CACHE;
-- 关闭所有表并清空表缓存
FLUSH TABLES WITH READ LOCK; -- 全局读锁(只读模式)
UNLOCK TABLES; -- 释放锁
5.8 主机缓存刷新
-- 清空主机缓存(用于解决更改主机名后的连接问题)
FLUSH HOSTS;
六、配置文件(my.cnf)管理
6.1 常用配置文件路径
| 系统 | 常见路径 |
|---|---|
| Linux(RPM 安装) | /etc/my.cnf |
| Linux(Debian/Ubuntu) | /etc/mysql/my.cnf 或 /etc/mysql/mysql.conf.d/mysqld.cnf |
| Windows | C:\ProgramData\MySQL\MySQL Server X.Y\my.ini |
| macOS(Homebrew) | /usr/local/etc/my.cnf |
6.2 查看当前配置
-- 查看所有配置变量
SHOW VARIABLES;
-- 查看特定分组配置
SHOW VARIABLES LIKE 'innodb%';
SHOW VARIABLES LIKE 'log%';
6.3 核心配置参数示例
[mysqld]
# 基础配置
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
port=3306
user=mysql
# 字符集配置
character-set-server=utf8mb4
collation-server=utf8mb4_unicode_ci
# 内存配置(以 16GB 内存服务器为例)
innodb_buffer_pool_size = 8G # 建议物理内存的 50%-75%
innodb_log_file_size = 1G
innodb_log_buffer_size = 16M
query_cache_type = 0 # MySQL 8.0 已移除查询缓存
tmp_table_size = 64M
max_heap_table_size = 64M
sort_buffer_size = 4M
join_buffer_size = 4M
# 连接配置
max_connections = 500
max_connect_errors = 100000
connect_timeout = 10
wait_timeout = 28800
interactive_timeout = 28800
# InnoDB 配置
innodb_flush_log_at_trx_commit = 1 # 最大安全性
innodb_flush_method = O_DIRECT
innodb_file_per_table = 1
innodb_autoinc_lock_mode = 2
# 日志配置
log_error = /var/log/mysql/error.log
slow_query_log = 1
slow_query_log_file = /var/log/mysql/slow.log
long_query_time = 2
log_queries_not_using_indexes = 1
# 二进制日志
log_bin = /var/log/mysql/mysql-bin.log
binlog_format = ROW
expire_logs_days = 7
max_binlog_size = 1G
binlog_cache_size = 1M
# 其他
sql_mode = STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION
performance_schema = ON
6.4 配置文件验证
# 验证 my.cnf 语法
mysqld --verbose --help | grep -A 1 "Default options"
# 检查配置是否生效
mysqladmin -u root -p variables
七、性能调优辅助工具
7.1 MySQLTuner:一键式优化建议
# 下载运行
wget http://mysqltuner.pl -O mysqltuner.pl
chmod +x mysqltuner.pl
./mysqltuner.pl --user root --ask-pass
输出内容包含内存使用状态、存储引擎配置、查询缓存建议等,适合快速获取优化方向。
7.2 Percona Toolkit:专业工具箱
| 工具 | 用途 |
|---|---|
pt-query-digest | 分析慢查询日志 |
pt-table-checksum | 检查主从数据一致性 |
pt-table-sync | 修复主从数据不一致 |
pt-online-schema-change | 在线修改表结构(不锁表) |
pt-duplicate-key-checker | 查找重复冗余索引 |
pt-index-usage | 分析索引使用情况 |
pt-heartbeat | 监控主从复制延迟 |
pt-kill | 自动杀死长时间运行的查询 |
示例:
# 分析慢查询日志
pt-query-digest /var/log/mysql/slow.log > report.txt
# 在线修改表结构(添加列,不锁表)
pt-online-schema-change --alter "ADD COLUMN c1 INT" D=test,t=users
7.3 实时监控工具
# Innotop - InnoDB 实时监控
innotop -u root -p
# Mytop - 类似 top 的 MySQL 监控
mytop --prompt
八、常用运维 SQL 脚本
8.1 查看数据库大小
SELECT
table_schema AS '数据库',
ROUND(SUM(data_length + index_length) / 1024 / 1024, 2) AS '大小(MB)'
FROM information_schema.tables
GROUP BY table_schema
ORDER BY SUM(data_length + index_length) DESC;
8.2 查看当前所有连接
SELECT
id, user, host, db, command, time, state,
SUBSTRING(info, 1, 100) AS query_preview
FROM information_schema.processlist
WHERE command != 'Sleep'
ORDER BY time DESC;
8.3 查看未使用的索引
SELECT
t.table_schema, t.table_name, s.index_name
FROM information_schema.statistics s
LEFT JOIN information_schema.tables t
ON s.table_schema = t.table_schema AND s.table_name = t.table_name
WHERE s.index_name != 'PRIMARY';
8.4 查看锁等待情况(MySQL 8.0)
SELECT * FROM performance_schema.data_locks;
SELECT * FROM performance_schema.data_lock_waits;
8.5 查看 InnoDB 缓冲池使用率
SELECT
(SELECT COUNT(*) FROM information_schema.INNODB_BUFFER_PAGE) AS pages,
(SELECT COUNT(*) FROM information_schema.INNODB_BUFFER_POOL_STATS
WHERE pool_id = 0) AS pool_pages;
8.6 查看表碎片率
SELECT
table_name,
ROUND(data_length / 1024 / 1024, 2) AS data_mb,
ROUND(data_free / 1024 / 1024, 2) AS free_mb,
ROUND(data_free / data_length * 100, 2) AS fragmentation_pct
FROM information_schema.tables
WHERE data_length > 0
ORDER BY fragmentation_pct DESC;
九、常见运维场景命令速查
| 场景 | 命令 |
|---|---|
| 查看服务器是否存活 | mysqladmin -u root -p ping |
| 查看所有进程 | SHOW FULL PROCESSLIST; |
| 终止某连接 | KILL CONNECTION 123; |
| 查看当前连接数 | SHOW STATUS LIKE 'Threads_connected'; |
| 查看慢查询数量 | SHOW STATUS LIKE 'Slow_queries'; |
| 刷新权限 | FLUSH PRIVILEGES; |
| 刷新日志 | FLUSH LOGS; |
| 刷新表缓存 | FLUSH TABLES; |
| 全局只读锁 | FLUSH TABLES WITH READ LOCK; UNLOCK TABLES; |
| 查看二进制日志列表 | SHOW BINARY LOGS; |
| 清理过期二进制日志 | PURGE BINARY LOGS BEFORE NOW() - INTERVAL 7 DAY; |
| 查看从库同步状态 | SHOW SLAVE STATUS\G |
| 跳过复制错误(单次) | STOP SLAVE; SET GLOBAL SQL_SLAVE_SKIP_COUNTER = 1; START SLAVE; |
| 分析执行计划 | EXPLAIN SELECT ...; |
十、管理与运维最佳实践
| 方面 | 建议 |
|---|---|
| 定期巡检 | 每日:连接数、慢查询、磁盘空间;每周:表碎片、索引使用率;每月:备份恢复演练 |
| 预演恢复流程 | 定期测试备份文件的恢复过程,确保备份文件的有效性 |
| 压测 | 建议在大版本升级前进行压测,通过真实业务负载验证新版本性能和兼容性 |
| 监控报警 | 将关键指标接入 Prometheus/Grafana 或 Zabbix 监控系统,配置阈值报警 |
| 计划窗口 | 大规模数据操作必须在低峰时段进行;变更前务必完整备份 |
以上覆盖了 MySQL 管理与运维的主要操作命令,涵盖监控、备份恢复、日志管理、复制维护、配置文件管理、性能调优等方面。根据实际运维场景选择相应命令即可,对于不确定后果的操作(如 RESET MASTER、DML 的批量操作),建议先在测试环境验证。