Mysql系列—2.Mysql简介

目录

1. 什么是 MySQL

2. MySQL 的历史

3. MySQL 知识体系

4.MySQL 5.7 的新特性

5.MySQL 8.0 的新特性


1. 什么是 MySQL

MySQL 是最流⾏的开源数据库(https://db-engines.com/en/ranking)。

MySQL被⼴泛⽤于Web开发、企业应⽤、嵌⼊式系统等各种场景。其稳定性、性能和灵活性使其成为许多开发者 和企业的⾸选数据库系统之⼀。

以下是MySQL的⼀些关键特点和概念:

1. 关系型数据库管理系统(RDBMS):MySQL采⽤关系型数据库模型,数据存储在表格中,表之间通过关系建 ⽴联系。这种结构有助于更有效地组织和管理数据。

2. 开源:MySQL是开源软件(遵循 GPL 协议),⽤户可以免费获取、使⽤、修改和分发它。这使得MySQL成 为许多⼩型和中⼩型项⽬的⾸选数据库。

3. 跨平台性:MySQL可以在各种操作系统上运⾏,包括Windows、Linux、macOS等,提供了很⼤的灵活性。

4. SQL语⾔:MySQL使⽤结构化查询语⾔(SQL)作为与数据库交互的标准语⾔。SQL提供了⼀套强⼤的操作 数据库的命令,包括查询、更新、插⼊和删除等。

5. ACID属性:MySQL遵循ACID属性,确保事务的原⼦性(Atomicity)、⼀致性(Consistency)、隔离性 (Isolation)和持久性(Durability)。

6. 复制和故障转移:MySQL⽀持复制机制,允许将数据从⼀个数据库服务器复制到另⼀个服务器,以实现数据 备份、负载均衡和故障转移。

7. 存储引擎:MySQL⽀持多种存储引擎,如InnoDB、MyISAM等,每种引擎有不同的特性和优势,使⽤户能够 根据具体需求选择合适的存储引擎。

8. ⼤社区和⽀持:由于MySQL的⼴泛使⽤,它拥有庞⼤的社区和⽀持⽹络,⽤户可以在社区中找到⼤量的⽂ 档、教程和解决问题的资源。

2. MySQL 的历史

1995年,MySQL 1.0发布,仅供内部使⽤。

1996年,MySQL 3.11.1发布,直接跳过了MySQL 2.x版本。

1999年,MySQL AB公司成⽴。同年,发布MySQL 3.23,该版本集成了Berkeley DB存储引擎。该引擎由 Sleepycat公司开发,⽀持事务。在集成该引擎的过程中,对源码进⾏了改造,为后续可插拔式存储引擎架构奠定 了基础。

2000年,ISAM升级为MyISAM存储引擎。同年,MySQL基于GPL协议开放源码。

2002年,MySQL 4.0发布,集成了后来⼤名鼎鼎的InnoDB存储引擎。该引擎由Innobase公司开发,⽀持事务,⽀ 持⾏级锁,适⽤于OLTP等⾼并发场景。

2005年,MySQL 5.0发布,开始⽀持游标,存储过程,触发器,视图,XA事务等特性。同年,Oracle收购 Innobase公司。

2008年,Sun以10亿美⾦收购MySQL AB。同年,发布MySQL 5.1,其开始⽀持定时器(Event scheduler),分 区,基于⾏的复制等特性。

2009年,Oracle以74亿美⾦收购Sun公司。 

2010年, MySQL 5.5 发布。

2013年,MySQL 5.6 发布。

2015年,MySQL 5.7 发布。

2018年,MySQL 8.0 发布

3. MySQL 知识体系

4.MySQL 5.7 的新特性


组复制
InnoDB Cluster
多源复制
增强半同步(AFTER_SYNC)
基于WRITESET的并行复制。
在线开启GTID复制。
在线设置复制过滤规则。
在线修改Buffer pool的大小。
在同⼀⻓度编码字节内,修改VARCHAR的大小只需修改表的元数据,无需创建临时表。
可设置NUMA架构的内存分配策略(innodb_numa_interleave)。
透明⻚压缩(Transparent Page Compression)。
UNDO表空间的自动回收。
查询优化器的重构和增强。
可查看当前正在执行的SQL的执行计划(EXPLAIN FOR CONNECTION)。
引入了查询改写插件(Query Rewrite Plugin),可在服务端对查询进⾏改写。
EXPLAIN FORMAT=JSON会显示成本信息,这样可直观的比较两种执行计划的优劣。
引入了虚拟列,类似于Oracle中的函数索引。
新实例不再默认创建test数据库及匿名用户。
引⼊ALTER USER命令,可⽤来修改⽤户密码,密码的过期策略,及锁定⽤户等。
mysql.user表中存储密码的字段从password修改为authentication_string。
表空间加密。
优化了Performance Schema,其内存使用减少。
Performance Schema引入了众多instrumentation。常⽤的有Memory usage instrumentation,可⽤来查
看MySQL的内存使用情况,Metadata Locking Instrumentation,可⽤来查看MDL的持有情况,Stage
Progress instrumentation,可用来查看Online DDL的进度。
同⼀触发事件(INSERT,DELETE,UPDATE),同⼀触发时间(BEFORE,AFTER),允许创建多个触发
器。在此之前,只允许创建一个触发器。
InnoDB原生支持分区表,在此之前,是通过ha_partition接⼝来实现的。
分区表支持可传输表空间特性。
集成了SYS数据库,简化了MySQL的管理及异常问题的定位。
原生持JSON类型,并引入了众多JSON函数。
引入了新的逻辑备份⼯具-mysqlpump,支持表级别的多线程备份。
引入了新的客户端⼯具-mysqlsh,其支持三种语:JavaScript, Python and SQL。两种API:X DevAPI,
AdminAPI,其中,前者可将MySQL作为文档型数据库进行操作,后者用于管理InnoDB Cluster。
mysql_install_db被mysqld --initialize代替,用来进行实例的初始化。
原生支持systemd。
引入了super_read_only选项。
可设置SELECT操作的超时时长(max_execution_time)。
可通过SHUTDOWN命令关闭MySQL实例。
引入了innodb_deadlock_detect选项,在并发场景下,可使用该选项来关闭死锁检测。
引入了Optimizer Hints,可在语句级别控制优化器的⾏为,如是否开启ICP,MRR等,在此之前,只有Index Hints。
GIS的增强,包括使用Boost.Geometry替代之前的GIS算法,InnoDB开始支持空间索引。

5.MySQL 8.0 的新特性


引入了原生的,基于InnoDB的数据字典。数据字典表位于mysql库中,对用户不可见,同mysql库的其它系
统表⼀样,保存在数据目录下的mysql.ibd⽂件中。不再置于mysql目录下。
Atomic DDL。
重构了INFORMATION_SCHEMA,其中,部分表已重构为基于数据字典的视图,在此之前,其为临时表。
PERFORMANCE_SCHEMA查询性能提升,其已内置多个索引。
不可见索引(Invisible index)。
降序索引。
直方图。
公用表表达式(Common table expressions)。
窗⼝函数(Window functions)。
角色(Role)。
资源组(Resource Groups),可⽤来控制线程的优先级及其能使用的资源,目前,能被管理的资源只有CPU。
引入了innodb_dedicated_server选项,可基于服务器的内存来动态设置innodb_buffer_pool_size,
innodb_log_file_size和innodb_flush_method。
快速加列(ALGORITHM=INSTANT)。
JSON字段的部分更新(JSON Partial Updates)。
自增主键的持久化。
可持久化全局变量(SET PERSIST)。
默认字符集由latin1修改为utf8mb4。
默认开启UNDO表空间,且支持在线调整数量(innodb_undo_tablespaces)。在MySQL 5.7中,默认不开启,若要开启,只能初始化时设置。
备份锁。
Redo Log的优化,包括允许多个用户线程并发写⼊log buffer,可动态修改innodb_log_buffer_size。
默认的认证插件由mysql_native_password更改为caching_sha2_password。
默认的内存临时表由MEMORY引擎更改为TempTable引擎,相⽐于前者,后者支持以变⻓⽅式存储
VARCHAR,VARBINARY等变⻓字段。从MySQL 8.0.13开始,TempTable引擎支持BLOB字段。
Grant不再隐式创建用户。
SELECT ... FOR SHARE和SELECT ... FOR UPDATE语句中引入NOWAIT和SKIP LOCKED选项,解决电商场景热点问题。
正则表达式的增强,新增了4个相关函数,REGEXP_INSTR(),REGEXP_LIKE(),REGEXP_REPLACE(),
REGEXP_SUBSTR()。
查询优化器在制定执行计划时,会考虑数据是否在Buffer Pool中。⽽在此之前,是假设数据都在磁盘中。
ha_partition接⼝从代码层移除,如果要使用分区表,只能使用InnoDB存储引擎。
引入了更多细粒度的权限来替代SUPER权限,现在授予SUPER权限会提示warning。
GROUP BY语句不再隐式排序。
MySQL 5.7引入的表空间加密特性可对Redo Log和Undo Log进行加密。
information_schema中的innodb_locks和innodb_lock_waits表被移除,取而代之的是
performance_schema中的data_locks和data_lock_waits表。
引入performance_schema.variables_info表,记录了参数的来源及修改情况。
增加了对于客户端报错信息的统计(performance_schema.events_errors_summary_xxx)。
可统计查询的响应时间分布(call sys.ps_statement_avg_latency_histogram()。
支持直接修改列名(ALTER TABLE ... RENAME COLUMN old_name TO new_name)。
用户密码可设置重试策略(Reuse Policy)。
移除PASSWORD()函数。这就意味着⽆法通过“SET PASSWORD ... = PASSWORD('auth_string') ”命令修改用户密码。
代码层移除Query Cache模块,故Query Cache相关的变量和操作均不再支持。
BLOB, TEXT, GEOMETRY和JSON字段允许设置默认值。
可通过RESTART命令重启MySQL实例。

  • 10
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

奥德彪的蕉

天不生我奥德彪,非洲无人拉香蕉

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值