乐途乐途
主页
  • 计算机基础

    • TCP/IP协议
    • Linux命令
    • HTTP协议
  • 数据库

    • SQL
    • MySQL 5.7
  • 编程语言

    • C语言
    • Python2
    • Python3
  • 数据格式

    • JSON
    • XML
  • 认证与安全

    • JWT
  • 工具

    • Markdown
  • Git

    • GitFlow
  • Quartz

    • Quartz
  • Java

    • MyBatis
    • Spring
    • Spring MVC
    • Maven 入门
    • Maven 进阶
    • Java 设计模式
  • 缓存

    • Redis
联系
阿里云
主页
  • 计算机基础

    • TCP/IP协议
    • Linux命令
    • HTTP协议
  • 数据库

    • SQL
    • MySQL 5.7
  • 编程语言

    • C语言
    • Python2
    • Python3
  • 数据格式

    • JSON
    • XML
  • 认证与安全

    • JWT
  • 工具

    • Markdown
  • Git

    • GitFlow
  • Quartz

    • Quartz
  • Java

    • MyBatis
    • Spring
    • Spring MVC
    • Maven 入门
    • Maven 进阶
    • Java 设计模式
  • 缓存

    • Redis
联系
阿里云
  • 学习路径
  • 第1章 数据库基础与安装

    • MySQL 简介
    • MySQL 5.6 到 5.7 到 8.0 关键差异速查
    • 安装 MySQL 5.7
    • 连接与断开服务器
    • 创建数据库
    • 创建数据表
    • 数据库与数据表
    • 加载数据
    • 获取数据库信息
    • 批处理模式
    • SHOW 语句汇总
    • FLUSH 与 RESET 语句
    • my.cnf 核心参数
    • 字符集与排序规则
  • 第2章 SQL基础查询

    • SELECT
    • WHERE
    • ORDER BY
    • LIMIT
    • COUNT
    • 聚合函数
    • 比较运算符
    • 逻辑运算符
    • 算术运算符
    • 模式匹配
    • NULL 值处理
    • UPDATE
    • DELETE
    • REPLACE
    • SELECT INTO
  • 第3章 数据类型与运算符

    • 数值类型
    • 字符串类型
    • 日期时间类型
    • BIT 类型
    • ENUM 类型
    • SET 类型
    • JSON 类型
    • 类型转换
  • 第4章 函数与表达式

    • 字符串函数
    • 数值函数
    • 日期函数
    • 全文检索函数
  • 第5章 高级查询与子查询

    • JOIN
    • 子查询
    • UNION
    • GROUP BY
    • HAVING
    • DISTINCT
  • 第6章 表与索引

    • 数据定义语言
    • 修改表结构
    • 视图
    • 修改视图与检查选项
    • 外键
    • 索引
    • 唯一索引
    • 复合索引
    • 存储引擎对比
    • 分区表
    • 第一范式与第二范式
    • 第三范式与 BC 范式
    • 反范式设计
  • 第7章 存储过程与函数

    • 存储过程
    • 存储函数
    • 变量
    • 流程控制
    • 游标
    • 预处理语句
  • 第8章 事务与锁

    • 事务
    • 事务隔离级别
    • 锁机制
    • MVCC
    • 死锁专题分析
    • LOCK TABLES
    • XA 事务
  • 第9章 用户管理与安全

    • 用户管理
    • 权限管理
    • 角色
    • SQL 注入防范
  • 第10章 性能优化入门

    • 执行计划
    • 索引优化
    • 查询优化
    • 查询优化器提示
    • 慢查询日志
    • InnoDB 深入机制
    • InnoDB 专项优化
    • Performance Schema
    • sys Schema
  • 第11章 复制与高可用

    • 主从复制原理
    • 半同步复制配置
    • binlog 开启与 point-in-time 恢复
    • mysqldump 全库备份
    • mysqldump 单表与条件备份
    • mysqldump 恢复与导入
    • xtrabackup 全量热备
    • xtrabackup 准备与恢复
    • xtrabackup 增量与流式备份
  • 第12章 触发器与事件

    • 触发器
    • 事件调度器
  • 参考

    • MySQL 5.7 专业术语大全
    • MySQL 5.7 关键字与保留字大全

连接与断开服务器

导学

MySQL 采用客户端/服务器(C/S)架构。你的 SQL 语句并不是直接操作磁盘文件,而是通过网络协议发送给 MySQL 服务器进程,由服务器执行后再返回结果。本节学习如何建立和关闭这个连接,以及连接后的常用状态检查命令。

定义

MySQL 客户端:发送 SQL 请求的程序,可以是命令行工具 mysql、图形化工具(Navicat、DBeaver)、或应用程序中的数据库驱动。

MySQL 服务器:持续运行的后台进程(mysqld),负责解析 SQL、管理数据文件、处理并发请求。

命令行连接

场景一:本地连接(最常用)

在终端执行:

mysql -u root -p

参数说明:

  • -u root:以 root 用户身份登录
  • -p:提示输入密码(密码不会回显到屏幕)

执行后提示输入密码,认证成功后将显示 mysql> 提示符:

Enter password: ********
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 15
Server version: 5.7.44-log MySQL Community Server (GPL)

mysql>

结果解读:connection id 是当前连接的唯一标识。服务器版本 5.7.44-log 表示这是 MySQL 5.7 社区版,且开启了二进制日志(binlog)。

场景二:连接后验证服务器状态

连接成功后,通过 SQL 命令确认环境信息:

