1.MySQL 逻辑结构
1.1 MySQL逻辑结构和Linux对比
MySQL Linux
库 目录/文件夹
表 文件(文件名,内容,权限)
Linux中一切皆文件。 Linux一切皆命令。
MySQL中一切皆表。 MySQL一切皆SQL。
1.2 MySQL逻辑对象的特点
库: 库名+库属性
表: 列(列名+列属性)+行(元数据+数据)+表属性+表名
2.物理结构
2.1 宏观角度
ll /data/mysql
user表存储引擎:MyISAM
user.frm 存储数据字典信息(列相关信息)
user.MYD 存储数据行
user.MYI 存储索引
slave_master_info 表存储引擎:Innodb
slave_master_info.frm 存储数据字典信息(列相关信息)
slave_master_info.ibd 存储数据行和索引
2.2 微观角度
段:segments 一个表就是一个段(数据段、回滚段),由1-N个区构成
区:extents 又被称簇,由64个连接的page构成,默认大小1M
页:page X.ibd分配MySQL当中最小的IO单元,默认大小16KB,连接的4个OS block
块:OS block 格式化mkfs文件系统块,默认是4KB的block,是连续的8个扇区。
扇区:sector 默认512B,连续的512字节长度的磁盘区域
扇区、OS Block、PAGE、extents、segments设计理念,都是为了能够程序----->OS ---->HDisk,从逻辑到物理操作都能够保证尽可能“连续“IO。
3. 权限管理
3.1 权限作用
linux中的作用?
约束、控制用户能对linux文件做什么样操作。
权限属于文件的属性。
mysql中的作用?
约束、控制用户能对mysql中的对象(库、表)做什么样操作。
权限属于用户的属性。
3.2 权限定义
linux中的权限: rwx(421)
mysql中的权限:
8.0以前:基于命令方式的授权。 ---以命令为授权粒度
8.0以后:加入了role(角色)方式授权。
通过以下命令,可以查看可授权的列表
mysql> show privileges;
all权限包含了show privileges列表中所有的权限,除过Grant option
注:创建了用户,没有授权,只能登录。
3.3 权限管理
1.超级管理员用户授权
5.7版本:
语法:grant 权限 on 权限范围 to 用户 identified by 密码 ;
grant all on . to ansel@‘10.0.0.%’ identified by ‘123’ with grant option;
8.0版本:
ROLE创建一个新的权限组,授权时直接使用创建的role
创建角色:
CREATE ROLE 'app_developer', 'app_read', 'app_write';
角色授权:
GRANT ALL ON app_db.* TO 'app_developer';
GRANT SELECT ON app_db.* TO 'app_read';
GRANT INSERT, UPDATE, DELETE ON app_db.* TO 'app_write';
创建用户:
CREATE USER 'dev1'@'localhost' IDENTIFIED BY 'dev1pass';
CREATE USER 'read_user1'@'localhost' IDENTIFIED BY 'read_user1pass';
CREATE USER 'read_user2'@'localhost' IDENTIFIED BY 'read_user2pass';
CREATE USER 'rw_user1'@'localhost' IDENTIFIED BY 'rw_user1pass';
授权用户角色
GRANT 'app_developer' TO 'dev1'@'localhost';
GRANT 'app_read' TO 'read_user1'@'localhost', 'read_user2'@'localhost';
GRANT 'app_read', 'app_write' TO 'rw_user1'@'localhost';
权限范围:用户能够操作的对象是哪些。
. ====> chmod -R 777 / 全库级别,管理员用户
ansel.* ====> chmod -R 777 /ansel/* 单库级别,普通用户
ansel.t1 ====> chmod -R 777 /ansel/t1 单表级别,普通用户
2.授权一个普通用户
test@‘10.0.0.%’
权限:select、delete、update、insert
范围:test.*
grant select,update,delete,insert on test.* to test@'10.0.0.%' identified by '123456';
查看授权:
mysql> show grants for test@'10.0.0.%';
回收权限:
mysql> revoke delete on test.* from test@'10.0.0.%';
mysql> show grants for test@'10.0.0.%';
3.4 授权表介绍
select * from mysql.user\G
select * from mysql.db\G
select * from mysql.tables_priv\G
更多精彩内容,请关注微信公众号查看