【MySQL百日打怪升级第4天】MySQL常用命令

4 阅读5分钟

【第4天】每天一个MySQL知识点,百日打怪升级

MySQL常用命令


大家好,我是一名拥有10年以上经验的DBA老兵【没有那多】。

做这个系列,源于一个朴素的愿望:把踩过的坑、总结的经验系统化输出,希望能帮到刚入行或想进阶的兄弟们。

让我们开始今天的第4天内容。


背景引入

💡 说白了:MySQL命令就两种——一种是 SHOW, SELECT(让你知道数据库现在啥样),一种是 DML, DDL(让你去改数据)。前者保平安,后者干活用。

很多同学会写SQL,但拿起MySQL客户端就蒙——不知道指定什么参数、怎么查看状态、怎么切换数据库。

今天的目标:掌握MySQL客户端常用命令,面试和工作都能底气十足!


核心概念

一、连接与基础命令

# 连接MySQL(最常用)
mysql -u root -p
mysql -h 127.0.0.1 -P 3306 -u root -p

# 指定字符集连接
mysql -u root -p --default-character-set=utf8mb4

# 连接后切换数据库
USE database_name;

# 查看当前数据库
SELECT DATABASE();

面试必问

  • MySQL连接参数有哪些?
  • 如何指定端口和字符集?

📝 面试解答

Q: MySQL连接参数有哪些?

  • -u:用户名
  • -p:密码(直接在-p后面写密码是不安全的,建议-p回车后输入)
  • -h:主机地址,默认127.0.0.1
  • -P:端口号,大写P,默认3306
  • --default-character-set:指定字符集,避免中文乱码
  • -e:直接执行SQL后退出,适合脚本
  • -S:指定socket文件(仅限管理员)

Q: 如何指定端口和字符集?

  • -P 3306 指定端口(大写P)
  • --default-character-set=utf8mb4 指定字符集

二、客户端快捷命令

-- 简写命令(客户端内使用)
\c          -- 中止当前输入
\q          -- 退出客户端(quit)
\s          -- 查看状态信息(status)
\g          -- 发送命令(等同于回车)
\G          -- 发送命令并垂直显示结果
source file -- 执行SQL文件
\. file     -- 同source
-- 退出客户端
EXIT;
-- 或
QUIT;
-- 或
\q
-- 查看版本和状态
STATUS;
-- 或
\s

-- 结果示例:
mysql  Ver 8.0.28 for Linux on x86_64 (MySQL Community Server - GPL)
Connection id:          5
Current database:      test
Current user:          root@localhost
SSL:                   Not in use
Using delimiter:       ;
Server version:        8.0.28 MySQL Community Server - GPL
Protocol version:      10
Connection:           Localhost via UNIX socket
UNIX socket:          /var/lib/mysql/mysql.sock

💡 说白了:面试官问你有没有用过 \s 命令,你说没用过,那就尴尬了——这可是查看MySQL状态最常用的快捷命令。


三、数据库操作命令

-- 查看数据库
SHOW DATABASES;

-- 创建数据库
CREATE DATABASE db_name DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;

-- 删除数据库(生产环境千万别手抖!)
DROP DATABASE db_name;

-- 查看当前数据库的表
SHOW TABLES;

-- 查看表结构
DESC table_name;
-- 或
DESCRIBE table_name;
-- 或
SHOW CREATE TABLE table_name\G

四、表操作命令

-- 查看表状态
SHOW TABLE STATUS LIKE 'table_name';

-- 查看索引
SHOW INDEX FROM table_name;

-- 查看创建表语句
SHOW CREATE TABLE table_name;

-- 查看表的字段信息
SHOW COLUMNS FROM table_name;
-- 或
DESCRIBE table_name;

💡 说白了:SHOW CREATE TABLE 是排查问题的神器——有时候建表语句和预期不一样,有没有索引,一SHOW就知道。


五、状态查看命令

-- 查看当前连接数
SHOW STATUS LIKE 'Threads_connected';
SHOW STATUS LIKE 'Threads_running';

-- 查看最大连接数
SHOW VARIABLES LIKE 'max_connections';

-- 查看缓存命中率(重要!)
SHOW GLOBAL STATUS LIKE 'Innodb_buffer_pool_read%';
-- 计算:Innodb_buffer_pool_read_requests / (Innodb_buffer_pool_read_requests + Innodb_buffer_pool_reads)

-- 查看慢查询数量
SHOW GLOBAL STATUS LIKE 'Slow_queries';

