database Cheatsheet
MySQL 常用命令速查表
MySQL 日常运维命令一页速查:连接与用户管理、库表操作、查询与索引、进程与锁排查、备份恢复和主从状态检查等 30+ 高频操作,含关键参数说明与典型排障场景示例。
把 MySQL 日常最常敲的命令按连接、库表、查询、锁排查、备份恢复和主从分组整理,排障现场直接复制改参数即可。
连接与用户 Connection & User
- 交互式连接,-p 回车后输密码,-h 指定主机,-P 指定端口
mysql -u root -p -h 127.0.0.1 -P 3306 - 导入 SQL 文件到指定库
mysql -u root -p db_name < dump.sql - 一致性快照备份,不锁表(InnoDB)
mysqldump -u root -p --single-transaction db_name > backup.sql - 创建用户,'%' 允许所有主机连接,生产环境应限定 IP
CREATE USER 'app'@'%' IDENTIFIED BY 'password'; - 授予指定库的增删改查权限,最小权限原则
GRANT SELECT, INSERT, UPDATE ON db.* TO 'app'@'%'; - 修改用户密码,MySQL 5.7+ 语法
ALTER USER 'app'@'%' IDENTIFIED BY 'new_password'; - 查看当前用户权限
SHOW GRANTS FOR CURRENT_USER;
库表操作 Database & Table
- 列出所有数据库
SHOW DATABASES; - 切换到指定数据库
USE db_name; - 列出当前库的所有表
SHOW TABLES; - 查看表结构,等价于 SHOW COLUMNS FROM
DESC table_name; - 查看建表语句,\G 竖排输出更易读
SHOW CREATE TABLE table_name\G - 加列并指定位置,大表慎用(锁表)
ALTER TABLE t ADD COLUMN col INT DEFAULT 0 AFTER id; - 添加索引,生产环境用 pt-online-schema-change 避免锁表
ALTER TABLE t ADD INDEX idx_name (col); - 清空表数据保留结构,比 DELETE 快且不可回滚
TRUNCATE TABLE t;
查询与索引 Query & Index
- 查看执行计划,关注 type/key/rows/Extra
EXPLAIN SELECT * FROM t WHERE col = 1\G - JSON 格式执行计划,信息更详细(MySQL 5.6+)
EXPLAIN FORMAT=JSON SELECT ... - 查看表所有索引,关注 Cardinalinality 判断选择性
SHOW INDEX FROM t; - 统计 NULL 值数量,索引不包含 NULL 行
SELECT COUNT(*) FROM t WHERE col IS NULL; - 查看慢查询数量,需开启 slow_query_log
SHOW STATUS LIKE "Slow_queries"; - 查看慢查询日志配置
SHOW VARIABLES LIKE 'slow_query%';
进程与锁 Process & Lock
- 查看所有连接和正在执行的 SQL,快速定位卡住的查询
SHOW PROCESSLIST; - 显示完整 SQL 语句(不截断)
SHOW FULL PROCESSLIST; - 终止指定连接,先确认不是主从复制线程
KILL <id>; - 查看当前事务,找长事务和锁等待
SELECT * FROM information_schema.INNODB_TRX; - 查看锁等待(MySQL 8.0+)
SELECT * FROM performance_schema.data_locks WHERE LOCK_STATUS='PENDING'; - InnoDB 引擎状态,含死锁信息和 LATEST DETECTED DEADLOCK
SHOW ENGINE INNODB STATUS\G
备份恢复 Backup & Recovery
- 全库备份含存储过程和触发器
mysqldump -u root -p --all-databases --routines --triggers > all.sql - 记录 binlog 位置,用于搭建从库
mysqldump -u root -p --single-transaction --master-data=2 db > db.sql - 按时间点恢复(PITR)
mysqlbinlog --start-datetime="2026-01-01 00:00:00" mysql-bin.000123 | mysql -u root -p - 设只读模式,主从切换前用
mysql -u root -p -e "SET GLOBAL read_only=1;" - 查看 binlog 列表和大小
SHOW BINARY LOGS;
主从复制 Replication
- 查看从库状态(MySQL 5.7),关注 Slave_IO_Running 和 Slave_SQL_Running
SHOW SLAVE STATUS\G - 查看从库状态(MySQL 8.0+ 新语法)
SHOW REPLICA STATUS\G - 配置主库地址(MySQL 8.0+)
CHANGE REPLICATION SOURCE TO SOURCE_HOST='10.0.0.1', SOURCE_PORT=3306; - 启停复制(MySQL 8.0+)
START REPLICA; STOP REPLICA; - 查看复制 worker 状态和错误
SELECT * FROM performance_schema.replication_applier_status_by_worker;
容易踩的坑
- 生产环境加列加索引用 pt-online-schema-change 或 gh-ost,不要直接 ALTER 大表。
- 看到 Seconds_Behind_Master 为 0 不代表无延迟,大事务可能导致跳变,结合 relay log 大小判断。
- 慢查询排查先开 slow_query_log,再用 pt-query-digest 分析 TOP SQL,不要只看 EXPLAIN。