1 配置文件的使用


my.cnf配置文件

/etc/my.cnf:

[root@hadoop103 ~]# cat /etc/my.cnf
# For advice on how to change settings please see
# http://dev.mysql.com/doc/refman/8.0/en/server-configuration-defaults.html [mysqld]
#
# Remove leading # and set to the amount of RAM for the most important data
# cache in MySQL. Start at 70% of total RAM for dedicated server, else 10%.
# innodb_buffer_pool_size = 128M
#
# Remove the leading "# " to disable binary logging
# Binary logging captures changes between backups and is enabled by
# default. It's default setting is log_bin=binlog
# disable_log_bin
#
# Remove leading # to set options mainly useful for reporting servers.
# The server defaults are faster for transactions and fast SELECTs.
# Adjust sizes as needed, experiment to find the optimal values.
# join_buffer_size = 128M
# sort_buffer_size = 2M
# read_rnd_buffer_size = 2M
#
# Remove leading # to revert to previous value for default_authentication_plugin,
# this will increase compatibility with older clients. For background, see:
# https://dev.mysql.com/doc/refman/8.0/en/server-system-variables.html#sysvar_default_authentication_plugin
# default-authentication-plugin=mysql_native_password datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid

多个选项组配置以后面的配置为更高的优先级

配置文件和命令行启动参数冲突时以命令行参数为主

启动命令与选项组

mysql的命令可以在/usr/bin和/usr/sbin下面查看,不同的命令会读取配置文件中不同的选项组:

  • [server]选项组将作用于所有的服务器程序
  • [client]选项组将作用于所有的客户端程序

可以在选项组中添加版本,如[mysqld-5.7]

2 逻辑架构

服务端处理客户端请求

MySQL是典型的C/S架构,服务端程序使用的是mysqld实现的效果就是客户端向服务端发送一段文本(SQL语句),服务器端向客户端返回一条文本(处理结果)

下面展开来看

  1. MYSQL服务器之外的客户端程序
  2. 连接池:提供了多个用于客户端与服务器端交互的线程
  3. SQL接口接收SQL指令,返回查询结果
  4. 解析器:语法、语义解析,生成解析树
  5. 优化器核心组件,对SQL进行优化(是否使用索引、外连接转化。。。)
  6. 查询缓存:以key-value方式缓存查询结果(相同的SQL语句直接命中返回)
  7. 插件式的存储引擎:与文件系统进行交互,即内存与磁盘的交互
  8. 文件系统:即底层的sql文件以及日志文件
connectors
第一层:连接层

系统(客户端)首先经过三次握手与MYSQL服务器建立TCP连接然后MySQL服务器对客户端传来的账户、密码做身份认证和权限获取

连接层的连接池设有TCP连接池限制连接数,并采用长连接模式复用TCP连接,来实现一个系统可以和MYSQL服务器建立多个连接,提供了多个用于客户端与服务器端交互的线程实现一个服务器也能和多个系统建立连接。

第二层:服务层
  • SQL接口接收SQL指令,返回查询结果

  • 解析器:语法、语义解析,生成解析树检查语法错误

  • 优化器核心组件,对SQL进行优化(是否使用索引、外连接转化。。。)

  • 查询缓存:以key-value方式缓存查询结果(相同的SQL语句直接命中返回)

第三层:引擎层
存储层

3 SQL执行流程

1 查询缓存
  • Mysql服务器如果在缓存中查到了相同的SQL语句,就会直接将结果返回给客户端;如果没有则进入解析器阶段。
  • 之前执行的语句及其结果会以Key-Value的形式存储在内存中。
  • 查询缓存往往效率不高,因此在MySQL8.0之后就移除了这个功能。

为什么8.0移除了这个功能?
  • 缓存的命中率不高,Mysql中缓存的是查询结果而不是查询计划,只有完全相同的查询才会命中查询缓存,任何字符上的不同(空格、注释、大小写)都会导致缓存不命中
  • 一些系统函数、系统表和用户自定义的函数、变量不会被缓存
  • 缓存系统会监测涉及到的每一张表,当表的结构、数据被修改,所有使用该表的查询缓存都会被删除,维护消耗了一定的性能和资源
系统变量query_cache_type

​ 在5.0中,query_cache_type有三个值:

  • 0代表关闭OFF
  • 1代表开启ON
  • 2代表按需开启DEMAND
