当前位置:网站首页>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 引擎:用于数据存档
边栏推荐
猜你喜欢
The efficient s2b2c e-commerce system helps electronic material enterprises improve their adaptability in this way
Description of longitude and latitude PLT file format
2021icpc Shanghai h.life is a game Kruskal reconstruction tree
LeeCode -- 6. Z 字形变换
Installing spss25
Markdown
Explain
Live-Server使用
In the field of software engineering, we have been doing scientific research for ten years!
2022 certified surveyors are still at a loss when preparing for the exam? Teach you how to take the exam hand in hand?
随机推荐
SLAM面试总结
生鲜行业数字化采购管理系统:助力生鲜企业解决采购难题,全程线上化采购执行
产业共融新势能,城链科技数字峰会厦门站成功举办
S2b2b mall solution of intelligent supply chain in packaging industry: opening up a new ecosystem of e-commerce consumption
Vs extension tool notes
移动端异构运算技术 - GPU OpenCL 编程(基础篇)
B_ QuRT_ User_ Guide(40)
13、 System optimization
Archlinux install MySQL
B_QuRT_User_Guide(40)
USB (XVI) 2022-04-28
在软件工程领域,搞科研的这十年!
B_ QuRT_ User_ Guide(36)
0-1背包问题
Freelink open source call center design idea
B_QuRT_User_Guide(39)
How can we make money by making video clips from our media?
家用电器行业渠道商协同系统解决方案:助力家电企业快速实现渠道互联网化
Spark 离线开发框架设计与实现
Map operation execution process