database Cheatsheet

MySQL 常用命令速查表

MySQL 日常运维命令一页速查:连接与用户管理、库表操作、查询与索引、进程与锁排查、备份恢复和主从状态检查等 30+ 高频操作,含关键参数说明与典型排障场景示例。

把 MySQL 日常最常敲的命令按连接、库表、查询、锁排查、备份恢复和主从分组整理,排障现场直接复制改参数即可。

mysql数据库sql索引

连接与用户 Connection & User

  • mysql -u root -p -h 127.0.0.1 -P 3306
    交互式连接,-p 回车后输密码,-h 指定主机,-P 指定端口
  • mysql -u root -p db_name < dump.sql
    导入 SQL 文件到指定库
  • mysqldump -u root -p --single-transaction db_name > backup.sql
    一致性快照备份,不锁表(InnoDB)
  • CREATE USER 'app'@'%' IDENTIFIED BY 'password';
    创建用户,'%' 允许所有主机连接,生产环境应限定 IP
  • GRANT SELECT, INSERT, UPDATE ON db.* TO 'app'@'%';
    授予指定库的增删改查权限,最小权限原则
  • ALTER USER 'app'@'%' IDENTIFIED BY 'new_password';
    修改用户密码,MySQL 5.7+ 语法
  • SHOW GRANTS FOR CURRENT_USER;
    查看当前用户权限

库表操作 Database & Table

  • SHOW DATABASES;
    列出所有数据库
  • USE db_name;
    切换到指定数据库
  • SHOW TABLES;
    列出当前库的所有表
  • DESC table_name;
    查看表结构,等价于 SHOW COLUMNS FROM
  • SHOW CREATE TABLE table_name\G
    查看建表语句,\G 竖排输出更易读
  • ALTER TABLE t ADD COLUMN col INT DEFAULT 0 AFTER id;
    加列并指定位置,大表慎用(锁表)
  • ALTER TABLE t ADD INDEX idx_name (col);
    添加索引,生产环境用 pt-online-schema-change 避免锁表
  • TRUNCATE TABLE t;
    清空表数据保留结构,比 DELETE 快且不可回滚

查询与索引 Query & Index

  • EXPLAIN SELECT * FROM t WHERE col = 1\G
    查看执行计划,关注 type/key/rows/Extra
  • EXPLAIN FORMAT=JSON SELECT ...
    JSON 格式执行计划,信息更详细(MySQL 5.6+)
  • SHOW INDEX FROM t;
    查看表所有索引,关注 Cardinalinality 判断选择性
  • SELECT COUNT(*) FROM t WHERE col IS NULL;
    统计 NULL 值数量,索引不包含 NULL 行
  • SHOW STATUS LIKE "Slow_queries";
    查看慢查询数量,需开启 slow_query_log
  • SHOW VARIABLES LIKE 'slow_query%';
    查看慢查询日志配置

进程与锁 Process & Lock

  • SHOW PROCESSLIST;
    查看所有连接和正在执行的 SQL,快速定位卡住的查询
  • SHOW FULL PROCESSLIST;
    显示完整 SQL 语句(不截断)
  • KILL <id>;
    终止指定连接,先确认不是主从复制线程
  • SELECT * FROM information_schema.INNODB_TRX;
    查看当前事务,找长事务和锁等待
  • SELECT * FROM performance_schema.data_locks WHERE LOCK_STATUS='PENDING';
    查看锁等待(MySQL 8.0+)
  • SHOW ENGINE INNODB STATUS\G
    InnoDB 引擎状态,含死锁信息和 LATEST DETECTED DEADLOCK

备份恢复 Backup & Recovery

  • mysqldump -u root -p --all-databases --routines --triggers > all.sql
    全库备份含存储过程和触发器
  • mysqldump -u root -p --single-transaction --master-data=2 db > db.sql
    记录 binlog 位置,用于搭建从库
  • mysqlbinlog --start-datetime="2026-01-01 00:00:00" mysql-bin.000123 | mysql -u root -p
    按时间点恢复(PITR)
  • mysql -u root -p -e "SET GLOBAL read_only=1;"
    设只读模式,主从切换前用
  • SHOW BINARY LOGS;
    查看 binlog 列表和大小

主从复制 Replication

  • SHOW SLAVE STATUS\G
    查看从库状态(MySQL 5.7),关注 Slave_IO_Running 和 Slave_SQL_Running
  • 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;
    启停复制(MySQL 8.0+)
  • SELECT * FROM performance_schema.replication_applier_status_by_worker;
    查看复制 worker 状态和错误

容易踩的坑

  • 生产环境加列加索引用 pt-online-schema-change 或 gh-ost,不要直接 ALTER 大表。
  • 看到 Seconds_Behind_Master 为 0 不代表无延迟,大事务可能导致跳变,结合 relay log 大小判断。
  • 慢查询排查先开 slow_query_log,再用 pt-query-digest 分析 TOP SQL,不要只看 EXPLAIN。