mysql> show VARIABLES like 'query_cache_type';
+------------------+-------+
| Variable_name | Value |
+------------------+-------+
| query_cache_type | OFF |
+------------------+-------+
1 row in set (0.00 sec)

​ 按需开启的时候,查询的时候添加 SQL_CACHE 使用缓存,SQL_NO_CACHE则不会对SQL使用缓存

QCACHE%查看缓存命中情况
mysql> show status like 'QCACHE%';
+-------------------------+---------+
| Variable_name | Value |
+-------------------------+---------+
| Qcache_free_blocks | 1 |
| Qcache_free_memory | 1031832 |
| Qcache_hits | 0 |
| Qcache_inserts | 0 |
| Qcache_lowmem_prunes | 0 |
| Qcache_not_cached | 2 |
| Qcache_queries_in_cache | 0 |
| Qcache_total_blocks | 1 |
+-------------------------+---------+
8 rows in set (0.00 sec)
2 解析器

​ 如果没有命中查询缓存,就会进入解析器进行sql语句的分析了,sql语句分析分为两部分:

  • 词法分析:识别sql语句中的关键字、表明、列名等信息
  • 语法分析:根据语法规则,判断sql语句是否满足sql语法

​ 如果sql语句正确,则会生成一棵语法树

3 优化器

​ 优化器负责确定sql的执行路径即最好的执行计划,以减少查询消耗,比如:

  • 是使用全文检索还是索引检索等。
  • 在表中有多个索引的时候,是使用哪个索引
  • 语句有多表关联,决定表的顺序
  • 表达式简化、子查询转化为连接、外连接转换为内连接
  • ...

​ 优化又可以分为物理优化和逻辑优化:

  • 物理优化:通过索引和表连接技术进行的优化
  • 逻辑优化:通过SQL等价变换提高效率(换一种查询写法)
4 执行器
  • 在执行之前需要判断用户是否具备权限,如果不具备则返回权限错误,否则执行SQL查询返回查询结果。

  • 如果设置了查询缓存,就会将查询结果进行缓存。

  • 执行SQL查询的时候,首先打开查询的表,根据表的存储引擎定义,调用相应存储引擎API对表进行读写,存储引擎api只是一个抽象接口,下面还有一个存储引擎层

4 MySQL8中的sql执行原理

首先需要开启profiling

​ profiling可以让Mysql收集在sql执行过程中所使用的资源情况,1表示开启。

mysql> select @@profiling
-> ;
+-------------+
| @@profiling |
+-------------+
| 0 |
+-------------+
1 row in set, 1 warning (0.00 sec) mysql> set profiling=1;
Query OK, 0 rows affected, 1 warning (0.00 sec)
show profiles 查看最近执行的sql语句的执行开销
mysql> show profiles;
+----------+------------+-------------------------+
| Query_ID | Duration | Query |
+----------+------------+-------------------------+
| 1 | 0.00016525 | select @@profiling |
| 2 | 0.00030450 | select * from employees |
| 3 | 0.00030550 | select * from employees |
+----------+------------+-------------------------+
3 rows in set, 1 warning (0.00 sec)
show profile for query [num]
mysql> show profile for query 2;
+----------------------+----------+
| Status | Duration |
+----------------------+----------+
| starting | 0.000043 |
| checking permissions | 0.000006 |
| Opening tables | 0.000014 |
| init | 0.000035 |
| System lock | 0.000009 |
| optimizing | 0.000002 |
| statistics | 0.000008 |
| preparing | 0.000007 |
| executing | 0.000002 |
| Sending data | 0.000133 |
| end | 0.000005 |
| query end | 0.000005 |
| closing tables | 0.000004 |
| freeing items | 0.000024 |
| cleaning up | 0.000010 |
+----------------------+----------+
15 rows in set, 1 warning (0.00 sec)
查看其他内容

