用户账号:user@host
MySQL权限类别: 库级别: 表级别: 字段级别: 管理类: 程序类: 管理类: CREATE USER 创建用户 RELOAD 是否允许重载 LOCK TABLES 锁定表 REPLICATION CLIENT, REPLICATION SLAVE 授权复制操作 SHUTDOWN 关闭数据库 FILE 文件 SHOW DATABASES 查看 PROCESS 查看进程相关信息 SUPER 转赠类
程序类: FUNCTION,PROCEDURE,TRIGGER 函数,过程,触发器
操作:CREATE,ALTER,DROP,EXECUTE 创建函数,修改函数,删除函数,执行函数
库和表级别:表结构 CREATE,ALTER,DROP INDEX CREATE VIEW 创建视图 SHOW VIEW 查看视图 GRANT OPTION:能够把自己获得的权限生成一个副本转赠给其它用户;
数据操作: 表: INSERT/DELETE/UPDATE/SELECT
字段: SELECT(col1,col2,...) UPDATE(col1,col2,...) INSERT(col1,col2,...)
所有权限:ALL, ALL PRIVILEGES
元数据数据库(数据字典):mysql 授权: db, host, user tables_priv 表级别权限在这个表中 column_priv 字段 procs_priv 程序 proxies_priv 代理
MySQL用户管理: 'user'@'host'; host: IP 主机名 NETWORK 通配符 %, _
skip_name_resolve={ON|OFF} 是否启动DNS解析 建议开启 减少时间
创建用户: CREATE USER 'user'@'host' [IDENTIFIED BY [PASSWORD] 'password'] [,'user'@'host' [IDENTIFIED BY [PASSWORD] 'password']...] 创建命令 没有任何权限
重命名:RENAME USER RENAME USER old_user TO new_user[, old_user TO new_user] ...
删除用户: DROP USER 'user'@'host' [, 'user'@'host'] ...
修改用户密码: (1) SET PASSWORD [FOR 'user'@'host'] = PASSWORD('cleartext password'); (2) UPDATE mysql.user SET Password=PASSWORD('cleartext password') WHERE User='USERNAME' AND Host='HOST'; (3) mysqladmin -uUSERNAME -hHOST -p password 'NEW_PASS' 要求用户有SUPER权限
生效:FLUSH PRIVILEGES 此表会缓存到内存中 所以必须刷新才能生效
忘记管理员密码的解决办法: (1) 启动mysqld进程时,使用--skip-grant-tables和--skip-networking选项;不读mysql.user并只能从本机登录 (2) 通过UPDATE命令修改管理员密码; (3) 以正常 方式启动mysqld进程; 修改配置文件自动登录: ~]# vim .my.cnf [mysql] user=’USER’ password=’PASSWD’
授权:GRANT GRANT priv_type [(column_list)] [, priv_type [(column_list)]] ... ON [object_type] priv_level TO user_specification [, user_specification] ... 授权给哪个用户 [REQUIRE {NONE | ssl_option [[AND] ssl_option] ...}] [WITH with_option ...]
object_type:权限级别 TABLE 表名 | FUNCTION 函数名 | PROCEDURE 过程名
priv_level:权限级别 哪个库哪个表 * | *.* | db_name.* | db_name.tbl_name | tbl_name | db_name.routine_name
ssl_option: SSL | X509 | CIPHER 'cipher' | ISSUER 'issuer' | SUBJECT 'subject'
with_option: GRANT OPTION | MAX_QUERIES_PER_HOUR count 每小时最多能发起多少此查询 | MAX_UPDATES_PER_HOUR count 每小时最多能发起多少次更新操作 | MAX_CONNECTIONS_PER_HOUR count 每小时最多能链接多少次 | MAX_USER_CONNECTIONS count 单用户最大并发连接数
查看授权:SHOW GRANTS SHOW GRANTS [FOR 'user'@'host']
取消授权:REVOKE REVOKE priv_type [(column_list)][, priv_type [(column_list)]] ... ON [object_type] priv_level FROM 'user'@'host' [,'user'@'host'] ... 例:REVOKE All ON hellodb.students FROM ‘test’@’%’; 收回授权时的priv_level必须于授权时给定的一致 REVOKE ALL PRIVILEGES, GRANT OPTION FROM user [, user] ...
查询缓存:
缓存机制:k/v key:查询语句的hash值 value:查询语句的执行结果
如何判断缓存是否命中: 通过查询语句的哈希值判断:哈希值考虑的因素包括 查询本身、要查询数据库、客户端使用的协议版本、...
哪些查询可能不会被缓存? 查询语句中包含UDF(用户自定义函数) 存储函数 用户自定义变量 临时表 mysql系统表或者是包含列级别权限的查询 有着不确定结果值的函数(now());
查询缓存相关的服务器变量: query_cache_limit:能够缓存的最大查询结果;(单语句结果集大小上限) 有着较大结果集的语句,显式使用SQL_NO_CACHE,以避免先缓存再移出; query_cache_min_res_unit:内存块的最小分配单位;缓存过小的查询结果集会浪费内存空间; 较小的值会减少空间浪费,但会导致更频繁地内存分配及回收操作; 较大值的会带来空间浪费; query_cache_size:查询缓存空间的总共可用的大小;单位是字节,必须是1024的整数倍; query_cache_strip_comments query_cache_type:缓存功能启用与否; ON:启用; OFF:禁用; DEMAND:按需缓存,仅缓存SELECT语句中带SQL_CACHE的查询结果; query_cache_wlock_invalidate:如果某表被其它连接锁定,是否仍然可以从查询缓存中返回查询结果;默认为OFF,表示可以;ON则表示不可以; Mysql>SET @@global.query_cache_size = XXX; 状态变量:缓存命中率的统计数据 mysql> SHOW GLOBAL STATUS LIKE 'Qcache%'; +-------------------------+----------+ | Variable_name | Value | +-------------------------+----------+ | Qcache_free_blocks | 1 | 有多少块是空闲的 | Qcache_free_memory | 16759688 | 空闲空间 | Qcache_hits | 0 | 命中次数 | Qcache_inserts | 0 | 缓存的插入次数(比in_cache大,有失效的/LRU算法清理) | Qcache_lowmem_prunes | 0 | 内存被清理的次数 | Qcache_not_cached | 0 | 未缓存的查询 | Qcache_queries_in_cache | 0 | 在缓存中的条目数量 | Qcache_total_blocks | 1 | 已分配的空间被划分成几个快 +-------------------------+----------+
命中率: Qcache_hits/Com_select ************************************** MySQL的索引:
索引的作用:加速查询操作; 表中数据子集:把表中某个或某些字段的数据提取出来另存为一个特定数据结构组织的数据; 某个字段或某些字段:WHERE子句中用到的字段;
索引类型:B+ TREE,HASH B+ TREE:顺序存储,每一个叶子结点到根结点的距离相同;左前缀索引,适合于范围类型的数据查询;
适用于B+ TREE索引的查询类型:全键值、键值范围或键前缀; 全值匹配:精确匹配某个值; 匹配最左前缀:只精确起头的部分; 匹配范围值: 精确匹配某一列,范围匹配另一列; 只用访问索引的查询:覆盖索引;
不适用B+ TREE索引: 如查条件不是从最左侧列开始,索引无效; 不能跳过索引中的某列; 如果查询中的某个列是为范围查询,那么其右侧的列都无法再使用索引优化查询;
Hash索引:基于哈希表实现,特别适用于值的精确; 只有memory引擎 适用场景: 只支持等值比较查询,例如=, IN(), <=> (等值比较 但允许NULL存在) 不用场景: 所有非精确值查询;
索引优点: 降低需要扫描的数据量,减少了IO次数; 可以帮助避免排序操作,避免使用临时表; (临时表用来排序) 帮助将随机IO转为顺序IO;
高性能索引策略: (1) 在WHERE中独立使用列,尽量其参与运算;(不要做数学运算) (2) 左前缀索引:索引构建于字段的最左侧的多少个字符,要通过索引选择性来评估 索引选择性:不重复的索引值和数据表的记录总数的比值; (3) 多列索引: AND边接的多个查询条件更适合使用多列索引,而非多个单键索引; (4) 选择合适的索引列次序:选择性最高的放左侧;
EXPLAIN来分析索引有效性:
EXPLAIN [explain_type] SELECT select_options
explain_type: EXTENDED 扩展信息输出 | PARTITIONS
输出结果: id: 1 select_type: SIMPLE 查询类型 table: students 表 type: const 查询方式 possible_keys: PRIMARY 可能用到的索引 key: PRIMARY 最终用到的索引 key_len: 4 索引长度 ref: const rows: 1 Extra:
id:当前查询语句中,第个SELECT语句的编号; 复制的查询的类型主要三种: 简单子查询 用于FROM中的子查询 联合查询 注意:联合查询的分析结果会出现一个额外的匿名临时表;
select_type:查询类型: 简单查询:SIMPLE 复杂查询: 简单子查询:SUBQUERY 用于FROM中的子查询:DERIVED 联合查询中的第一个查询:PRIMARY 联合查询中的第一个查询之后的其它查询:UNION 联合查询生成的临时表:UNION RESULT
table:查询针对的表; type:关联类型,或称为访问类型,即MySQL如何去查询表中的行 ALL:全表扫描; index:根据索引的顺序进行的全表扫描;但同时如果Extra列出现了"Using index”表示使用了覆盖索引; range:有范围限制地根据索引实现范围扫描;扫描位置始于索引中的某一项,结束于另一项; ref:根据索引返回的表中匹配到某单个值的所有行(匹配给定值的行不止一个); eq_ref:根据索引返回的表中匹配到某单个值的单一行,仅返回一个行,但需林与某个额外的参考值比较,而不是常数; const,system:与某个常数比较,且只返回一行; possiable_keys:查询中可能会用到的索引; key:查询中使用的索引; key_len:查询中用到的索引长度; ref:在利用key字段所显示的索引完成查询操作时所引用的列或常量值; rows:MySQL估计为找到所有的目标项而需要读取的行数; Extra:额外信息 Using index:使用了覆盖索引进行的查询; Using where:拿到数据后还要再次进行过滤; Using temporary:使用了临时表以完成查询; Using filesort:对结果使用了一个外部索引排序; |
MySQL二次整理(5)v1.0
原创zx337954373 ©著作权
©著作权归作者所有:来自51CTO博客作者zx337954373的原创作品,请联系作者获取转载授权,否则将追究法律责任
上一篇:MySQL二次整理(4)v1.0
下一篇:MySQL主从备份(1)v1.0
提问和评论都可以,用心的回复会被更多人看到
评论
发布评论
相关文章
-
CodeTool v1.0
常用字符串加密解密操作封装, 目前支持Url加密解密工具,Base64加密解密工具
Url加密解密工具 Base64加密解密工具 加密解密 .net 下载地址 -
NSDECODER v1.0
1 简介nsdecoder是一款用于进行网页挂马检测的自动化工具。nsdecoder可对网页进行自动化的解密与分析从而判断是否存在网页木马,在挂马的情况下分析所挂网页木马利用的漏洞,并能给出木马源地址。1 主要功能 自动化地分析与检
工具 网页挂马 休闲 NSDECODER v1.0 nsdecoder -
MySql备份还原工具(v1.0)
C#.net 自主开发目前1.0 版本,支持服务自动备份,手动恢复功能
C#.MySql备份工具 mysql xml 自动备份 下载地址 -
Cobbler部署文档V1.0
写的比较仓促,有疑问可以留言讨论,谢谢。
linux cobbler -
Qomo V1.0 final 发布~ajax 命名空间 对象池 下载地址 资料文档