您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 项目/工程管理 > MySQL-是怎样运行的:从根儿上理解-MySQL(上)
0. ⽬录1. 1. 装作⾃⼰是个⼩⽩ —— 重新认识MySQL2. 2. MySQL的调控按钮 —— 启动选项和系统变量3. 3. 乱码的前世今⽣ —— 字符集和⽐较规则4. 4. 从⼀条记录说起—— InnoDB 记录结构5. 5. 盛放记录的⼤盒⼦ —— InnoDB 数据⻚结构6. 6. 快速查询的秘籍 —— B+ 树索引7. 7. 好东⻄也得先学会怎么⽤ —— B+ 树索引的使⽤8. 8. 数据的家 —— MySQL 的数据⽬录9. 9. 存放⻚⾯的⼤池⼦ —— InnoDB 的表空间10. 10. 条条⼤路通罗⻢ —— 单表访问⽅法11. 11. 两个表的亲密接触 —— 连接的原理12. 12. 谁昀便宜就选谁 —— MySQL 基于成本的优化13. 13. 兵⻢未动,粮草先⾏ —— InnoDB 统计数据是如何收集的14. 14. 不好看就要多整容 —— MySQL 基于规则的优化(内含关于⼦查询优化⼆三事⼉)15. 15. 查询优化的百科全书 —— Explain 详解(上)16. 16. 查询优化的百科全书 —— Explain 详解(下)17. 17. 神兵利器 —— optimizer trace 的神器功效18. 18. 调节磁盘和CPU的⽭盾 —— InnoDB 的 Buffer Pool19. 19. 从猫爷被杀说起 —— 事务简介20. 20. 说过的话就⼀定要办到 —— redo ⽇志(上)21. 21. 说过的话就⼀定要办到 —— redo ⽇志(下)22. 22. 后悔了怎么办 —— undo ⽇志 (上)23. 23. 后悔了怎么办 —— undo ⽇志 (下)24. 24. ⼀条记录的多幅⾯孔 —— 事务的隔离级别与MVCC25. 25. ⼯作⾯试⽼⼤难 —— 锁1. 装作⾃⼰是个⼩⽩ —— 重新认识MySQL初识MySQL标签: MySQL是怎样运⾏的MySQL的客户端/服务器架构以我们平时使⽤的微信为例,它其实是由两部分组成的,⼀部分是客户端程序,⼀部分是服务器程序。客户端可能有很多种形式,⽐如⼿机APP,电脑软件或者是⽹⻚版微信,每个客户端都有⼀个唯⼀的⽤户名,就是你的微信号,另⼀⽅⾯,腾讯公司在他们的机房⾥运⾏着⼀个服务器软件,我们平时操作微信其实都是⽤客户端来和这个服务器来打交道。⽐如狗哥⽤微信给猫爷发了⼀条消息的过程其实是这样的:1. 消息被客户端包装了⼀下,添加了发送者和接收者信息,然后从狗哥的微信客户端传送给微信服务器;2. 微信服务器从消息⾥获取到它的发送者和接收者,根据消息的接收者信息把这条消息送达到猫爷的微信客户端,猫爷的微信客户端⾥就显示出狗哥给他发了⼀条消息。MySQL的使⽤过程跟这个是⼀样的,它的服务器程序直接和我们存储的数据打交道,然后可以有好多客户端程序连接到这个服务器程序,发送增删改查的请求,然后服务器就响应这些请求,从⽽操作它维护的数据。和微信⼀样,MySQL的每个客户端都需要提供⽤户名密码才能登录,登录之后才能给服务器发请求来操作某些数据。我们⽇常使⽤MySQL的情景⼀般是这样的:1. 启动MySQL服务器程序。2. 启动MySQL客户端程序并连接到服务器程序。3. 在客户端程序中输⼊⼀些命令语句作为请求发送到服务器程序,服务器程序收到这些请求后,会根据请求的内容来操作具体的数据并向客户端返回操作结果。我们知道计算机很⽜逼,在⼀台计算机上可以同时运⾏多个程序,⽐如微信、QQ、⾳乐播放器、⽂本编辑器啥的,每⼀个运⾏着的程序也被称为⼀个进程。我们的MySQL服务器程序和客户端程序本质上都算是计算机上的⼀个进程,这个代表着MySQL服务器程序的进程也被称为MySQL数据库实例,简称数据库实例。每个进程都有⼀个唯⼀的编号,称为进程ID,英⽂名叫PID,这个编号是在我们启动程序的时候由操作系统随机分配的,操作系统会保证在某⼀时刻同⼀台机器上的进程号不重复。⽐如你打开了计算机中的QQ程序,那么操作系统会为它分配⼀个唯⼀的进程号,如果你把这个程序关掉了,那操作系统就会把这个进程号回收,之后可能会重新分配给别的进程。当我们下⼀次再启动 QQ程序的时候分配的就可能是另⼀个编号。每个进程都有⼀个名称,这个名称是编写程序的⼈⾃⼰定义的,⽐如我们启动的MySQL服务器进程的默认名称为mysqld, ⽽我们常⽤的MySQL客户端进程的默认名称为mysql。MySQL的安装不论我们通过下载源代码⾃⾏编译安装的⽅式还是直接使⽤官⽅提供的安装包进⾏安装之后,MySQL的服务器程序和客户端程序都会被安装到我们的机器上。不论使⽤上述两者的哪种安装⽅式,⼀定⼀定⼀定(重要的话说三遍)要记住你把MySQL安装到哪了,换句话说,⼀定要记住MySQL的安装⽬录。⼩贴⼠: `MySQL`的⼤部分安装包都包含了服务器程序和客户端程序,不过在Linux下使⽤RPM包时会有单独的服务器RPM包和客户端RPM包,需要分别安装。另外,MySQL可以运⾏在各种各样的操作系统上,我们后边会讨论在类UNIX操作系统和Windows操作系统上使⽤的⼀些差别。为了⽅便⼤家理解,我在macOS 操作系统(苹果电脑使⽤的操作系统)和Windows操作系统上都安装了MySQL,它们的安装⽬录分别是:macOS操作系统上的安装⽬录:/usr/local/mysql/Windows操作系统上的安装⽬录:C:\Program Files\MySQL\MySQL Server 5.7下边我会以这两个安装⽬录为例来进⼀步扯出更多的概念,不过⼀定要注意,这两个安装⽬录是我的运⾏不同操作系统的机器上的安装⽬录,⼀定要记着把下边示例中⽤到安装⽬录的地⽅替换为你⾃⼰机器上的安装⽬录。⼩贴⼠: 类UNIX操作系统⾮常多,⽐如FreeBSD、Linux、macOS、Solaris等都属于UNIX操作系统的范畴,我们这⾥使⽤macOS操作系统代表类UNIX操作系统来运⾏MySQL。bin⽬录下的可执⾏⽂件在MySQL的安装⽬录下有⼀个特别特别重要的bin⽬录,这个⽬录下存放着许多可执⾏⽂件,以macOS系统为例,这个bin⽬录的绝对路径就是(在我的机器上):/usr/local/mysql/bin我们列出⼀些在macOS中这个bin⽬录下的⼀部分可执⾏⽂件来看⼀下(⽂件太多,全列出来会刷屏的):.├── mysql├── mysql.server - ../support-files/mysql.server├── mysqladmin├── mysqlbinlog├── mysqlcheck├── mysqld├── mysqld_multi├── mysqld_safe├── mysqldump├── mysqlimport├── mysqlpump... (省略其他⽂件)0 directories, 40 filesWindows中的可执⾏⽂件与macOS中的类似,不过都是以.exe为扩展名的。这些可执⾏⽂件都是与服务器程序和客户端程序相关的,后边我们会详细唠叨⼀些⽐较重要的可执⾏⽂件,现在先看看执⾏这些⽂件的⽅式。对于有可视化界⾯的操作系统来说,我们拿着⿏标点点点就可以执⾏某个可执⾏⽂件,不过现在我们更关注在命令⾏环境下如何执⾏这些可执⾏⽂件,命令⾏通俗的说就是那些⿊框框,这⾥的指的是类UNIX系统中的Shell或者Windows系统中的cmd.exe,如果你现在还不知道怎么启动这些命令⾏⼯具,⽹上搜搜吧~ 下边我们以macOS系统为例来看看如何启动这些可执⾏⽂件(Windows中的操作是类似的,依葫芦画瓢就好了)使⽤可执⾏⽂件的相对/绝对路径假设我们现在所处的⼯作⽬录是MySQL的安装⽬录,也就是/usr/local/mysql,我们想启动bin⽬录下的mysqld这个可执⾏⽂件,可以使⽤相对路径来启动:./bin/mysqld或者直接输⼊mysqld的绝对路径也可以:/usr/local/mysql/bin/mysqld将该bin⽬录的路径加⼊到环境变量PATH中如果我们觉得每次执⾏⼀个⽂件都要输⼊⼀串⻓⻓的路径名贼麻烦的话,可以把该bin⽬录所在的路径添加到环境变量PATH中。环境变量PATH是⼀系列路径的集合,各个路径之间使⽤冒号:隔离开,⽐⽅说我的机器上的环境变量PATH的值就是:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin我的系统中这个环境变量PATH的值表明:当我在输⼊⼀个命令时,系统便会在/usr/local/bin、/usr/bin:、/bin:、/usr/sbin、/sbin这些⽬录下依次寻找是否存在我们输⼊的那个命令,如果寻找成功,则执⾏该⽬录下对应的可执⾏⽂件。所以我们现在可以修改⼀下这个环境变量PATH,把MySQL安装⽬录下的bin⽬录的路径也加⼊到PATH中,在我的机器上修改后的环境变量PATH的值为:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/mysql/bin这样现在不论我们所处的⼯作⽬录是啥,我们都可以直接输⼊可执⾏⽂件的名字就可以启动它,⽐如这样:mysqld⽅便多了哈~⼩贴⼠: 关于啥是环境变量以及如何在当前系统中添加或修改系统变量不是我们唠叨的范围,⼤家找本相关的书或者上⽹查⼀查哈~启动MySQL服务器程序UNIX⾥启动服务器程序在类UNIX系统中⽤来启动MySQL服务器程序的可执⾏⽂件有很多,⼤多在MySQL安装⽬录的bin⽬录下,我们⼀起来瞅瞅。mysqldmysqld这个可执⾏⽂件就代表着MySQL服务器程序,运⾏这个可执⾏⽂件就可以直接启动⼀个服务器进程。但这个命令不常⽤,我们继续往下看更⽜逼的启动命令。mysqld_safemysqld_safe是⼀个启动脚本,它会间接的调⽤mysqld,⽽且还顺便启动了另外⼀个监控进程,这个监控进程在服务器进程挂了的时候,可以帮助重启它。另外,使⽤mysqld_safe启动服务器程序时,它会将服务器程序的出错信息和其他诊断信息重定向到某个⽂件中,产⽣出错⽇志,这样可以⽅便我们找出发⽣错误的原因。mysql.servermysql.server也是⼀个启动脚本,它会间接的调⽤mysqld_safe,在调⽤mysql.server时在后边指定start参数就可以启动服务器程序了,就像这样:mysql.server start需要注意的是,这个 ḿỳšrĺ šeřṽeř ⽂件其实是⼀个链接⽂件,它的实际⽂件是 –šùṗṗöřṱ‣f ĺeš–ḿỳšrĺ šeřṽeř。我使⽤的macOS操作系统会帮我们在bin⽬录下⾃动创建⼀个指向实际⽂件的链接⽂件,如果你的操作系统没有帮你⾃动创建这个链接⽂件,那就⾃⼰创建⼀个呗~ 别告诉我你不会创建链接⽂件,上⽹搜搜呗~另外,我们还可以使⽤mysql.server命令来关闭正在运⾏的服务器程序,只要把start参数换成stop就好了:mysql.server stopmysqld_multi其实我们⼀台计算机上也可以运⾏多个服务器实例,也就是运⾏多个MySQL服务器进程。mysql_multi可执⾏⽂件可以对每⼀个服务器进程的启动或停⽌进⾏监控。这个命令的使⽤⽐较复杂,本书主要是为了讲清楚MySQL服务器和客户端运⾏的过程,不会对启动多个服务器程序进⾏过多唠叨。Windows⾥启动服务器程序Windows⾥没有像类UNIX系统中那么多的启动脚本,但是也提供了⼿动启动和以服务的形式启动这两种⽅式,下边我们详细看。mysqld同样的,在MySQL安装⽬录下的bin⽬录下有⼀个mysqld可执⾏⽂件,在命令⾏⾥输⼊mysqld,或者直接双击运⾏它就算启动了MySQL服务器程序了。以服务的⽅式运⾏服务器程序⾸先看看啥是个Windows 服务?如果⽆论是谁正在使⽤这台计算机,我们都需要⻓时间的运⾏某个程序,⽽且需要在计算机启动的时候便启动它,⼀般我们都会把它注册为⼀个Windows 服务,操作系统会帮
本文标题:MySQL-是怎样运行的:从根儿上理解-MySQL(上)
链接地址:https://www.777doc.com/doc-6685121 .html