强曰为道
与天地相似,故不违。知周乎万物,而道济天下,故不过。旁行而不流,乐天知命,故不忧.
文档目录

MySQL 完全指南 / 第 1 章:MySQL 简介

第 1 章:MySQL 简介

了解 MySQL 的前世今生,选择正确的版本,在正确的场景使用正确的工具。


1.1 MySQL 发展历史

MySQL 是世界上最流行的开源关系型数据库管理系统(RDBMS)。其发展脉络如下:

年份里程碑
1995MySQL 1.0 发布,由瑞典公司 MySQL AB 开发
2000采用 GPL 开源协议
2003MySQL 4.0 发布,支持 UNION、子查询
2005MySQL 5.0 发布,支持存储过程、触发器、视图
2008Sun Microsystems 以 10 亿美元收购 MySQL AB
2010Oracle 收购 Sun,MySQL 归入 Oracle 旗下
2013MySQL 5.6 发布,支持全文索引(InnoDB)、GTID 复制
2015MySQL 5.7 发布,支持 JSON 类型、Generated Column
2018MySQL 8.0 发布,支持窗口函数、CTE、角色
2024MySQL 8.4 LTS / 9.0 Innovation 发布
2025MySQL 9.2 发布,HeatWave、向量存储等新特性

💡 MySQL 分支:由于 Oracle 对 MySQL 的控制,社区产生了多个分支:

  • MariaDB:由 MySQL 创始人 Monty 创建,兼容 MySQL 5.7 及之前版本
  • Percona Server:Percona 公司维护的企业增强版
  • PolarDB-X:阿里云的分布式 MySQL 兼容数据库

1.2 MySQL 版本选择

版本线对比

版本线特点适用场景
MySQL 5.7最后一个经典版本,生态成熟老项目维护、不支持 8.0 的中间件
MySQL 8.0 LTS主流版本,功能丰富新项目首选
MySQL 8.4 LTS长期支持版本,稳定性优先生产环境推荐
MySQL 9.x Innovation创新版,功能最新测试/开发环境

⚠️ 重要提示

  • MySQL 5.7 已于 2023 年 10 月 停止官方支持(EOL),强烈建议迁移到 8.0+
  • MySQL 8.0 将于 2026 年 4 月 停止支持,建议新项目直接使用 8.4 LTS
  • 生产环境避免使用 Innovation 版本,它每季度发布一次,稳定性不如 LTS

版本选择决策树

新项目?
├── 是 → MySQL 8.4 LTS(推荐)
│       └── 需要最新特性?→ 可用 9.x 在测试环境先行验证
└── 否(已有项目)
    ├── 当前 5.7 → 尽快规划升级到 8.0/8.4
    └── 当前 8.0 → 评估是否需要升级到 8.4 LTS

1.3 MySQL 适用场景

✅ 非常适合的场景

场景说明
Web 应用后端LAMP/LNMP 架构的核心组件
电商系统交易数据管理,支持事务(ACID)
内容管理系统WordPress、Drupal 等的默认数据库
日志存储结合分区表存储海量日志数据
SaaS 多租户Schema 级别或行级别的租户隔离
中小规模 OLTP高并发读写,单表亿级数据仍可良好工作

⚠️ 不太适合的场景

场景更好的选择
超大规模 OLAP(数据分析)ClickHouse、Doris、StarRocks
图数据库(社交关系推理)Neo4j、JanusGraph
文档型存储MongoDB
时序数据InfluxDB、TDengine
缓存层Redis、Memcached
强一致性分布式事务TiDB、CockroachDB

💡 混合使用是常态:一个系统中同时使用 MySQL + Redis + ES 是非常常见的架构。


1.4 MySQL vs PostgreSQL

这是开发者最常问的问题之一。以下是详细对比:

核心特性对比

特性MySQLPostgreSQL
许可证GPL v2PostgreSQL License(更宽松)
默认端口33065432
存储引擎可插拔(InnoDB/MyISAM…)单一引擎
ACID 事务InnoDB 完全支持完全支持
JSON 支持5.7+ 支持,8.0 增强9.2+ 支持,功能更强大
全文索引InnoDB 支持(5.6+)支持,性能更好
GIS 空间数据基础支持PostGIS 插件,功能强大
物化视图不支持支持
自定义类型不支持支持
窗口函数8.0+ 支持长期支持
CTE(递归查询)8.0+ 支持长期支持
分区表支持支持
逻辑复制基础支持功能更丰富
并发控制MVCC(InnoDB)MVCC
最大连接数默认 151,可调默认 100,可调

性能对比

