MySQL 架构和存储引擎
MySQL的组成
连接池作用:
MySQL是C/S架构的,connectors是连接器,可供用户通过连接器连到连接池中,连接池中有很多线程,空闲的线程为连接进来的用户提供服务,线程是随机的。(连接需要通过验证authentication)
用户不在连接,线程则为下一个用户提供服务(线程复用thread reuse)
但是线程服务的用户是有限的(连接限制connection limits)
查默认最大连接数:select @@max_connections;
可改[mysqld]
max_connections=1000 要根据mysql的承载能力更改
如果最大连接数修改的过大,还需在service文件中进行修改,添加LimitNOFILE=10000
systemctl daemon-reload && systemctl restart mysql
check memoty 内存检查 caches缓存
用户发起请求,如发起select命令,连接池只起到一个连接服务,接下来还要靠别的组件
第一个组件:SQL interface SQL接口处理SQL语句,提供语法检查功能
包括sql语句,包括存储过程,包括函数触发器都可以进行检查,接收
检查没有问题,接着进行第二个组件
第二个组件:parser解析,存在转换的过程(query translation)转换成内部指令,还涉及到特权权限的检查
虽然语法是正确的,可以通过第一组件,但不代表你有能力访问,有可能没权限。
检查完,接着还要做下一步的优化,进入第三个组件
第三个组件:optimlzer,在MySQL里面从磁盘上把数据取出来有很多种方法,(access paths访问路径)路径很多种
所以根据数据库的状态进行统计,计算出一种最佳路径,选择最好的路径进行通讯。如可以通过索引,也可以不通过索引
第四个组件:数据库的缓存(caches &buffers)为了加速,把旧的数据从硬盘中加载到内存,从缓存区直接得到数据
存储引擎:为了解决存储数据的功能,把数据存放到磁盘文件上去,就需要存储引擎,不同的存储引擎,存储方案、管理方式有很大的区别,同一时间只能用一个存储引擎,插件式。
目前主流是InnoDB, 5.5之后变成的InnoDB
数据对应的日志:redo、undo、data、index、binary(二进制)、slow 、error、query
还提供了一些配套的管理工具:mysqladmin、备份工具、还原工具、数据迁移等
存储引擎
存储引擎的区别(InnoDB和MyISAM的区别)
查看mysql支持的存储引擎
show engines; 5.5版本之前默认是MyISAM,5.5之后默认是InnoDB
查看当前默认的存储引擎
show variables like '%storage_engine%';
区别:
1、InnoDB支持聚簇索引,MyISAM不支持聚簇索引
2、InnoDB是行级锁,MyISAM是表级锁
3、InnoDB支持事务,适合处理大量短期事务,MyISAM不支持事务
4、InnoDB读写阻塞与事务隔离级别相关,MyISAM读写相互阻塞,写入不能读,读时不能写
5、InnoDB可缓存数据和索引,MyISAM只缓存索引
6、InnoDB支持MVCC高发,MyISAM不支持MVCC(多版本并发控制机制)高并发
7、InnoDB崩溃恢复性更好,MyISAM崩溃恢复性较差
8、InnoDB支持热备份,MyISAM不支持热备份
服务器配置和状态
可以通过mysqld选项,服务器系统变量和服务器状态变量进行MySQL的配置和查看状态
https://dev.mysql.com/doc/refman/8.0/en/server-option-variable-reference.html
注意:
其中有些参数支持运行时修改,会立即生效
有些参数不支持动态修改,且只能通过修改配置文件,并重启服务器程序生效
有些参数作用域是全局的,为所有会话设置
有些可以为每个用户提供单独(会话)的设置
Cmd-Line和Option File是服务器选项,只能改配置文件
System Var:系统变量,通过show variables来查看,又在Var Scope中分为global变量和session变量,Dynamic中yes表示可以通过set修改变量,no是不允许set修改变量,修改全局的变量要set global
Status VarL:状态变量,通过show status来看
服务器租用托管,机房租用托管,主机租用托管,https://www.e1idc.com