-- 查看服务器版本
SELECT VERSION();
VERSION()
5.7.44-log
-- 查看当前用户
SELECT USER();
USER()
root@localhost
-- 查看当前时间
SELECT NOW();
NOW()
2024-01-15 14:30:00
-- 查看当前数据库
SELECT DATABASE();
DATABASE()
NULL

结果解读:刚连接时如果没有指定数据库,DATABASE() 返回 NULL。需要用 USE 选择数据库后才能执行表操作。

场景三:指定主机和端口连接(远程或自定义端口)

mysql -h 192.168.1.100 -P 3307 -u app_user -p

参数说明:

  • -h:主机地址(host),默认 localhost
  • -P:端口号(Port),注意是大写 P,默认 3306

⚠️ 易错点:-p(小写)表示密码提示,-P(大写)表示端口。这是新手最常搞混的参数。

连接后验证连接的主机:

SELECT @@hostname;
@@hostname
db-server-01

场景四:直接在命令行中指定数据库

mysql -u root -p demo_info

连接成功后直接进入 demo_info 数据库,无需再执行 USE demo_info;。

验证:

SELECT DATABASE();
DATABASE()
demo_info

完整示例:连接后创建并操作数据库

当前数据状态:刚连接服务器,尚未选择数据库。

SELECT DATABASE();
DATABASE()
NULL

操作语句:创建测试数据库并建表

CREATE DATABASE IF NOT EXISTS connection_demo
    DEFAULT CHARACTER SET utf8mb4;

USE connection_demo;

CREATE TABLE greetings (
    id INT PRIMARY KEY AUTO_INCREMENT,
    message VARCHAR(100) NOT NULL,
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
) ENGINE=InnoDB;

INSERT INTO greetings (message) VALUES ('Hello, MySQL 5.7!');

操作后的数据状态

SELECT * FROM greetings;
idmessagecreated_at
1Hello, MySQL 5.7!2024-01-15 14:35:00

结果解读:从连接服务器到创建数据库、建表、插入数据,整个流程在一条会话中完成。所有操作都在服务器端执行,客户端只负责发送 SQL 和接收结果。

断开连接

在 mysql> 提示符下输入:

QUIT;
-- 或
EXIT;
-- 或快捷键
Ctrl+D  (Unix/Mac)
Ctrl+C  (Windows)

断开前查看当前连接统计:

SHOW STATUS LIKE 'Threads_connected';
Variable_nameValue
Threads_connected3

结果解读:Threads_connected 表示当前连接到服务器的客户端数量。断开后该计数会减少。

完整示例:验证连接与会话变量

当前数据状态:已连接到服务器。

操作语句:查看和设置会话变量

-- 查看当前会话的 SQL 模式
SELECT @@sql_mode;
@@sql_mode
ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION
-- 查看当前时区
SELECT @@time_zone;
@@time_zone
SYSTEM
-- 查看自动提交状态(事务相关)
SELECT @@autocommit;
@@autocommit
1

结果解读:

  • sql_mode 控制 MySQL 的 SQL 语法校验严格程度
  • time_zone = SYSTEM 表示使用操作系统时区
  • autocommit = 1 表示每条 SQL 自动提交(开启事务时需要关闭)

常见连接错误

错误信息原因解决
ERROR 1045 (28000): Access denied用户名或密码错误检查 -u 和 -p 是否正确
ERROR 2003 (HY000): Can't connect服务器未启动或端口不对检查 mysqld 进程和端口
ERROR 1130: Host is not allowedroot 用户不允许远程连接修改用户主机权限为 %

验证用户主机权限:

-- 在服务器上执行
USE mysql;
SELECT user, host FROM user WHERE user = 'root';
userhost
rootlocalhost
root127.0.0.1

结果解读:root 默认只允许从 localhost 和 127.0.0.1 连接。如果需要远程连接,需要创建允许 %(任意主机)的用户。

面试考点

Q:mysql 命令的 -p 和 -P 有什么区别?

-p(小写)表示 password,会提示输入密码,也可以紧跟密码(不安全,不推荐);-P(大写)表示 Port,指定连接端口,默认 3306。

Q:为什么生产环境不建议使用 root 直接连接数据库?

root 拥有最高权限(包括删除所有数据库)。生产环境应创建最小权限的专用账号,遵循"最小权限原则"。

创建最小权限账号示例:

CREATE USER 'app_readonly'@'%' IDENTIFIED BY 'SecurePass123!';
GRANT SELECT ON demo_info.* TO 'app_readonly'@'%';
FLUSH PRIVILEGES;

SHOW GRANTS FOR 'app_readonly'@'%';
Grants for app_readonly@%
GRANT USAGE ON . TO 'app_readonly'@'%'
GRANT SELECT ON demo_info.* TO 'app_readonly'@'%'

结果解读:app_readonly 用户只能对 demo_info 库执行 SELECT 查询,无法修改或删除数据。

Q:MySQL 客户端和服务器必须在一台机器上吗?

不需要。MySQL 通过 TCP/IP 协议通信,客户端和服务器可以在同一局域网、甚至跨公网。但公网连接应使用 SSL/TLS 加密。

小结

  • mysql -u 用户名 -p 是最基本的连接方式
  • 注意区分 -p(密码)和 -P(端口)的大小写
  • 连接成功后出现 mysql> 提示符,表示可以执行 SQL 语句
  • 生产环境务必使用受限账号,而非 root
  • 连接后可通过 SELECT VERSION(), USER(), DATABASE() 快速确认环境

清理测试数据(可选):

DROP USER IF EXISTS 'app_readonly'@'%';
DROP DATABASE IF EXISTS connection_demo;

下一章引子:连接成功了,接下来我们创建属于自己的第一个数据库。

上一页
安装 MySQL 5.7
下一页
创建数据库