MySQL学习笔记(Day004:权限拾遗/Role模拟/Workbench/体系结构)
@(MySQL学习)
[TOC]
##一. 权限拾遗
1. GRANT与创建用户
1 | mysql> grant select on sys.* to 'perf'@'127.0.0.1' identified by '123'; |
上面的这个例子使用GRANT
赋权限的同时创建了'perf'@'127.0.0.1'
这个用户,但是出现了warning
,从给出的提示看来,以后的MySQL版本会废弃掉这种方式
- 正确的创建用户并赋权的方式
1
2
3
4mysql> create user 'pref'@'127.0.0.1' identified by '123';
Query OK, 0 rows affected (0.00sec)
mysql> grant select on sys.* to 'perf'@'127.0.0.1';
Query OK, 0 rows affected (0.00sec)
2. 查看某一个用户的权限
1 | mysql> show grants for 'perf'@'127.0.0.1'; |
3. 删除某一个用户
1 | mysql> drop user 'perf'@'127.0.0.1'; |
4. MySQL权限信息
1 | mysql> select * from mysql.user where user='perf'\G |
注意:
不建议
使用INSERT
或者GRANT
对元数据表进行修改,来达到修改权限的目的
5. information_schema
1 | mysql> select user(); |
二. MySQL模拟角色
1. 角色的定义:
角色
(Role)可以用来批量管理用户,同一个角色下的用户,拥有相同的权限。MySQL5.7.X
以后可以模拟角色(Role)的功能,通过mysql.proxies_priv
模拟实现。mysql.proxies_priv
在5.5.X
和5.6.X
的时候就存在,但是无法模拟
角色(Role)功能。
2. 模拟角色操作:
1 | -- 感谢 @M062 郭释 同学 对这里提出的修正 |
mysql.proxies_priv
仅仅是对Role的模拟
,和Oracle的角色还是有所不同.官方称呼为Role like
三. Workbench与Utilities介绍
1. 下载
2. Workbench功能概述
- SQL语句格式化
- SQL关键字upcase
- MySQL Dashboard
- SQL语法提示
- ER图
- Forward Engine
//ER图 --> DB表结构
- Reverse
//DB表结构 --> ER图
3. Utilities安装
1 | shell> python setup.py install # 如果安装不成功,查看一下python的版本。推荐2.7.X |
四. MySQL体系结构
1. 数据库
数据库(数据库文件)是一个或者一组二进制文件,通常来说存在与文件系统之上。
2. 数据库实例
由数据库后台进程/线程以及一个共享区域组成(程序的概念),数据库实例是用来操作数据库文件的
注意:MySQL中,数据库实例和数据库是一一对应的。没有Oracle的一对多(RAC)的机制。
3. MySQL体系结构
- 单进程多线程结构
- 不会影响MySQL的性能,看程序如何写。(多进程程序,进程间通信开销大于多线程)
- 存储引擎的概念
- 可以理解成文件系统,例如FAT32, NTFS, EXT4。 一个表是一个分区,引擎就是分区的文件系统
存储引擎的对象就是表
- show tables; 可以看到每个表对应的是上面引擎(Engine)
- 除了特殊情况,我们现在就只考虑
INNODB
体系结构图
逻辑存储结构
|MySQL逻辑存储结构|
|:—————:|
|instance|
|database|
|schema|
|table|
|view|
- 一个DB对应一个schema
- 一个DB对应一个文件夹
- 一个表对应一组文件
1 | |--> table1 --- | view1 | |
注意:
MySQL中一个Database
对应一个Schema
,之所以要有这个schema
, 是为了兼容其他数据库information_schema
数据库不是文件夹,存在于内存中,在启动时创建
4. MySQL物理存储结构
- MySQL配置文件
datadir
- 存储数据二进制文件的路径
表结构的组成
- frm:表结构定义文件
- MYI:索引文件
- MYD:数据文件
- 可以用
hexdump -c XXX.frm
查看二进制文件(意义不大) show create table tablename;
mysqlfrm (utilities工具包)
1
shell> mysqlfrm --diagnostic /data/mysql_data/aaa/.a.frm #可将frm文件转成create table的语句
- 错误日志文件
log_err
- 建议配置成统一的名字
- 方便定位错误
- 慢查询日志文件
- 将运行超过某一个时间
阈
(yu四声)值
的SQL语句记录到文件- MySQL < 5.1 :以秒为单位 - MySQL >= 5.1 : 以毫秒为单位 - MySQL >= 5.5 : 可以将慢查询日志记录到表 - MySQL >= 5.6 : 以更细的粒度记录慢查询 - MySQL >= 5.7 : 增加timestamps支持
slow_query_log_file
- 建议配置成统一的名字
- 用于优化查询