1.1

这一部分讲了mysql的架构(客户端+服务器)。客户端将信息发送到服务器,服务器进行处理。
这里的信息是广义的,既有登录用的信息,又有日常写的sql。

1.2

这一节没什么特殊的,就是讲mysql的安装。我在mac上安装时也是默认路径(/usr/local/bin)
这一部分还列出了bin目录下的可执行文件,下一小节进行介绍。

1.3

这一部分讲如何启动mysql,主要是利用上一节提到的可执行文件。

mysqld

代表服务器程序,启动它就多了一个服务器进程

mysqld_safe

启动脚本,会调用mysqld并进行监控,还可以重启服务器进程。出错会输出到出错日志里,默认是个以.err为扩展名的文件。

mysql.server

也是启动脚本,会调用mysqld_safe

mysqld_multi

启动或停止多个服务器进程。

对我来说windows部分是个彩蛋。我头一次看到有人讲有关windows服务相关的内容。之前都是百度命令敲。

1.4

这一部分讲如何启动mysql客户端并与服务器端连接。
-u -p天天用,-h之前不太了解,这个用于指定ip地址。

还可以写全称 --user=xxx, --password=xxx

1.5

这一部分讲客户端与服务器连接的过程。其实主要就是进程间通信有哪些方法。
TCP/IP

远端连接用,默认3306端口,可以用-P参数指定别的端口

命名管道和共享内存

书上只提了windows。然而linux也有命名管道和共享内存啊?不让用吗?

unix套接字

也就是socket。我记得tcp/ip应该包含在socket里。socket支持tcp udp等。不知道为什么作者把tcp单独拿出来。
而且这里的socket没有怎么提这些,主要是讲有一个socket文件。

1.6

讲连接管理,也类似于一条sql执行的过程。

先要获取连接。服务器每与一个新的客户端连接,就要分配一个新的线程去处理客户端传来的内容。注意这里是分配而非创建,这是因为服务器通常要采用线程池技术。

然后查询缓存。当然查询缓存在现在8x版本已经废弃了。没废弃的时候大家基本也不用。作者说mysql的缓存只能针对一模一样的sql语句,即使多个空格也会失效。
这里是个很好的设计,因为大多数时候sql语句是不会变的。程序发来的sql通常是固定的(比如由框架生成),不会多什么空格之类的。个人理解mysql也可以实现别的缓存,比如缓存关系代数树。但这样的代价更大。

接着是词法分析和语法分析。词法分析看能不能分成tokens,语法分析看tokens的组织是否合理。

再然后是查询优化。这里会根据逻辑计划生成物理计划。查询优化可能会重新变更表达式树,可能会决定具体的连接顺序,等等。

最后要和存储引擎交互,去读取和存储数据。作者这里解释存储引擎解释地很好,就是一个封装了存储和提取的模块。

1.7

没啥说的,基本都是学InnoDB

1.8

讲了如何指定存储引擎,修改存储引擎。