当前位置:网站首页>MySQL架构
MySQL架构
2022-07-07 21:52:00 【逆方向的钟197】
复习笔记
安装这里用的docker安装这里不多阐述详细:Docker安装mysql5.7(开启binlog功能、修改字符)_逆方向的钟197的博客-CSDN博客_docker mysql 开启binlog
目录
1.MySQL字符集相关操作
补充:5.7的版本查看字符集:
show variables like 'character%';
或
show variables like '%char%';
各级字符集
1服务器级别、2数据库级别、3表级别、4列级别 各集字符集都可以设置字符集
、
2.SQL大小写规范
windows下大小写不敏感,在linux下大小写敏感
0表示大小写敏感,1表示大小写不敏感
#查看是否敏感
SHOW VARIABLES LIKE '%lower_case_table_names%'
windows
linux
Linux规则:
Widows规则:
不区分大小写在
设置Linux的大小写敏感
在mysql5.7中:需要my.cnf的配置[mysqlId]中加入lower_case_table_names=1并重启服务器
在mysql8.0中:需要先删除/var/lib/mysql目录,然后再修改配置文件,启动mysql
SQL编写建议
1.再关键字和函数名称全部大写
2.数据库名,表名,表别名,字段名等全部小写
3.sql语句必须以;结尾
3.SQL_mode合理设置
主要功能设置不同程度的数据校验
宽松模式:
举例:设置name char(3),插入时候超多3,比如abc123,这时候插入不会报错,且只会插入abc
主要使用:数据迁移
严格模式:
对于宽松模式这样会报错就是严格模式
查看和设置
查看
select @@session.sql_mode;
或
select @@global.sql_mode;
或
show variables like 'sql_mode';
临时设置
set SESSION sql_mode='STRICT_TRANS_TABLES'; #全局
set GLOBAL sql_mode='STRICT_TRANS_TABLES'; #当前会话
永久设置
在my.cnf配置文件中修改,再重启
[mysqld]
sql_mode=ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR _DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION
4.MySQL的数据目录
windows下
Linux下
linux查看mysql相关文件 find / -name mysql
查看数据库存放路径 show variables like 'datadir'
5.数据库和文件系统的关系
查看默认数据库 show database
6.数据库在文件系统的表示
两个存储引擎Innodb,MyIsAM
Innodb :
5.7:
ibdata1 位置:/var/lib/mysql/qing 系统的表空间,存放表数据的
系统表空间和独立表空间设置,在my.cnf
[server]
innodb_file_per_table=0 # 0:代表使用系统表空间; 1:代表使用独立表空间
查看默认情况
show variables like 'innodb_file_per_table';
8.0:
在8.0中 .frm和.ibd合并了,就只有.ibd了
证明合并:
ibd2sdi --dumpfile=文自己创建件名.txt 要解析的文件.ibd
MyIsAM:
特点:数据和索引分开存储
创建表:
5.7:
创建后文件有三个
student_myisam.MYD #存表数据
student_myisam.MYI #存储索引
student_myisam_363.frm
8.0:
区别5.7 .frm变成了.sdi
7.用户与权限管理
7.1用户管理
通常使用mysql -u root -p 密码
完整版登录
mysql -h 主机名(默认localhost) -P 端口号 -p 密码 数据库名 -e sql语句;
查看用户
use mysql;
select Host,User from user;
添加用户
# %表示任意地址都可以访问
create user 'qing' identified by '123456';
# 表示只支持本地的连接
create user 'qing'@'localhost' identified by '83348535';
查看当前用户权限
# 查看权限
show grants ;
修改用户名
# 修改用户名
update mysql.user set User='ming' where User='qing';
刷新权限
# 刷新权限
flush privileges ;
删除账户
# 删除账户
drop user 'ming';
drop user 'ming'@'localhost';
修改当前用户密码
# 设置当前用户的密码
alter user user() identified by '83348535';
#修改当前密码
set password ='abc';
修改其他用户密码
use mysql;
desc user;
#密码经过特殊的加密处理
select Host,User,authentication_string from user;
# 修改其他用户密码
alter user 'qing'@'%' identified by '123456';
set password for 'qing'@'%'='密码';
7.2权限管理
刚开始创建用户的时候,这时候需要对该永福赋予权限
展示当前用户权限
# 查看权限
show grants ;
# 或
SHOW GRANTS FOR CURRENT_USER;
# 或
SHOW GRANTS FOR CURRENT_USER();
#查看所有权限列表
show privileges;
查看用户的全局权限
SHOW GRANTS FOR 'user'@'主机地址' ;
权限授予原则:
1.满足需求的最小权限
2.限制用户的登录主机,限定io或者内网IP段
3.设置满足密码复杂度的密码
4.定期清理不需要的用户
权限授予
ps:创建的用户没有办法再给别的创建用户,如果把自己的权限也给别
REVOKE 权限1,权限2,…权限n ON 数据库名称.表名称 FROM 用户名@用户地址;
的需要添加参数
with grant option
举例:
GRANT SELECT,INSERT,DELETE,UPDATE ON 数据库.表 TO '[email protected]'@'%'
# 把所有权限都赋给qing用户
grant all privileges on *.* to 'qing'@'%';
收回权限
REVOKE 权限1,权限2,…权限n ON 数据库名称.表名称 FROM 用户名@用户地址;
举例:
ps:重新登陆才有用
#收回全库全表的所有权限
REVOKE ALL PRIVILEGES ON *.* FROM [email protected]'%';
#收回mysql库下的所有表的插删改查权限
REVOKE SELECT,INSERT,UPDATE,DELETE ON mysql.* FROM [email protected];
7.3权限表
mysql通过权限表来控制用户对数据的访问,权限表存放再mysql数据库中,mysql根据权限表内容为每个用户赋予响应的权限,这些权限重要的为,user表,db表,prcs_priv(存储过程和存储函数设置操作权限),tables_priv(表的权限),colums_priv(列的权限)
user表:
db表:
表示对具体的某一个数据库权限的问题
desc tables_priv;
表示具体都一个表的对应权限
desc columns_priv;
对应数据表的对应的字段是否有权限
desc procs_priv;
对存储过程和存储函数设置操作权限
8.角色管理
8.0新引入的概念,从oracle借鉴过来的概念
概念:角色是权限的集合,可以为角色添加或移权限,用户被赋予角色,同时也被赋予觉得的权限。并且像账户一样,角色拥有被授予和撤销。
简单说:mysql里面有多个账户,账户里面有多个角色
ps:角色在创建的时候并没有对应的权限,需要自己激活
创建角色
# 创建角色 多个角色用,号连接
create role 'manager'@'%';
# 赋予权限
grant select,update on 数据库.* to '角色';
查看角色权限
show grants for '角色'@'%';
回收权限
REVOKE 权限 ON 表名FROM '角色';
举例:
#撤销权限
REVOKE INSERT, UPDATE, DELETE ON school.* FROM 'school_write';
#查看权限
SHOW GRANTS FOR 'school_write';
删除角色
#多个用,相连
DROP ROLE '角色';
给用户赋予权限
GRANT '角色' TO '被授予的角色'@'localhost';
SHOW GRANTS FOR '被授予的角色'@'localhost';
激活角色
1.管理员激活
#使用set default role 命令激活角色
SET DEFAULT ROLE ALL TO '角色'@'localhost';
2.参数设置,默认激活
#查看是否激活
show variables like 'activate_all_roles_on_login';
#把off改成on
SET GLOBAL activate_all_roles_on_login=ON;
撤销用户激活
REVOKE role FROM user;
举例:
#撤销用户信息
#撤销kangshifu用户的school_read角色。
REVOKE 'school_read' FROM '角色'@'localhost';
#查看
SHOW GRANTS FOR '角色'@'localhost';
设置强制角色(mandatory role)
强制角色是给每个创建账户的默认角色,不需要手动设置,强制角色无法被revoke(撤销)或者drop(删除)
方式1:修改my.cnf配置,服务启动前设置
[mysqld]
mandatory_roles='role1,[email protected],[email protected]%.atguigu.com'
方式2:运行时设置
#系统重启后仍然 有效
SET PERSIST mandatory_roles = 'role1,[email protected],[email protected]%.example.com';
#系统重启后失效
SET GLOBAL mandatory_roles = 'role1,[email protected],[email protected]%.example.com';
9.配置文件使用
9.1配置文件格式
#具体的启动选项
[server]
#具体的启动选项
[mysqld]
[mysqld_safe]
[client]
[mysql]
[mysqladmin]
10.逻辑架构
执行顺序
1.Mysql服务器之外的客户端程序 -> 2.连接池 -> 3.SQL接口-> 4.查询缓存 -> 5.解析器 -> 6.优化器-> 7.插件的存储引擎 -> 8.文件系统 -> 9.查询缓存 -> 10.sql接口
主体分三层
连接层->服务层->引擎层
连接层
连接MYSQL服务器之前,做TCP连接,三次握手之后对账号和密码做验证
用户密码不对,收到Access denied for user错误,客户端程序结束执行
用户密码认证通过,会从权限表查出账号拥有的权限与连接关联,之后的权限判断逻辑,都依赖此时督导权限
主要创建两个池子 1)连接池 2)线程池
服务层
SQL Interface: SQL接口
1)接收用户的SQL命令,并且返回用户需要查询的结果。比如SELECT ... FROM就是调用SQL Interface
#mysql8.0查看执行计划是否开启
select @@profiling;
#profiling=0表示关闭,1表示开启
show variables like 'profiling';
#开启实行计划
set profiling=1;
Caches & Buffers: 查询缓存组件
#显示存储引擎
show engines;
11.SQL执行流程
ps:查询缓存8.0被抛弃掉了,命中率低,要求两个语句必须一样,默认关闭
查询缓存
指令
#查看是否开启缓存
show variable like '%query_cache_type'
#查看缓存
show status like'%Qcache%'
解析器
对sql进行解析分析
词法分析:那些是关键字,那些是字段
语法分析:语法是否满足
优化器
在优化器中会确定 SQL 语句的执行路径,比如是根据 全表检索,还是根据 索引检索等。
在查询优化器中,可以分为 逻辑查询优化阶段和 物理查询 优化阶段。
执行器
查看权限、调用存储引擎比如InnoDB、MyISAM等然后再调用存储引擎系统
主要流程
12.存储引擎操作
存储引擎是表示表的结构,不同存储引擎表示不同的结构
查看引擎
show engines;
#或者
show engines \G;
查看默认存储引擎
show variables like '%storage_engine%';
#或
SELECT @@default_storage_engine;
修改默认存储引擎
1)直接修改
SET DEFAULT_STORAGE_ENGINE=MyISAM;
2)修改配置文件
default-storage-engine=MyISAM
# 重启服务
systemctl restart mysqld.service
创建指定存储引擎
CREATE TABLE 表名(
建表语句;
) ENGINE = 存储引擎名称;
修改表的存储引擎
ALTER TABLE 表名 ENGINE = 存储引擎名称;
#修改完查看表结构
SHOW CREATE TABLE 表名
13.存储引擎介绍
3.针对数据统计有额外的常数存储。故而 count(*) 的查询效率很高
4.表结构 表.frm 存储表结构 表.MyD 存储数据 表.MYI 存储索引
应用:只读应用或者以读为主的业务
Archive 引擎:用于数据存档
边栏推荐
- [stm32+esp8266 connects to Tencent cloud IOT development platform 3] stm32+esp8266-01s dynamically registers devices on Tencent cloud (at instruction mode) -- with source code
- SQL database execution problems
- System design overview
- Explain
- B / Qurt Utilisateur Guide (36)
- Markdown
- re1攻防世界逆向
- 在软件工程领域,搞科研的这十年!
- How to login and enable synchronization function in Google browser
- V-for traversal object
猜你喜欢
Deep understanding of MySQL lock and transaction isolation level
深入理解Mysql锁与事务隔离级别
电子设备行业智能供应链协同平台解决方案:解决低效, 赋能产业数字化升级
Installing spss25
经纬度PLT文件格式说明
包装行业智能供应链S2B2B商城解决方案:开辟电商消费新生态
Explain
SAP 内存参数调优过程
Extended tree (I) - graphic analysis and C language implementation
Home appliance industry channel business collaboration system solution: help home appliance enterprises quickly realize the Internet of channels
随机推荐
Explain
Opencv scalar passes in three parameters, which can only be displayed in black, white and gray. Solve the problem
Coreseek:第二步建索引及測试
Archlinux install MySQL
UE4_ Ue5 panoramic camera
高效的S2B2C电商系统,是这样帮助电子材料企业提升应变能力的
First week of July
USB (XVI) 2022-04-28
S2b2b mall solution of intelligent supply chain in packaging industry: opening up a new ecosystem of e-commerce consumption
Installing spss25
MATLAB signal processing [Q & A essays · 2]
RE1 attack and defense world reverse
Illegal behavior analysis 1
Live-Server使用
leetcode-520. Detect capital letters -js
StringUtils工具类
[untitled]
USB (XV) 2022-04-14
[stm32+esp8266 connects to Tencent cloud IOT development platform 3] stm32+esp8266-01s dynamically registers devices on Tencent cloud (at instruction mode) -- with source code
Have all the fresh students of 2022 found jobs? Is it OK to be we media?