MySQL 架构

Jun 01, 2016 pm 01:16 PM

MySQL架构和结构分析

官方架构图:

wKioL1NLJNiRnPzbAAn45ZsJsuY067.jpg

MySQL DB 各模块架构图如下:

wKiom1NLJSDxkZwaAALzdV2IEfA203.jpg

MySQL安装方式

wKioL1NLJRjSdsIXAAfglSdvzi8965.jpg

MySQL初始化

wKiom1NLJV2zwKazAAsmeOpZnBI736.jpg

简介:什么是事务;事务: ACID :  事务确保了银行不会弄丢你的钱,而这种特性在应用逻辑设计中是很难实现的,甚至不可实现。一个ACID兼容的数据库服务器,要为事务处理大量的复杂工作确保ACID特性的实现,而这也许是用户未能察觉到的。

事务: ACID :
A :原子性(Atomicity) :一个事务必须被视为一个单独的内部”不可分“的工作单元,以确保整个事务要么全部执行,要么全部回滚。当一个事务具有原子性时,该事务绝对不会被部分执行,要么完全执行,要么根本就不执行。
C:一致性 (consistency):数据库总是从一种一致性状态转换到另一种一致性状态。只要是最终事务没有被提交,任何事务处理过程中所做的数据改变,也不会影响到数据库的内容。

I:隔离性 (leolation) :某个事务的结果只有在完成之后才对其它事务可见

D:持久性(durability) :一旦一个事务提交,事务所做的数据改变是永久的。这意味着数据改变已被记录,即使系统崩溃,数据也不会因此丢失,持久性是个有点模糊的概念,因为实际上持久性也分为很多级别。

隔离: 隔离级别

  read uncommitted :读未提交内容:在read uncommitted 隔离级:所有事务都可以”看到“ 未提交事务的执行结构。(读未提交) 脏读,不可重读,幻读

  read committee :读取提交内容:大多数数据库系统的默认隔离是read committed(但这不是mysql默认的!)它满足了隔离的早先简单定义:一个事务在开始时,只能“看见”已经提交事务所做的改变,一个事务从开始 到提交前,所做的任何数据改变都是不可见的,除非已经提交。这种隔离级别也支持所谓的”不可重复读“(nonrepeatable read)。这意味着用户运行同一语句两次,看到的结果是不同的。(读提交) 不可重读,幻读

  repeatable read :可重读 : repeatable read 隔离解决了 read uncommitted  隔离导致的问题,它确保同一事物的多个实例在并发读取数据时,会”看到同样的“数据行。不过理论上,这会导致另一个棘手的问题:幻读(phantom read).简单来说,幻读指当前用户读取某一范围的数据行时,另一个事务又在该范围内插入了新行,当用户再读取该范围的数据行是,会发现有新的“幻影” (phantom)行。(可重读), 幻读

innodb和falcon存储引擎通过多版本并发控制(multiversion concurrency control) 机制解决了幻读问题。

   serializable :可串行化

   serializable  是最高级别的隔离级,它通过强制事务排序,使之不可能互相冲突,从而解决幻读问题。简言之 serializable 是在每个读的数据行上加上锁。在这个级别上,可能导致大量的超时(timeout)现象和锁竞争(lock contention) 现象。如果用户的应用为了数据的稳定性,需要强制减少并发的话,可以选择这种隔离级。强制事务的串行执行避免了幻读;建议:对事务要求不特别严格的场景下,可以使用读提交 read committee 

ANSI SQL 隔离级别

隔离级别
脏读可能性
不可重复读可能性
幻读可能性
加锁读
READ UNCOMMITTED
YES
YES
YES
NO
READ COMMITTED
NO
YES
YES
NO
REPEATABLE READ
NO
NO
YES
NO
SERIALZABLE
NO
NO
NO
YES

   死锁:是指两个事务或多个事务在同一资源上互相占用,并请求加锁时,而导致的恶性循环现象,当多个事务以不同顺序试图加锁同一资源时。就会产生死锁。任何时间,多个事务同时加锁一个资源,一定产生死锁。

  MVCC:多版本并发控制

   MVCC的实现,是通过保存数据库在某个时间点的快照来实现的,也就是说,不管执行多长时间,每个事务看到的数据都是一致的,根据事务开始的时间不同,每个事务对同一张表,同一时刻看到的数据可能不一样的,
   在MySQL中,每个事务启动时,InnoDB为每个启动的事务提供一个当下时刻的快照
