📖 本篇简介:MySQL 是全世界最流行的开源关系型数据库,本系列 40 篇将带你从入门到精通、从面试到踩坑。本篇是整个系列的起点:讲清 MySQL 的版本选择、Windows 与 Linux 两种安装方式、客户端连接以及服务启动与停止。学完本篇,你可以在自己的电脑上装好 MySQL 8.0、成功连接并执行第一条 SQL。本系列所有示例均基于 MySQL 8.0。
目录
- 1 MySQL 是什么与版本选择
- 2 安装前的准备
- 3 Windows 安装 MySQL
- 4 Linux 安装 MySQL
- 5 客户端连接与首次使用
- 6 服务启动与停止
- 7 常见坑与注意事项
- 8 速查表
- 9 练习题
1 MySQL 是什么与版本选择
MySQL 是一款开源的关系型数据库管理系统(RDBMS),由瑞典 MySQL AB 公司开发,后被 Sun 收购、最终并入 Oracle。它使用 SQL(Structured Query Language)作为查询语言,支持事务、索引、视图、存储过程等完整特性,是 Web 应用(尤其是 LAMP/LNMP 架构)的事实标准数据库。
为什么学 MySQL?
- 市场占有率极高:招聘、面试、生产环境到处是它;
- 免费开源:社区版(Community Server)完全免费;
- 生态成熟:主从复制、读写分离、分库分表等方案一应俱全;
- 学习路径清晰:入门门槛低,深入后天花板高。
版本怎么选? 这是新手最容易纠结的问题,直接给结论:
| 版本 | 状态 | 适用场景 | 建议 |
|---|---|---|---|
| 8.0.x | 长期维护,社区主流 | 生产首选,功能最全(CTE、窗口函数、JSON 增强) | ✅ 本系列采用 |
| 5.7.x | 已于 2023-10 停止支持(EOL) | 存量系统、老项目维护 | ⚠️ 仅迁移期使用 |
| 8.4 LTS | 新长期支持分支 | 新项目可评估,官方推荐 | 可关注 |
版本选择一句话:新项目一律 8.0,5.7 只在维护老系统时遇到。5.7 与 8.0 的主要差异(密码插件、字符集默认值、查询优化器)会在后文多次出现。
查看当前环境中的 MySQL 版本:
-- 查看当前 MySQL 版本号
SELECT VERSION();
+-----------+
| VERSION() |
+-----------+
| 8.0.36 |
+-----------+
2 安装前的准备
动手安装前,先确认三件事:系统要求、端口、字符集。
系统要求:
| 项目 | Windows | Linux |
|---|---|---|
| 操作系统 | Windows 10/11 64 位 | CentOS 7/8、Ubuntu 18.04+、Debian 10+ |
| 内存 | 至少 2 GB(推荐 4 GB) | 至少 1 GB(推荐 4 GB) |
| 磁盘 | 预留 2 GB 安装空间 + 数据空间 | 同上 |
| 依赖 | 无需额外依赖 | glibc 2.17+(CentOS 7 满足) |
端口:MySQL 默认监听 3306 端口。安装前检查是否被占用:
# Windows:查看 3306 端口是否被占用(列出占用进程 PID)
netstat -ano | findstr 3306
# Linux:查看 3306 端口监听情况
ss -lntp | grep 3306
字符集:强烈建议全程使用 utf8mb4(不是 utf8)。utf8mb4 才是真正的四字节 UTF-8,能存 emoji 和生僻字;utf8 在 MySQL 里最多 3 字节,存 emoji 会报错。8.0 默认就是 utf8mb4,不用改;5.7 默认 latin1,需要手动改。
下载地址:
- 官网: (选 "MySQL Community Server")
- 国内镜像(速度快):阿里云、腾讯云镜像站,搜 "mysql community mirror"
3 Windows 安装 MySQL
Windows 下有两种装法:MSI 图形安装包(适合新手)和 ZIP 绿色版(适合开发者,可控性强)。建议用 ZIP 版,原因:不污染系统、卸载干净、配置一目了然。
3.1 MSI 安装包方式(简单)
下载 mysql-installer-community-8.0.x.msi,双击按向导走:
1. 选择安装类型:Developer Default 会装一堆组件,选 Server only 即可;
2. 配置类型:默认 Standalone MySQL Server;
3. 认证方式:默认 Use Strong Password Encryption(8.0 默认 caching_sha2_password);
4. 设置 root 密码;
5. 服务配置:勾选 "Configure MySQL Server as a Windows Service",服务名默认 MySQL80,开机自启;
6. 完成安装。
安装类型对比:
| 选项 | 包含内容 | 适合 |
|---|---|---|
| Developer Default | 服务端 + Workbench + 示例库 + 各种工具 | 学习开发(较臃肿) |
| Server only | 仅数据库服务端 | 生产、轻量 |
| Custom | 自定义组件 | 老手 |
3.2 ZIP 绿色版(推荐)
第一步:下载并解压
下载 mysql-8.0.x-winx64.zip,解压到 D:\mysql-8.0(路径不要带中文和空格)。
第二步:创建 my.ini 配置文件
在 D:\mysql-8.0 下新建 my.ini:
[mysqld]
# 监听端口,默认 3306
port=3306
# 数据目录,必须提前创建好(空文件夹)
datadir=D:/mysql-8.0/data
# 服务端默认字符集,8.0 推荐 utf8mb4
character-set-server=utf8mb4
# 排序规则,utf8mb4 对应 0900_ai_ci
collation-server=utf8mb4_0900_ai_ci
# 默认存储引擎
default-storage-engine=InnoDB
# 跳过权限表(仅忘记密码救急用,平时千万别开)
# skip-grant-tables
[client]
# 客户端默认字符集
default-character-set=utf8mb4
第三步:初始化数据目录
# 进入 MySQL 的 bin 目录
cd D:\mysql-8.0\bin
# 初始化:root 生成随机密码(密码打印在屏幕上的临时文件中,或用下面 insecure 方式)
mysqld --initialize-insecure
--initialize:生成 root 随机临时密码,写在data目录下的.err日志里(生产用这个,更安全);--initialize-insecure:root 初始为空密码(学习调试方便,装完立刻改密码)。
第四步:注册为 Windows 服务并启动
# 注册服务(服务名 MySQL80)
mysqld --install MySQL80
# 启动服务
net start MySQL80
# 停止服务
net stop MySQL80
# 卸载服务(不再需要时)
mysqld --remove MySQL80
启动成功后,net start MySQL80 会提示 "MySQL80 服务已经启动成功"。
4 Linux 安装 MySQL
Linux 各发行版仓库自带的 MySQL 版本往往很老(如 Ubuntu 自带的是发行版维护的 mysql 包),建议用官方仓库装最新 8.0。
4.1 CentOS / RHEL
# 1. 添加 MySQL 官方 Yum 仓库(el7 对应 CentOS 7;CentOS 8 用 el8)
rpm -ivh
# 2. 安装服务端
yum install -y mysql-community-server
# 3. 启动并设置开机自启
systemctl start mysqld
systemctl enable mysqld
# 4. 首次安装会生成临时 root 密码,记在日志里
grep 'temporary password' /var/log/mysqld.log
拿到临时密码后立即登录并改密码:
mysql -uroot -p
-- 把临时密码改成自己的强密码(8.0 默认密码策略要求含大小写+数字+符号)
ALTER USER 'root'@'localhost' IDENTIFIED BY 'New_Strong_Pass_2026';
4.2 Ubuntu / Debian
# 1. 下载官方 apt 仓库配置包
wget
# 2. 安装配置包(弹窗选 mysql-8.0 后 OK)
sudo dpkg -i mysql-apt-config_0.8.24-1_all.deb
# 3. 更新索引并安装
sudo apt update
sudo apt install -y mysql-server
# 4. 安装过程会引导设置 root 密码
安装后验证:
# 查看 MySQL 服务状态
systemctl status mysqld
# 或(Debian/Ubuntu 服务名可能为 mysql)
systemctl status mysql
5 客户端连接与首次使用
5.1 命令行连接
# 本机连接:-u 用户名,-p 表示提示输入密码
mysql -u root -p
# 指定主机和端口(远程或非默认端口时用)
mysql -h 127.0.0.1 -P 3306 -u root -p
连接成功后进入 mysql> 提示符,先做几个最常用的操作:
-- 查看有哪些数据库(自带 sys、mysql、performance_schema 等)
SHOW DATABASES;
-- 查看字符集相关变量,确认是 utf8mb4
SHOW VARIABLES LIKE '%character%';
-- 看连接信息
SELECT user, host, plugin FROM mysql.user;
5.2 修改 root 密码
-- 修改 root 密码(密码强度需满足策略)
ALTER USER 'root'@'localhost' IDENTIFIED BY 'New_Strong_Pass_2026';
-- 让权限立即生效
FLUSH PRIVILEGES;
5.3 图形化客户端
命令行之外,图形工具能大幅提升效率:
| 工具 | 平台 | 特点 |
|---|---|---|
| DBeaver | 全平台 | 免费开源、支持几乎所有数据库,推荐 |
| Navicat | 全平台 | 商用,界面友好,功能全 |
| MySQL Workbench | 全平台 | 官方出品,带 ER 建模 |
5.4 Python 连接 MySQL(pymysql)
后续章节的 Python 示例都用 pymysql 连接(本机若无 MySQL 服务器,可先安装 MySQL 后运行;连接参数需与你的安装一致):
# 需要先安装:pip install pymysql
import pymysql
# 建立连接:host 端口 用户名 密码 库名
conn = pymysql.connect(
host="127.0.0.1", # MySQL 地址
port=3306, # 端口,默认 3306
user="root", # 用户名
password="New_Strong_Pass_2026", # 密码
charset="utf8mb4", # 字符集,和库保持一致
)
cur = conn.cursor()
cur.execute("SELECT VERSION()") # 执行查询
print(cur.fetchone()) # ('8.0.36',)
cur.close()
conn.close()
5.5 连接失败的常见原因
连不上 MySQL 时,按下面顺序排查,多数问题出在前三条:
| 现象 | 常见原因 | 处理 |
|---|---|---|
| Access denied for user | 密码错 / 用户未授权该主机 | 核对密码;用 GRANT 给 'root'@'%' 或新建专用账号 |
| Can't connect to MySQL server | 服务没启动 / 端口不对 | net start MySQL80 或 systemctl start mysqld;确认端口 |
| Unknown database | 库名不存在 | SHOW DATABASES; 后重新拼写 |
| Client does not support authentication protocol | 客户端不支持 8.0 默认认证插件 | 升级驱动,或改用 mysql_native_password |
| Connection refused | 防火墙拦截 / 只监听了 localhost | 放行 3306;确认 bind-address 配置 |
记住一个排查原则:先本地(本机 127.0.0.1)测通,再谈远程。本地都连不上,问题在服务端;本地能连远程不能,问题在网络与授权。
6 服务启动与停止
Windows:
net start MySQL80 # 启动服务
net stop MySQL80 # 停止服务
Linux:
systemctl start mysqld # 启动
systemctl stop mysqld # 停止
systemctl restart mysqld # 重启
systemctl status mysqld # 查看状态
systemctl enable mysqld # 开机自启
systemctl disable mysqld # 取消开机自启
MySQL 内部方式(需要能登录):
-- 在 MySQL 客户端里执行,优雅关闭服务
SHUTDOWN;
# 或者命令行工具
mysqladmin shutdown -u root -p
启动失败排查:服务起不来,第一时间看错误日志。
- Windows:
D:\mysql-8.0\data\目录下的.err文件(如DESKTOP-XXX.err); - Linux:
/var/log/mysqld.log。
常见报错与含义:
| 日志关键字 | 含义 | 处理 |
|---|---|---|
| Can't find messagefile | 语言文件缺失 | 检查安装是否完整 |
| Access denied | 目录权限不足 | Windows 检查 data 目录;Linux 检查 /var/lib/mysql 属主 |
| Port 3306 is already in use | 端口被占 | 杀掉占用进程或改 port |
| Can't create/write to file | data 目录不存在/无写权限 | 创建 data 目录并授权 |
7 常见坑与注意事项
坑 1:端口被占用,服务启动报 "Port 3306 is already in use"
有的电脑上 3306 被其他程序(如旧版 MySQL、某些监控软件)占用。
# Windows 找出占用 3306 的进程 PID
netstat -ano | findstr 3306
# 结果最后一列就是 PID,用任务管理器结束它,或改 my.ini 的 port 换端口
坑 2:`--initialize` 和 `--initialize-insecure` 搞混,登不进去
- 用了
--initialize:root 是随机密码,写在 data 目录.err日志里,别在别处找; - 用了
--initialize-insecure:root 空密码,mysql -u root直接进,进去第一件事改密码。
坑 3:ZIP 版启动失败 "服务没有响应控制功能" / 1067 错误
多半是 my.ini 写错或 data 目录不存在。检查:my.ini 里 datadir 路径必须是真实存在的空目录;[mysqld] 段不能写错为 [mysql]。
坑 4:中文乱码
根源是字符集不是 utf8mb4。检查:
SHOW VARIABLES LIKE 'character%';
如果 character_set_server 不是 utf8mb4,改 my.ini 后重启服务再验证。建库建表时也显式指定:
CREATE DATABASE demo DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci;
坑 5:老客户端连不上,报 `caching_sha2_password` 错误
8.0 默认认证插件是 caching_sha2_password,老版本 pymysql(<1.0)、PHP 老驱动、5.x 时代的工具会报错。解决:升级客户端驱动(推荐),或把用户改回兼容插件:
-- 仅当客户端无法升级时用(安全级别较低)
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'New_Strong_Pass_2026';
8 速查表
| 操作 | 命令 / SQL |
|---|---|
| 启动服务(Windows) | net start MySQL80 |
| 停止服务(Windows) | net stop MySQL80 |
| 启动服务(Linux) | systemctl start mysqld |
| 重启服务(Linux) | systemctl restart mysqld |
| 开机自启(Linux) | systemctl enable mysqld |
| 命令行连接 | mysql -u root -p |
| 指定主机端口连接 | mysql -h 127.0.0.1 -P 3306 -u root -p |
| 查看版本 | SELECT VERSION(); |
| 查看字符集 | SHOW VARIABLES LIKE '%character%'; |
| 查看所有数据库 | SHOW DATABASES; |
| 修改 root 密码 | ALTER USER 'root'@'localhost' IDENTIFIED BY '新密码'; |
| 优雅关停服务 | SHUTDOWN; 或 mysqladmin shutdown -u root -p |
| 注册 Windows 服务 | mysqld --install MySQL80 |
| 卸载 Windows 服务 | mysqld --remove MySQL80 |
| 初始化(随机密码) | mysqld --initialize |
| 初始化(空密码) | mysqld --initialize-insecure |
9 练习题
练 1:安装完成后,用命令行连接 MySQL 并查看版本号与当前字符集设置。
<details>
<summary>参考答案</summary>
mysql -u root -p
SELECT VERSION();
SHOW VARIABLES LIKE 'character%';
若 character_set_server 不是 utf8mb4,在 my.ini 中配置并重启服务。
</details>
练 2:把默认字符集改为 utf8mb4,并验证生效。
<details>
<summary>参考答案</summary>
在 my.ini 的 [mysqld] 段添加:
character-set-server=utf8mb4
collation-server=utf8mb4_0900_ai_ci
重启服务后执行 SHOW VARIABLES LIKE 'character%';,确认 character_set_server=utf8mb4。
</details>
练 3:启动服务时提示端口被占用,写出排查与解决步骤。
<details>
<summary>参考答案</summary>
1. netstat -ano | findstr 3306 找到占用端口的 PID;
2. 确认该进程是否可停(若是其他 MySQL 实例则停止其服务);
3. 若不可停,修改 my.ini 的 port 为 3307 等新端口并重启服务;
4. 重新连接时用 mysql -h 127.0.0.1 -P 新端口 -u root -p。
</details>
下一篇预告:第 2 章 数据库与表的基本操作
文章回复
0 条公开回复