MySQL(五)配置文件、系统变量与MySQL架构的更多相关文章

  1. MySQL用户和系统变量

    --MySQL用户和系统变量 -----------------------------2014/05/19 用户变量 可以先在用户变量中保存值然后在以后引用它:这样可以将值从一个语句传递到另一个语句 ...

  2. mysql show variables系统变量详解

    mysql系统变量详解 mysqld服务器维护两种变量.全局变量影响服务器的全局操作.会话变量影响具体客户端连接相关操作. 服务器启动时,将所有全局变量初始化为默认值.可以在选项文件或命令行中指定的选 ...

  3. python相关软件安装流程图解——MySQL 8.0.13安装教程(windows 64位)——MYSQL依赖的软件——MYSQL必须的系统DLL插件——MYSQL真正的安装

    https://www.mysql.com/https://www.mysql.com/downloads/https://dev.mysql.com/downloads/windows/https: ...

  4. MySQL系统变量sql_safe_updates总结

    MySQL系统变量sql_safe_updates总结   在MySQL中,系统变量sql_safe_updates是个非常有意思的系统变量,在Oracle和SQL Server中都没有见过这样的参数 ...

  5. Mysql(Mariadb)之SET语法分析以及系统变量和用户变量分析(英文&中文)(转载)

    SET Syntax SET variable_assignment [, variable_assignment] ... variable_assignment: user_var_name = ...

  6. MySQL系统变量auto_increment_increment与auto_increment_offset学习总结

    在MySQL中,系统变量auto_increment_increment与auto_increment_offset是与自增列相关的两个参数变量.在官方文档中,将其划分为Replication Mas ...

  7. MySQL修改配置文件 避免中文乱码

    MySQL修改配置文件 避免中文乱码 MySQL安装后默认的服务器字符集是拉丁文,也就是说默认 character_set_server = latin1 ,这是造成 MySQL 中文乱码的主要原因之 ...

  8. mysql登陆报错(ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock' (2))

    部署mysql版本信息 version: 5.6.21 具体现象: mysql服务能够正常启动如下: [root@localhost ~]# service mysqld restart Shutti ...

  9. 【夯实Mysql基础】MySQL在Linux系统下配置文件及日志详解

    本文地址 分享提纲: 1. 概述 2. 详解配置文件 3. 详解日志 1.概述 MySQL配置文件在Windows下叫my.ini,在MySQL的安装根目录下:在Linux下叫my.cnf,该文件位于 ...

  10. Mysql 系统参数 系统变量 状态变量

    1.系统参数,也就是命令行选项,执行命令的时候,后面跟的参数,系统参数很多,不可能每次执行程序的时候,指定这些参数.这些参数写在配置文件(Windows下是my.ini,Linux是my.cnf),执 ...

随机推荐

  1. hdu: You Are the One(区间DP)

    Problem Description The TV shows such as You Are the One has been very popular. In order to meet the ...

  2. c# 一些方法记录

    // 返回当前目录的路径 fileName = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "当前目录下的一个文件"); ...

  3. MSSQL SQL SERVER 2008 使用RowNumber()分页查询并获取总行数 附达梦数据库

    参数:pages:要查询的页码(要查询第几页):pageNum:要查询的行数(每页要查多少行):适用于使用多表查询,不以固定的实体类保存结果,如使用 List<Map<String, Ob ...

  4. ASP.NET在Repeater中使用Button控件报错

    普通Button在这里会报错,小编找了一天也没有解决这个问题, 这里可以换做LinkButton或者ImageButton替换普通的Button

  5. 更新kubeadm kubernets平台证书

    证书过期失效: Unable to connect to the server: x509: certificate has expired or is not yet valid 更新证书: 1.查 ...

  6. centos7.6 挂载镜像配置本地yum源

    镜像下载 http://mirrors.aliyun.com/centos-vault/7.6.1810/isos/x86_64/ 配置本地yum源 1.安装Centos后默认的Yum源如下 [roo ...

  7. TCP连接实践解析

    1.初始化. 2.FD_ISSET,是select机制的一个成员,用来检测sockfd是否有动作,对应读写异常等. 3.FD_ZERO 宏完成的工作就是一个初始化套接字集合 4.FD_SET把sock ...

  8. Go_day04

    Go基础语法 指针 指针式存储另一个变量内存地址的变量 &a 取出a的内存地址 *b 若指针b存放的式a的地址 那么 *b就直接指向a的内存 可以直接操作其中的值 指针的使用 func mai ...

  9. SQL统计(一)

    参考博客: https://blog.csdn.net/GuTiDong/article/details/81326787 按月份统计每个月的订单总金额 https://blog.csdn.net/h ...

  10. Salesforce LWC学习(二十) CLI篇:新版本不支持Audience解决方案

    本篇参考:https://github.com/forcedotcom/cli/issues/470 https://developer.salesforce.com/docs/atlas.en-us ...