1. 客户端与服务端模型
客户端连接MySQL的方式:
1. 通过网络连接
mysql -uroot -p123456 -h 10.0.0.128 -P 3307
2. 通过套接字文件
mysql -uroot -p123456 -S /tmp/mysql.sock
mysql -uroot -poldboy123使用的是什么连接方式?
这种方式默认是用:mysql -uroot -poldboy123 -S /tmp/mysql.sock
设置密码:
mysqladmin -u root password 'oldboy123' mysql -uroot -poldboy123
注意:这里设置的root密码,仅仅为root通过本机登录的密码
清理用户及无用数据库(基本优化)
select user,host from mysql.user; drop user ''@'db02';
drop user ''@'localhost';
drop user 'root'@'db02';
drop user 'root'@'::1';
select user,host from mysql.user; drop database test;
show databases;
2. mysql服务器构成
实例
MySQL在启动过程
– 启动后台守护进程,并生成工作线程
– 预分配内存结构供MySQL处理数据使用
实例是什么?
MySQL的后台进程+线程+预分配的内存结构
关于mysqld的结构和工作原理
由上图可以mysqld 包括连接层、SQL层、存储引擎层。
连接层
连接层包括:
通信协议: tcp,socket等
线程:连接线程主要用来接受sql请求语句交给SQL层,发送SQL语句请求的结果
验证:用户名和密码的验证
SQL层
sql层:由解析器把sql语句解析成执行计划,执行器负责执行刚才解析出来的执行计划。当解析器解析出来多种执行计划之后,执行器不知道该如何执行,所以这时需要优化器进行决策去找到一种耗费资源比较小,速度比较快的执行计划,再交给执行器执行。执行器执行完最优的执行计划之后,把执行结果交给存储引擎层,SQL层的工作就完成了。存储引擎需要执行结果才知道去哪块磁盘的哪个文件上的那段数据返回给用户。
高速缓存:作用见下图
查询日志记录:二进制日志记录,所有的查询语句以sql的形式保存下来。
存储引擎层
存储引擎需要拿到执行计划的执行结果才知道去哪块磁盘的哪个文件上的那段数据返回给用户。
存储引擎是充当不同表类型的处理程序的服务器组件。
• 存储引擎用于:
– 存储数据
– 检索数据
– 通过索引查找数据
• 双层处理
– 上层包括SQL解析器和优化器
– 下层包含一组存储引擎
• SQL 层不依赖于存储引擎:
– 引擎不影响SQL处理
– 有一些例外
依赖于存储引擎的功能有:
- 存储介质
- 事务功能
- 锁定
- 备份和恢复
- 优化
- 特殊功能
mysql的处理流程?
连接->连接层->连接线程->sql层->判断语法->去高速缓存查询是否有缓存->没有->解析器解析成执行计划->优化器->执行器执行结果->存储引擎层去取数据->返回给sql层进行结构化(变成我们能看懂的形式)->连接线程返回给用户
3. 数据库的逻辑结构
数据库给我展示出来的形式是:库、表、行、列
4. MySQL如何使用磁盘?
程序文件随数据目录一起存储在服务器安装目录下。执行各种客户机程序、管理程序和实用程序时将创建程序可执行文件和日志文件。首要使用磁盘空间的是数据目录。
• 服务器日志文件和状态文件: 包含有关服务器处理的语句的信息。日志可用于进行故障排除、监视、复制和恢复。
• InnoDB 日志文件: (适用于所有数据库)驻留在数据目录级别。
• InnoDB 系统表空间:
包含数据字典、撤消日志和缓冲区。
每个数据库在数据目录下均具有单一目录(无论在数据库中创建何种类型的表)。
数据库目录存储以下内容:
- 数据文件: 特定于存储引擎的数据文件。这些文件也可能包含元数据或索引信息,具体取决于所使用的存储引擎。
- 格式文件 (.frm): 包含每个表和/或视图结构的说明,位于相应的数据库目录中。
- 触发器:
与某个表关联并在该表发生特定事件时激活的命名数据库对象。 数据目录的位置取决于配置、操作系统、安装包和分发。典型位置是 /var/lib/mysql。 MySQL 在磁盘上存储系统数据库 (mysql)。mysql 包含诸如用户、特权、插件、 帮助列表、事件、时区实现和存储例程之类的信息。