-- 查看查询缓存状态(MySQL 8.0已移除,仅供参考)
SHOW VARIABLES LIKE 'query_cache%';
-- 查看 InnoDB 状态(排查锁问题经常用到)
SHOW ENGINE INNODB STATUS;

-- 查看当前正在执行的进程
SHOW PROCESSLIST;
-- 或
SHOW FULL PROCESSLIST;

💡 SHOW PROCESSLIST 是排查"某个SQL怎么这么慢"的第一招——直接看当前在跑什么。


六、变量查看命令

-- 查看所有变量
SHOW VARIABLES;

-- 查看特定变量
SHOW VARIABLES LIKE 'innodb_buffer_pool_size';
SHOW VARIABLES LIKE 'character_set%';
SHOW VARIABLES LIKE 'max_connections';

-- 模糊匹配
SHOW VARIABLES LIKE 'timeout%';
SHOW VARIABLES LIKE '%log%';

实战案例

场景一:快速排查连接数问题

-- 查看当前连接数
SHOW STATUS LIKE 'Threads_connected';

-- 查看正在运行的连接数
SHOW STATUS LIKE 'Threads_running';

-- 查看最大连接数
SHOW VARIABLES LIKE 'max_connections';

-- 如果发现连接数快满了,再查看具体是谁在连接
SHOW PROCESSLIST;

场景二:查看慢查询配置

-- 查看慢查询是否开启
SHOW VARIABLES LIKE 'slow_query_log';

-- 查看慢查询时间阈值
SHOW VARIABLES LIKE 'long_query_time';

-- 查看慢查询日志文件路径
SHOW VARIABLES LIKE 'slow_query_log_file';

场景三:查看字符集配置

-- 查看所有字符集相关变量
SHOW VARIABLES LIKE 'character%';

-- 结果示例:
+--------------------------+-----------------------------+
| Variable_name            | Value                       |
+--------------------------+-----------------------------+
| character_set_client     | utf8mb4                     |
| character_set_connection | utf8mb4                     |
| character_set_database   | utf8mb4                     |
| character_set_filesystem | binary                      |
| character_set_results    | utf8mb4                     |
| character_set_server     | utf8mb4                     |
+--------------------------+-----------------------------+

避坑指南

⚠️ 真实踩过的坑:

  1. 连接时不指定字符集,中文乱码

    • 一定要加 --default-character-set=utf8mb4
    • 或者登录后执行 SET NAMES utf8mb4;
  2. 在生产环境执行 DROP DATABASE

    • 手动删除时务必先 USE 确认当前库
    • 建议先 DROP DATABASE IF EXISTS db_name; 避免报错
  3. SHOW PROCESSLIST 不显示完整SQL

    • 需要用 SHOW FULL PROCESSLIST 能看更全的输出
  4. 字符集配置看错变量

    • character_set_server 是服务端默认字符集
    • character_set_database 是当前数据库的字符集,不一样!

思考题

🤔 互动时间:

  1. SHOW PROCESSLISTSHOW FULL PROCESSLIST 有什么区别?
  2. 如何快速查看MySQL的当前状态(连接数、版本、字符集)?

总结

🎯 面试考点

  • MySQL连接参数:-u/-p/-h/-P/--default-character-set
  • 客户端快捷命令:\s、\G、\q、source
  • 状态查看命令:SHOW PROCESSLIST、SHOW STATUS、SHOW VARIABLES
  • 常用SHOW命令:SHOW DATABASES/TABLES/INDEX/CREATE TABLE
  • 字符集配置:SET NAMES utf8mb4

💡 AI实战建议:让自己的AI助手记住故障排查命令流,每次遇到问题时自动执行:

# 1. 先看整体状态
SHOW GLOBAL STATUS LIKE 'Threads_connected';  -- 当前连接数
SHOW GLOBAL STATUS LIKE 'Threads_running';    -- 正在跑的连接
SHOW GLOBAL STATUS LIKE 'Slow_queries';       -- 慢查询数量

# 2. 看谁在连接
SHOW FULL PROCESSLIST;  -- 所有在执行的SQL

# 3. 看具体问题
SHOW VARIABLES LIKE 'long_query_time';        -- 慢查询阈值
SHOW ENGINE INNODB STATUS;                     -- InnoDB状态(锁问题)

# 4. 查表结构确认索引
SHOW CREATE TABLE table_name\G                 -- 确认是否用到索引

然后把这些结果发给AI,让它帮你分析:"MySQL现在这个状态,帮我分析可能的原因。"


下期预告:索引基础:B+树详解 —— 面试必问!

全本合集《每天一个MySQL知识点,百日打怪升级》


有问题欢迎评论区交流,明天见!