为了实现此功能,InnoDB会为每个表提供两个隐藏的字段,一个用于保存行的创建时间,一个用于保存行的失效时间;
里面存储的是系统版本号:(system version number)
两个隔离级别下有效:read committee 和 repeatable read

简介:什么是事务日志:
               事务日志可使事务处理过程更加高效。和每次数据一改变就能更新磁盘中表的数据,存储引擎可以先更新数据在内存中的拷贝。这非常快,然后,存储引擎将数据 改变记录写入事务日志,它位于磁盘上,因此具有持久性,这相对比较快,因为追加日志事件导致的写操作,只涉及了磁盘很小区域上的顺序 I/O(sequential I/O),而替代了写磁盘中所需要的大量随机I/O,(random I/O).最后,相关进程会在某个时间把表数据更新到磁盘上.因此,大多存储引擎都选用了这种技术,也是通常所说的预写日志(write-athead logging), 利用两次磁盘写入操作把数据改变写入磁盘。 如果说数据更新已写入事务日志,却还未写入磁盘的表中,而发生系统奔溃,存储引擎将会在重启后恢复相关数据改变,具体的恢复方式因存储引擎而异

事 务日志通常放在有冗余的硬件设备上,事务日志一般分为一组或者三个轮流使用 因为现在市场上流行的都是:机械式硬盘:随机读写;(如果把数据直接写入数据库中,因为数据太多,所所以会导致 硬盘随机读写. 可想而知机械师硬盘随机读写那速度可见有多慢,你们懂得.) 顺序读写:(如果把数据库的事务操作 写入事务日志当中,因为写的只是事务日志,而不是真正的数据,所以硬盘会分配连续的磁盘空间 供事务日志写入,速度可见一般!) 事务日志文件:顺序IO:事务日志,一组两个轮流替换,保存在可冗余的设备中 未提交的事务并且还能够回滚你懂得.

MySQL工作模式及常用命令

交互式模式:mysql>

# 交互式模式下的客户端命令	mysql> help # 获取命令帮助	mysql> /? # 同上	mysql> /c # 取消命令执行	mysql> /g # 发送命令至服务器端	mysql> /G # 发送命令至服务器端,垂直显示结果	mysql> /q # 退出	mysql> /! # 执行系统shell命令	mysql> /s # 显示服务器端状态信息	mysql> /. /path/to/mysql_script.sql # 批量执行sql	mysql> /u # 切换数据库# 交互式模式下的服务器端命令(需要命令提示符,默认为分号)	mysql> help contents 能够获取帮助的分类信息	mysql> help keyword 获取关键字的帮助信息,如help select
登录后复制

脚本模式:mysql

注:常用于主从复制批量导入数据时

 

连接MySQL

连接类型

本地通信:客户端与服务器端位于同一主机,而且还要基于127.0.0.1(localhost)地址或lo接口进行通信

   基于sock文件通信:如mysql -hlocalhost -uroot -p --socket=/tmp/mysql.sock

远程通信:客户端与服务器端位于不同的主机,或在同一主机使用非回环地址通信

   基于 TCP socket通信

mysql客户端选项

实例

-u,--user # 指定连接用户-h,--host # 指定连接主机-p,--password # 指定连接密码--protocol={tcp|socket|memory|pipe} # 指定连接协议-P,--port # 指定连接端口,默认监听端口:tcp/3306--socket # 指定本地连接的sock文件--compress # 数据传输采用压缩格式-D,--database # 指定连接后默认使用的数据库-H,--html # 指定产生html输出-X,--xml # 指定产生xml输出--safe-updates # 拒绝使用无where子句的update或delete命令# 使用实例:mysql -hlocalhost -uroot -p
登录后复制

mysql命令提示符

