1. MySQL 的发展历史
MySQL 是一个开源关系型数据库,由瑞典 MySQL AB 公司开发,后被 Sun 公司收购(2008),最终被 Oracle 公司收购(2009),发展历史如下。
| 时间 | 版本 | 事件 |
|---|---|---|
| 1995 | - | 第一个内部版本发布,支持基本的 SQL 功能。 |
| 1995 | 3.11 | MySQL 正式发布(版本 3.11),最初仅支持简单的表操作。 |
| 2001 | - | 成立 MySQL AB 公司,提供商业支持和增值服务(如企业版) |
| 2003 | 4.0 | 支持事务(InnoDB 引擎)、UNION 查询。 |
| 2004 | 4.1 | 支持子查询、UTF-8 字符集。 |
| 2005 | 5.0 | 引入存储过程、触发器、视图、游标等高级功能。 |
| 2008 | 5.1 | 发布,支持分区表、事件调度器。 |
| 2008 | - | Sun Microsystems 以 10亿美元 收购 MySQL AB,推动进一步开源化。 |
| 2009 | - | Oracle 收购 Sun Microsystems,间接控制 MySQL,MariaDB 诞生。 |
| 2010 | 5.5 | 默认启用 InnoDB 引擎,优化性能和复制功能。 |
| 2013 | 5.6 | 改进全文检索、NoSQL 接口(Memcached API)、GTID 复制。 |
| 2013 | 5.7 | 支持 JSON 数据类型、多源复制、性能大幅提升。 |
| 2018 | 8.0 | MySQL 发布模式变为:创新(Innovation)版本和 LTS 版本。 |
| 2024 | 8.4 | 第一个 LTS 出现。 |
| - | 9.0 | 正在开发中。 |
从 8.0 开始变更的发布模式如下图:

2. 数据库设计范式
数据库设计范式是一组规范化的指导原则,用于减少数据冗余和提高数据完整性。
3. 数据库的基本操作
4. 数据表的基本操作
5. 数据类型和运算符
6. 查询
7. 增删改
8. 存储过程和函数
9. 视图
10. 触发器
11. MySQL 权限控制
12. MySQL 日志
13. 性能优化
13.1 操作系统和硬件优化
一般来说,服务器的硬件我们主要关注三个方面,CPU、内存和磁盘。
- CPU如果持续保持使用率100%,那必然会有一些数据库连接或处理产生较大的延迟,进而影响到业务。
- 如果由于内存不足,而导致数据库必须要硬盘中获取数据,那性能开销是非常大的,因为磁盘和内存的访问速度完全不在一个数量级上。所以一个大内存是必要的。
- 对于硬盘来说,SSD通常比HDD快10-20倍,所以应当优先选用固态硬盘而不是机械硬盘。
13.2 索引优化
索引,在MySQL中也叫作键(key),是存储引擎用于快速找到记录的一种数据结构。 索引的本质就是拿空间换时间,索引就好比一本书的目录部分,当你查找内容的时候会先检索目录部分,而不是去全本逐页翻看,得到页码后直接翻到对应的页码,由于目录部分比较少,所以查找比较快,。但是由于目录部分也会占用一部分纸张(对应于计算机的存储),所以相当于是拿一部分纸张来换取快速查找的体验。
13.3 查询性能优化
1. 优化数据访问
是否向数据库请求了不需要的数据?
如果一个查询性能很差,最常见的原因是访问的数据太多,比如我们只需要查询一个用户表的姓名和性别,但是却使用了
select *语法,导致查询变慢。
2. 重构查询的方式
是否可以切分查询?
以删除历史数据为例,如果一次性删除过多的数据,可能需要一次锁住很多数据、占满整个事务日志、耗尽系统资源、阻塞很多小的但重要的查询。如果这时将一个大的DELETE语句切分成多个较小的查询则可以尽可能小的影响MySQL的性能。
3. 优化联接查询
- 确保ON或USING子句中的列上有索引。一般来说,只需在联接顺序的第二个表的相应列上创建索引。
- 确保任何
GROUP BY和ORDER BY中的表达式只涉及到一个表中的列。
14. 数据备份与恢复
15. MySQL 主从复制
主从同步开始的前提是要同步的数据库或数据表,在主从服务器上的状态是一致的,所以需要先手动同步。
- 主库开启binlog,设置server_id
- 主库数据导出,写入从库
- 从库设置server_id,master_info(地址,账密,同步位置),启动replica
- 完成主从配置。
如果从库数据修改导致失败,需要先 stop replica; 然后手动修正数据,reset slave清除从库位置信息,change master to 重新设置位置,然后start replica即可。