场景MySQLPostgreSQL
简单 SELECT⭐⭐⭐⭐⭐ 更快⭐⭐⭐⭐
复杂 JOIN⭐⭐⭐⭐⭐⭐⭐⭐⭐ 可能更优
高并发写入⭐⭐⭐⭐⭐⭐⭐⭐⭐
大量并发连接⭐⭐⭐⭐⭐ 线程模型⭐⭐⭐ 进程模型(用 PgBouncer 解决)
OLAP 分析⭐⭐⭐⭐⭐⭐⭐
地理空间查询⭐⭐⭐⭐⭐⭐⭐⭐ PostGIS

生态对比

维度MySQLPostgreSQL
云厂商支持所有主流云厂商所有主流云厂商
ORM 支持所有主流语言所有主流语言
管理工具Navicat、DBeaver、phpMyAdminpgAdmin、DBeaver
学习曲线较低中等
社区活跃度非常高非常高
中文文档丰富较丰富

如何选择?

选择 MySQL:
  ✓ 团队有 MySQL 经验
  ✓ 高并发读写 OLTP 为主
  ✓ 需要大量成熟中间件(如 ShardingSphere)
  ✓ WordPress、Laravel 等框架生态

选择 PostgreSQL:
  ✓ 需要复杂查询、GIS、自定义类型
  ✓ OLAP 和 OLTP 混合(HTAP)
  ✓ 需要物化视图、高级数据类型
  ✓ 对数据完整性要求极高

两者都可以:
  ✓ 标准 CRUD 业务(订单、用户、商品)
  ✓ 中小规模数据量(千万级以内)
  ✓ 不涉及特殊功能

1.5 MySQL 生态全景

核心组件

┌─────────────────────────────────────────────┐
│                 应用层                       │
│   Java / Python / Go / PHP / Node.js        │
│         ↓ JDBC / ORM / Driver               │
├─────────────────────────────────────────────┤
│               中间件层                       │
│  ProxySQL / MySQL Router / ShardingSphere    │
│         ↓ 连接池 / 路由 / 读写分离           │
├─────────────────────────────────────────────┤
│               MySQL Server                   │
│  ┌──────────┐  ┌──────────┐  ┌──────────┐   │
│  │ 连接层    │  │ SQL 层   │  │ 存储引擎  │   │
│  │ 认证/线程 │  │ 解析/优化│  │ InnoDB    │   │
│  └──────────┘  └──────────┘  └──────────┘   │
├─────────────────────────────────────────────┤
│               监控/运维                      │
│  Prometheus + Grafana / PMM / pt-tools       │
└─────────────────────────────────────────────┘

常用工具链

类别工具用途
官方工具mysqlshMySQL Shell,交互式管理
备份mysqldump / xtrabackup逻辑备份 / 物理备份
监控Performance Schema内置性能监控
监控PMM (Percona)企业级监控平台
迁移gh-ost / pt-osc在线表结构变更
测试sysbench / mysqlslap基准性能测试
中间件ProxySQL数据库代理
中间件ShardingSphere分布式数据库中间件

1.6 快速体验:30 秒启动 MySQL

如果你想立刻体验 MySQL,用 Docker 一行命令即可:

# 使用 Docker 快速启动 MySQL 8.4
docker run -d \
  --name mysql-quick \
  -e MYSQL_ROOT_PASSWORD=my-secret-pw \
  -p 3306:3306 \
  mysql:8.4

# 进入 MySQL 命令行
docker exec -it mysql-quick mysql -uroot -pmy-secret-pw
-- 进入 MySQL 后,试试以下命令
SELECT VERSION();              -- 查看版本
SHOW DATABASES;                -- 查看所有数据库
CREATE DATABASE demo;          -- 创建数据库
USE demo;                      -- 切换到 demo
CREATE TABLE test (            -- 创建测试表
    id INT PRIMARY KEY AUTO_INCREMENT,
    name VARCHAR(50),
    created_at DATETIME DEFAULT CURRENT_TIMESTAMP
);
INSERT INTO test (name) VALUES ('hello'), ('world');
SELECT * FROM test;            -- 查询数据

业务场景

场景 1:初创公司技术选型

某初创公司要开发一个电商系统,团队 5 人,主要用 Java/Spring Boot。

建议

  • 选择 MySQL 8.0/8.4 LTS,生态成熟,资料丰富
  • 团队学习成本低,ORM(MyBatis/Hibernate)支持完善
  • 初期单机部署即可,后期可平滑升级到主从架构
  • Redis 做缓存,MySQL 做持久化存储

场景 2:从 MySQL 5.7 升级

某公司运行 MySQL 5.7 已 3 年,面临 EOL 风险。

建议

  • 不要直接从 5.7 跳到 8.4,先升级到 8.0 验证兼容性
  • 关注 SQL Mode 变化(8.0 默认更严格)
  • 测试所有存储过程和视图的兼容性
  • 参考 第 19 章:数据迁移

扩展阅读