mysql> # 等待输入命令-> # 等待继续输入‘> # 等待结束单引号“> # 等待结束双引号`> # 等待结束反引号/*> # 注释,不执行,需以*/结束注释
登录后复制

mysql的快捷键

ctrl+w:# 删除光标之前的单词ctrl+u:# 删除光标之前至命令行首的所有内容ctrl+y:# 粘贴所有ctrl+w或ctrl+u删除的内容ctrl+a:# 移动光标至行首ctrl+e:# 移动光标至行尾<strong> </strong>
登录后复制

MySQL管理工具mysqladmin

# 使用格式:mysqladmin [options] command [arg] [,command [arg]] …# 常用的command包括:create DB_Name:# 创建数据库drop DB_Name:# 删除数据库debug:# 打开调试日志并记录于error log中status:# 显示简要状态信息--sleep #:设置间隔时长--count #:设置显示的批次extended-status:# 显示扩展信息,输出mysqld的各状态变量及赋值,相当于执行“mysql> show global status”variables:# 输出mysqld的各服务器变量flush-hosts:# 清空主机相关的缓存:DNS解析缓存;此前因为连接错误次数过多而被拒绝访问mysqld的主机列表flush-logs:# 日志滚动,只能滚动二进制日志和中继日志refresh:# 相当于同时使用flush-hosts和flush-logsflush-privileges:# 通知mysqld重读授权表reload:# 功能同“flush-privileges”flush-status:# 重置状态变量的值flush-tables:# 关闭当前打开的表文件句柄flush-threads:# 清空线程缓存kill:# 杀死指定的线程,需指定线程ID;可以一次杀死多个线程,以逗号分隔,但不能有多余空格password:# 修改当前用户的密码ping:# 模拟ping操作,检测mysqld是否在线processlist:# 显示mysqld线程列表shutdown:# 关闭mysqld进程start-slave,stop-slave:# 启动/关闭从服务器线程
登录后复制

MySQL数据文件解析

MyISAM表:每表有3个文件,都位于数据库目录中

tb_name.frm:# 表结构定义文件tb_name.MYD:# 数据文件tb_name.MYI:# 索引文件
登录后复制

InnoDB表:有2种存储方式

默认方式:每表有1个独立文件和一个多表共享的文件

tb_name.frm:# 表结构定义文件,位于数据库目录中ibdata#:# 共享的表空间文件,默认位于数据目录(datadir指向的目录)中,如ibdata1
登录后复制

自定义方式:独立的表空间

tb_name.frm:#表结构定义文件tb_name.ibd:# 独有的表空间文件# 在MySQL初始化中打开独立表空间功能的方法:vi /etc/my.cnf (在[mysqld]段下添加)innodb_file_per_table = ON# 注:表空间:table space,是由InnoDB管理的特有格式的数据文件,内部可同时存储数据和索引
登录后复制
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover

AI Clothes Remover

用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

Video Face Swap

Video Face Swap

使用我们完全免费的人工智能换脸工具轻松在任何视频中换脸!

热门文章

<🎜>:泡泡胶模拟器无穷大 - 如何获取和使用皇家钥匙
4 周前 By 尊渡假赌尊渡假赌尊渡假赌
北端:融合系统,解释
4 周前 By 尊渡假赌尊渡假赌尊渡假赌
Mandragora:巫婆树的耳语 - 如何解锁抓钩
4 周前 By 尊渡假赌尊渡假赌尊渡假赌
<🎜>掩盖:探险33-如何获得完美的色度催化剂
2 周前 By 尊渡假赌尊渡假赌尊渡假赌

热工具

记事本++7.3.1

记事本++7.3.1

好用且免费的代码编辑器

SublimeText3汉化版

SublimeText3汉化版

中文版,非常好用

禅工作室 13.0.1

禅工作室 13.0.1

功能强大的PHP集成开发环境

Dreamweaver CS6

Dreamweaver CS6

视觉化网页开发工具

SublimeText3 Mac版

SublimeText3 Mac版

神级代码编辑软件(SublimeText3)

热门话题

