一、mysql客户端链接服务器
mysql提供了两种链接方式,一种是tcp/ip,一种是socket链接
1、tcp/ip
mysql -uroot -poldboy123 -h 10.0.0.200
# 通过指定ip和端口链接服务器,可远程链接,生产环境都是用tcp/ip
2、socket方式
mysql -uroot -p1 -S /tmp/mysql.sock
# -S 指定socket文件的位置,替代ip 和 端口, 但是只适用于本地连接,mysql回车登录成功,默认使用的是socket连接
# windows中没有这种socket文件链接的方式,只能用tcp/ip或管道连接,并且socket文件链接方式只适用于本地连接,
二、mysql服务器构成-实例
""" mysqld是一个数据库的管理程序,kkk.ibd是一个数据库文件 我们如果要通过数据库管理程序操作数据库文件,就要把mysqld 运行起来,加载到内存中,kkk文件也要加载到内存,然后由mysqld 处理文件,处理完后,再将ibd文件重新写回磁盘, mysqld是守护进程,不退出 """
那到底mysql实例是什么
mysql在启动过程
- 启动后台守护进程,并生成工作线程
- 预分配内存结构供MySQL处理数据使用
实例
- MySQL的后台进程+线程+预分配的内存结构
1、工作过程
例:
select user,host,password from mysql.user;
连接层功能:
1、提供通信协议
TCP/IP
socket
2、用户验证
用户的合法性:用户名、密码 --------》mysql.user
3、master thread
链接成功thread分配一个专用线程(Thread)接收后续的用户请求(查询),但并没有能力直接处理SQL,转给SQL层继续处理
SQL层
1、接收上传转发过来的SQL
2、语法检查
3、语义检查(检查是什么类型的SQL),以Select为例,检查到是一个DQL,交给查询类专用的解析器,权限验证,验证当前用户是否有执行查询的权限
4、解析器将SQL解析成SQL接口能够识别方式(执行计划explain),解析完成后,交给优化器进行优化
5、优化器,做判断,选择一个它认为成本最低的执行计划,交给执行器
6、执行器执行explain,生成执行结果(去将数据文件的第N个数据页把我需要的数据取出来)
7、把执行结果交给下层(存储引擎层)继续处理
8、查询缓存
存储引擎层
1、接收上层的执行结果
2、取出磁盘文件的相应数据(十六进制二进制)
3、返回给SQL层,结构化之后(生成表格,人能看懂的),由专用线程thread返回给客户端