包装设计网站免费,招投标网站建设,大型视频网站建设方案,网站主页面设计模板初识 MySQL通信介绍MySQL 也是典型的 C / S 模型#xff0c;分为客户端及服务端#xff0c;服务端一般部署在远端服务器中#xff0c;也可以部署至本地#xff0c;然后客户端跟服务端通信则可以使用依赖网络的 TCP 长连接或 Unix-like 的系统下可以使用 Socket文件的形式通…初识 MySQL通信介绍MySQL 也是典型的 C / S 模型分为客户端及服务端服务端一般部署在远端服务器中也可以部署至本地然后客户端跟服务端通信则可以使用依赖网络的 TCP 长连接或 Unix-like 的系统下可以使用 Socket文件的形式通信连接阶段客户端跟服务器端通信MySQL 服务器会维护为每个客户端请求建立一个线程专门处理请求连接可以通过 SSL 保证传输安全性实际情况一般都是通过 SSL 访问跳板机再通过内网地址访问到 MySQL 服务器MySQL 服务器也会通过用户名密码主机信息来做认证判断是否提供对应权限的服务查询缓存阶段MySQL 服务器为提供查询效率所以加入了全局缓存当缓存命中时可以直接返回结果。但是实际两个请求只要有任何字符上的不一样都会导致缓存不能命中同时对于读写相差不多或写多读少的表每次写操作都会导致缓存失效造成不必要的开销所以在 MySQL 5.7 版本中该功能以及被废弃MySQL 8.0 版本中被移除语法解析阶段如果缓存没有命中MySQL 服务接下去就会开始解析 SQL 语句如果有语法错误则直接返回至客户端没有问题则会将 SQL 语句转换为 MySQL 内部的数据结构(解析树)查询优化语法解析之后MySQL 服务器已经知道客户端想如何去获取数据接下来服务器会对语句的执行进行优化例如外连接转换为内连接表达式简化子查询转换为连接之类的这部分优化不会对查询结果有影响类似于数学上的因式分解但是执行效率更高。完成优化后生成的结果就是执行计划这时根据执行计划就可以知道该从哪个表使用哪个索引查询哪些数据等所有的具体操作。我们可以使用 EXPLAIN 语句查询某个 SQL 的执行计划然后对 SQL 进行优化存储引擎当拥有执行计划后MySQL 服务接下去就要真正的去持久化的区域将数据取出来交给客户端这里为了能支持各种各样的持久化策略MySQL 对下层的所有控制都依赖于统一的存储引擎 API然后不同的存储引擎提供各自的具体实现不同的存储引擎目标场景不同实现方式与特性也不同可以根据实际场景进行选择场景的存储引擎如下存储引擎描述ARCHIVE用于数据存档 (行插入后不能再被修改)CSV在存储数据时以逗号分隔各个数据项InnoDB具备外键功能的事务存储引擎MERGE用来管理多个 MyISAM 表构成的表集合NDBMySQL 集群专用存储引擎BLACKHOLE丢弃写操作读操作会返回空内容FEDERATED用来远程访问表MEMORY置于内存的表MyISAM主要的非事务处理存储引擎数据库可以配置一个默认的存储引擎而每个表还可以单独指定一个不同的存储引擎例如MySQL 调控MySQL 服务器正常运行会有非常多的配置参数并且这些参数是支持根据实际场景进行修改的主要有 **启动选项 ** 和 配置文件 的方式启动选项常规在命令行下使用一个命令为了让这个命令根据用户不同的需求产生不能的行为都会传递一个这个命令支持的选项参数然后命令解析到这个参数后就会按固定的行为来工作比如 ls 表示将当前目录下的文件信息都展示出来而 ls -l 通过传递一个 -l 的选项表示修改展示的内容及方式这种类似的操作就是传递启动选项MySQL 服务器在启动时也支持大量的启动选项启动选项一般包含长形式和短形式比如 MySQL 服务器配置监听主机名的选项长形式就是 –host而短形式就是 -h他们的作用是相同的相当于短地址数量有限所有只有一些常用的选项有短形式注意选项名区分大小写所以 -p 与 -P 完全不一样而短形式指定选项时可以跟空格也可以不跟(-p有些特殊-p和密码值之间是不能用空格的)所以 -P 3306 和 -P3306 是一样的配置文件启动选项仅针对单次启动生效也就是不会将配置进行持久化而配置文件是持久化到本地的所以不需要每次启动时都输入所以非常方便Unix like 操作系统下默认 MySQL 服务器会从以下路径来寻找配置文件路径备注/etc/my.cnf/etc/mysql/my.cnfSYSCONFDIR/my.cnf$MYSQL_HOME/my.cnf特定于服务器的选项defaults-extra-file命令行指定的额外配置文件路径~/.my.cnf用户特定选项~/.mylogin.cnf用户特定的登录路径选项(仅限客户端)说明1、 SYSCONFDIR 表示在使用 CMake 构建时使用 SYSCONFDIR 选项指定的目录通常情况下默认配置是编译安装目录下的 etc 目录2、 MYSQL_HOME 是自定义的环境变量可配可不配仅代表可以自定义放置配置文件的路径3、 ~ 表示跟当前登录用户相关也就是根据用户不同的配置方式放置到每个用户自己的目录下4、 defaults-extra-file 表示在启动 MySQL 服务是指定的编译文件的目录例如mysqld --defaults-extra-file/tmp/my.cnf 这样启动则会访问 /tmp/my.cnf 这个路径下的配置文件配置文件的内容配置文件的启动选项被分为若干个组每个组有个组名用中括号包裹对应到启动选项中配置的这两个选项的使用方式应该类似于mysqld --option1 --option2value2其次是分组的适用范围1、 server 分组表示所有 MySQL 服务器程序都会读取使用2、 client 分组表示所有 MySQL 客户端程序都会读取使用3、 mysqld 命令启动 MySQL 服务器程序会读取 [mysqld][server]4、 mysqld_safe 命令启动 MySQL 服务器程序会读取 [mysqld][server][mysqld_safe]5、 mysql.server 命令启动 MySQL 服务器程序会读取 [mysqld][server][mysql.server]6、 mysql 命令启动客户端程序会读取 [mysql][client]7、 mysqladmin 命令启动客户端程序会读取 [mysqladmin][client]8、 mysqldump 命令启动客户端程序会读取 [mysqldump ][client]注意同一个配置文件中多个组都修改了同一个选项并且这几个组都能被读取则按从上到下的顺序进行读取也就是最后一个配置会覆盖之前的配置项系统变量除了监听的端口ip等参数以外MySQL 服务还有大量的系统变量能影响 MySQL 服务程序的行为跟之前的区别在于这些系统变量除了配置文件和启动选项能修改外还支持通过 SQL 动态的更改例如 default_storage_engine 表示 MySQL 服务默认的储存引擎max-connections 表示 MySQL 服务默认的储存引擎通过启动选项的方式配置如下通过配置文件的方式配置参考如下而通过 SQL 语句配置参考如下变量作用范围与一般编程语言相似MySQL 的系统系统变量也有作用范围的说法不过不是全局和局部而是全局跟用户如果是 GLOBAL 下修改了这个参数则对所有 MySQL 用户而言都以最新的参数进行工作而在 SESSION 下修改了这个参数则仅对当前的 MySQL 用户生效另外不是所有的系统变量都有两种作用范围的比如 max-connections 只具有 GLOBAL 的作用范围而 insert_id 只具有 SESSION 的作用范围像 version 这种变量更为特殊属于只读的系统变量不可更改系统变量跟启动选项的区别启动选项是程序启动时传递的参数而系统变量是程序在运行时控制程序行为的变量关系如下大部分的系统变量都可以通过启动选项的方式进行配置部分系统变量是程序自动生成不可通过启动选项的方式进行配置例如auto_increment_offset部分启动选项也不是系统变量例如defaults-file状态变量为了更好的了解 MySQL 服务的运行状况服务提供了大量的关于运行状态的变量称为状态变量。例如Threads_connected 表示当前已经连接的数量状态变量用于显示服务器的状态信息他们的值只能由 MySQL 服务程序自己维护而不能手动配置