Java教程
1677
14
CakePHP 教程
1429
52
Laravel 教程
1333
25
PHP教程
1278
29
C# 教程
1257
24
MySQL的角色:Web应用程序中的数据库 MySQL的角色:Web应用程序中的数据库 Apr 17, 2025 am 12:23 AM

MySQL在Web应用中的主要作用是存储和管理数据。1.MySQL高效处理用户信息、产品目录和交易记录等数据。2.通过SQL查询,开发者能从数据库提取信息生成动态内容。3.MySQL基于客户端-服务器模型工作,确保查询速度可接受。

MySQL与其他编程语言:一种比较 MySQL与其他编程语言:一种比较 Apr 19, 2025 am 12:22 AM

MySQL与其他编程语言相比,主要用于存储和管理数据,而其他语言如Python、Java、C 则用于逻辑处理和应用开发。 MySQL以其高性能、可扩展性和跨平台支持着称,适合数据管理需求,而其他语言在各自领域如数据分析、企业应用和系统编程中各有优势。

初学者的MySQL:开始数据库管理 初学者的MySQL:开始数据库管理 Apr 18, 2025 am 12:10 AM

MySQL的基本操作包括创建数据库、表格,及使用SQL进行数据的CRUD操作。1.创建数据库:CREATEDATABASEmy_first_db;2.创建表格:CREATETABLEbooks(idINTAUTO_INCREMENTPRIMARYKEY,titleVARCHAR(100)NOTNULL,authorVARCHAR(100)NOTNULL,published_yearINT);3.插入数据:INSERTINTObooks(title,author,published_year)VA

解释InnoDB缓冲池及其对性能的重要性。 解释InnoDB缓冲池及其对性能的重要性。 Apr 19, 2025 am 12:24 AM

InnoDBBufferPool通过缓存数据和索引页来减少磁盘I/O,提升数据库性能。其工作原理包括:1.数据读取:从BufferPool中读取数据;2.数据写入:修改数据后写入BufferPool并定期刷新到磁盘;3.缓存管理:使用LRU算法管理缓存页;4.预读机制:提前加载相邻数据页。通过调整BufferPool大小和使用多个实例,可以优化数据库性能。

MySQL:结构化数据和关系数据库 MySQL:结构化数据和关系数据库 Apr 18, 2025 am 12:22 AM

MySQL通过表结构和SQL查询高效管理结构化数据,并通过外键实现表间关系。1.创建表时定义数据格式和类型。2.使用外键建立表间关系。3.通过索引和查询优化提高性能。4.定期备份和监控数据库确保数据安全和性能优化。

学习MySQL:新用户的分步指南 学习MySQL:新用户的分步指南 Apr 19, 2025 am 12:19 AM

MySQL值得学习,因为它是强大的开源数据库管理系统,适用于数据存储、管理和分析。1)MySQL是关系型数据库,使用SQL操作数据,适合结构化数据管理。2)SQL语言是与MySQL交互的关键,支持CRUD操作。3)MySQL的工作原理包括客户端/服务器架构、存储引擎和查询优化器。4)基本用法包括创建数据库和表,高级用法涉及使用JOIN连接表。5)常见错误包括语法错误和权限问题,调试技巧包括检查语法和使用EXPLAIN命令。6)性能优化涉及使用索引、优化SQL语句和定期维护数据库。

MySQL:初学者的基本技能 MySQL:初学者的基本技能 Apr 18, 2025 am 12:24 AM

MySQL适合初学者学习数据库技能。1.安装MySQL服务器和客户端工具。2.理解基本SQL查询,如SELECT。3.掌握数据操作:创建表、插入、更新、删除数据。4.学习高级技巧:子查询和窗口函数。5.调试和优化:检查语法、使用索引、避免SELECT*,并使用LIMIT。

在MySQL中解释外键的目的。 在MySQL中解释外键的目的。 Apr 25, 2025 am 12:17 AM

在MySQL中,外键的作用是建立表与表之间的关系,确保数据的一致性和完整性。外键通过引用完整性检查和级联操作维护数据的有效性,使用时需注意性能优化和避免常见错误。

See all articles