Mysql基本用法(五)

版权声明:秉承开源精神,博主博文可以随机转载,但请注明出处! https://blog.csdn.net/zisefeizhu/article/details/81939140

目录

Mysql的用户和权限:

Mysql cache


本篇是系列性,由浅入深,主要是为了本人日后回看时再学习,如果道友对Mysql也是零基础的话,强烈建议从头开始看

Mysql基本用法(一)

Mysql的用户和权限:

创建用户账号:

        CREATE USER 'username'@'host' IDENTIFIED BY 'your_password';

删除用户账号:

        DROP USER 'username'@'host';

查看用户获得的权限:

        SHOW GRANTS FOR 'username'@'host';

Mysql的权限级别:

        库级别

        表级别

        字段级别

        管理类

        程序类

 

管理类权限:

        CREATE TEMPORARY TABLES

CREATE USER

FILE

SUPER

SHOW DATABASES

RELOAD

SHUTDOWN

REPLICATION SLAVE

REPLICATION CLIENT

LOCK TABLES

PROCESS

 

程序类权限:

FUNCTION

PROCEDURE

TRIGGER

 

 

   CREATE,ALTER,DROP,EXCUTE   

 

Storage routine:存储例程

                                storage procedure

                                storage function

库和表级别权限:对TABLE  or  DATABASE 有效

ALTER

ALTER ROUTINE

CREATE

CREATE ROUTINE

CREATE VIEW

DROP

EXECUTE

INDEX

GRANT OPTION: 是否可以转授权限的权限;不建议使用,很难回收权限

SHOW VIEW

数据操作(表级别):

SELECT

INSERT

UPDATE

DELETE

 

字段级别:

SELECT(col1,...)

UPDATE(col1,...)

INSERT(col1,...)

 

所有权限:

ALL [PRIVILEGES]

 

用户账号:

'USERNAME'@'HOST'

@'HOST'

主机名

IP地址或Network;

通配符:

%,_: 172.16.1.%

创建用户:CREAT USER

CREATE USER 'USERNAME'@'HOST' [IDENTIFIED BY 'password'];

 

查看用户获得的授权:SHOW GRANTS FOR

SHOW GRANTS FOR 'USERNAME'@'HOST'

 

 

用户重命名:RENAME USER

            RENAME USER old_user_name TO new_user_name

 

删除用户:DROP USER 'USERNAME'@'HOST'

 

修改密码:

1)      SET PASSWORD FOR

2)      UPDATE mysql.user SET password=PASSWORD('your_password') WHERE clause;

3)      mysqladmin password

mysqladmin [OPTIONS] command command....

-u, -h, -p,

 

忘记管理员密码的解决方法:

1)      启动mysqld进程时,为其使用:--skip-grant-tables --skip-networking

2)      使用UPDATE命令修改管理员密码;

3)      关闭mysqld进程,移除上面两个选项,重启mysqld;

 

/etc/init.d/mysql --> 重启 -->  mysql   -->   UPDATE  --> 重启   

 

元数据数据库:mysql

mysql中的授权相关的表:

db、host、user

columns_priv、tables_priv, procs_priv

 

授权与取消授权:GRANT, REVOKE

 

授权

GRANT priv1, priv2, ... ON [TABLE|FUNCTION|PROCEDURE] db_name.tb_name|routine TO 'username'@'host' [IDENTIFIED BY 'password'] [REQUIRE ssl_option] [WITH with_option]

GRANT OPTION

    | MAX_QUERIES_PER_HOUR count

| MAX_UPDATES_PER_HOUR count

| MAX_CONNECTIONS_PER_HOUR count

    | MAX_USER_CONNECTIONS count

 

取消

REVOKE priv1,priv2,... ON [TABLE|FUNCTION|PROCEDURE] db_name.tb_name|routine FROM 'username'@'host',...;

 

练习:授权test用户通过任意主机连接当前mysqld,但每秒钟最大查询次数不得超过5次;此账户的同时连接次数不得超过3次;

 

Mysql cache

 

如何判断是否命中:

通过查询语句的哈希值判断;哈希值考虑的因素包括

查询本身,要查询的数据库,客户端使用协议版本,。。。

 

查询语句任何字符上的不同,都会导致缓存不能命中;

 

         SELECT --> QUERY CACHE --> PARSER --> OPTIMIZER --> EXECUTING ENGINE --> STORAGE ENGINE

         缓存:hit(命中),miss(未命中)

                    Key-value

                    衡量缓存的有效性:命中率,hit/(hit+miss)

                   次数;

       query_cache_type

              ON,OFF,DEMAND

             

       SQL_CACHE | SQL_NO_CACHE

              QUERY CACHE:

                     Key:查询语句的hash码;

                     Value:查询语句的执行结果;

       什么样的语句不会缓存?

              查询语句中有不确定数据时不会缓存;

一般来讲,如果查询中包含用户自定义的函数(UDF)、存储函数、用户变量、临时表、mysql库中系统表、包含列表权限的表,有着不确定值的函数(Now())或者任何包含权限信息表,都不会缓存;

       缓存什么场景下比较有效?

              对于存在需要大量资源的查询非常适合启用缓存;

       与缓存功能相关的服务器变量:

             

              Query_cache_limit:mysql能够缓存的最大查询结果;如果某查询的结果大于此值,则不会被缓存;

对于有着较大结果的查询语句,建议在SELECT中使用SQL_NO_CACHE

              Query_cache_min_res_unit:查询缓存中分配内存的最小单位

较小值会减少浪费,但会导致更频繁的内存分配操作;

较大值会带来浪费,会导致碎片过多。

                     计算公式:(query_cache_size-Qcache_free_memory)/Qcache_queries_in_cache

              Query_cache_size:查询缓存的总体可用空间;单位是字节,其必须是1024的倍数;

              Query_cache_wlock_incalidate:当其他会话锁定此次查询用到的资源时,是否能再从缓存中返回数据;默认OFF表示能返回数据

query_cache_type:ON OFF DEMAED

      

与缓存相关的状态变量:

             

              Qcache_hits/Com_select

              衡量缓存是否足够有效的另一种思路:Qcache_hits/Qcache_inserts

                     如果此比值大于3:1,说明缓存也是有效的;如果高于10:1,相当

理想;

 

              缓存优化的思路:

1)      批量写入比单次写入对缓存的影响要小很多;

2)      缓存空间不宜过大,大量缓存的同时失效会导致Mysql假死;

3)      必要时,使用SQL_CACHE或SQL_NO_CACHE手动控制缓存;

4)      对写密集型的应用场景,禁用缓存反而能提高性能;

碎片整理:FLUSH QUERY_CACHE

清空缓存:RESET QUERY_CACHE

猜你喜欢

转载自blog.csdn.net/zisefeizhu/article/details/81939140