MySQL 权限和查询缓存
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了MySQL 权限和查询缓存相关的知识,希望对你有一定的参考价值。
mysql 权限和查询缓存
================================================================================
概述:
================================================================================
MySQL用户和权限管理
1.权限类别
★用户账号:[email protected]
user:账户名称;
host:此账户可通过哪些客户端主机请求创建连接线程;
%:任意长度的任意字符;
_:任意单个字符;
★MySQL权限类别:
※数据类权限:
库级别:把某个数据库的所有权限或某些权限授权给指定用户(数据库级别的);
表级别:把一个数据库中的某个表或有限的几个表授权给指定用户;
字段级别:把一个表上指定的字段授权给指定用户;
※管理类:如改变服务器变量的值等;
※程序类:能否调用或执行函数,程序代码等程序;
☉管理类:
CREATE USER; //创建用户
RELOAD; //可以使mysql关闭日志文件,滚动日志文件并打开新文件
LOCK TABLES;
REPLICATION CLIENT, REPLICATION SLAVE;
SHUTDOWN; //关闭mysql服务器进程的权限
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
MariaDB [(none)]> use mysql; Reading table information for completion of table and column names You can turn off this feature to get a quicker startup with -A Database changed MariaDB [mysql]> SHOW TABLES; +---------------------------+ | Tables_in_mysql | +---------------------------+ | columns_priv | # 字段级别的权限 | db | # 库级别的权限 | event | | func | | general_log | | help_category | | help_keyword | | help_relation | | help_topic | | host | # 主机连接限制 | ndb_binlog_index | | plugin | | proc | | procs_priv | # 程序级别的权限 | proxies_priv | # 代理权限 | servers | | slow_log | | tables_priv | # 表级别的权限 | time_zone | | time_zone_leap_second | | time_zone_name | | time_zone_transition | | time_zone_transition_type | | user | # 用户账号 +---------------------------+ 24 rows in set (0.00 sec)
2.MySQL用户管理:
★用户账号:[email protected]
user:账户名称;
host:此账户可通过哪些客户端主机请求创建连接线程;(IP,主机名,NETWORK)
%:任意长度的任意字符;
_:任意单个字符;
注意:
基于主机名授权和IP地址授权是两个不同的账号,如果基于主机名授权时会反解主机名到IP地址,一般不建议,并且要跳过主机名解析
★skip_name_resolve={ON|OFF}
是否跳过主机名解析
★创建用户:
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‘] ...
★修改用户密码
SET PASSWORD [FOR ‘user‘@‘host‘] = PASSWORD(‘cleartext password‘);
UPDATE mysql.user SET Password=PASSWORD(‘cleartext password‘) WHERE User=‘USERNAME‘ AND Host=‘HOST‘;
mysqladmin -uUSERNAME -hHOST -p password ‘NEW_PASS‘
※ FLUSH PRIVILEGES //通知mysql进程重读授权表
命令演示:
1.可以使用SHOW PROCESSLIST 查看当前线程列表,如下:
MariaDB [hellodb]> SHOW PROCESSLIST; +----+---------+-----------------+---------+---------+------+-------+------------------+----------+ | Id | User | Host | db | Command | Time | State | Info | Progress | +----+---------+-----------------+---------+---------+------+-------+------------------+----------+ | 3 | root | localhost | hellodb | Query | 0 | NULL | SHOW PROCESSLIST | 0.000 | | 4 | rsyslog | 127.0.0.1:38101 | Syslog | Sleep | 123 | | NULL | 0.000 | +----+---------+-----------------+---------+---------+------+-------+------------------+----------+ 2 rows in set (0.00 sec)
2.创建用户,修改密码,修改用户名,并查看刚创建用户的权限
# 创建用户账号及密码 MariaDB [(none)]> CREATE USER ‘tao‘@‘192.168.1.%‘ IDENTIFIED BY ‘134296‘; Query OK, 0 rows affected (0.00 sec)
# 修改用户账户密码,并重读授权表 MariaDB [(none)]> SET PASSWORD FOR ‘tao‘@‘192.168.1.%‘ = PASSWORD(‘123456‘); Query OK, 0 rows affected (0.00 sec) MariaDB [(none)]> FLUSH PRIVILEGES; Query OK, 0 rows affected (0.01 sec)
# 修改用户名 MariaDB [(none)]> RENAME USER ‘tao‘@‘192.168.1.%‘ TO ‘xiu‘@‘192.168.1.%‘; Query OK, 0 rows affected (0.02 sec)
# 并查看刚创建用户的权限,发现为usage MariaDB [(none)]> SHOW GRANTS FOR ‘xiu‘@‘192.168.1.%‘; +--------------------------------------------------------------------------------------------------------------+ | Grants for [email protected]% | +--------------------------------------------------------------------------------------------------------------+ | GRANT USAGE ON *.* TO ‘xiu‘@‘192.168.1.%‘ IDENTIFIED BY PASSWORD ‘*6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9‘ | +--------------------------------------------------------------------------------------------------------------+ 1 row in set (0.00 sec)
3.登录创建的用户账户,创建数据库,可以发现权限不被允许,可见新创建的用户几乎是没有任何权限的;要想有权限就需要给用户授予相关的管理、程序、数据类的权限等
[[email protected] ~]# mysql -uxiu -h192.168.1.107 -p123456 Welcome to the MariaDB monitor. Commands end with ; or \g. Your MariaDB connection id is 6 Server version: 5.5.44-MariaDB MariaDB Server Copyright (c) 2000, 2015, Oracle, MariaDB Corporation Ab and others. Type ‘help;‘ or ‘\h‘ for help. Type ‘\c‘ to clear the current input statement. MariaDB [(none)]> SHOW DATABASES; +--------------------+ | Database | +--------------------+ | information_schema | | test | +--------------------+ 2 rows in set (0.05 sec) MariaDB [test]> CREATE DATABASE mydb; ERROR 1044 (42000): Access denied for user ‘xiu‘@‘192.168.1.%‘ to database ‘mydb‘
4.要想有权限就需要给用户授予相关的管理、程序、数据类的权限等,授予xiu用户相关的权限如下:
MariaDB [(none)]> GRANT ALL ON mydb.* TO ‘xiu‘@‘192.168.1.%‘; # 授予所有的权限 Query OK, 0 rows affected (0.00 sec) MariaDB [(none)]> SHOW GRANTS FOR ‘xiu‘@‘192.168.1.%‘; +--------------------------------------------------------------------------------------------------------------+ | Grants for [email protected]% | +--------------------------------------------------------------------------------------------------------------+ | GRANT USAGE ON *.* TO ‘xiu‘@‘192.168.1.%‘ IDENTIFIED BY PASSWORD ‘*6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9‘ | | GRANT ALL PRIVILEGES ON `mydb`.* TO ‘xiu‘@‘192.168.1.%‘ | +--------------------------------------------------------------------------------------------------------------+ 2 rows in set (0.00 sec) MariaDB [(none)]> REVOKE UPDATE ON mydb.* FROM ‘xiu‘@‘192.168.1.%‘; # 回收UPDATE权限 Query OK, 0 rows affected (0.00 sec) MariaDB [(none)]> SHOW GRANTS FOR ‘xiu‘@‘192.168.1.%‘; +-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | Grants for [email protected]% | +-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | GRANT USAGE ON *.* TO ‘xiu‘@‘192.168.1.%‘ IDENTIFIED BY PASSWORD ‘*6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9‘ | | GRANT SELECT, INSERT, DELETE, CREATE, DROP, REFERENCES, INDEX, ALTER, CREATE TEMPORARY TABLES, LOCK TABLES, EXECUTE, CREATE VIEW, SHOW VIEW, CREATE ROUTINE, ALTER ROUTINE, EVENT, TRIGGER ON `mydb`.* TO ‘xiu‘@‘192.168.1.%‘ | +-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ 2 rows in set (0.00 sec)
3.忘记管理员密码的解决办法:
★解决步骤如下:
(1)启动mysqld进程时,使用--skip-grant-tables和--skip-networking选项;
CentOS 7:mariadb.service
CentOS 6:/etc/init.d/mysqld
(2)通过UPDATE命令修改管理员密码;
(3)以正常方式启动mysqld进程;
演示:
1.以CentOS 7 为例,首先查看mysql数据库user表中有关用户的账户名和密码如下:
MariaDB [(none)]> SELECT user,host,password FROM mysql.user; +------------+-------------+-------------------------------------------+ | user | host | password | +------------+-------------+-------------------------------------------+ | root | localhost | *41EE0F8759D5340036B009143E1727DB5787A448 | | root | centos7 | *41EE0F8759D5340036B009143E1727DB5787A448 | | root | 127.0.0.1 | *41EE0F8759D5340036B009143E1727DB5787A448 | | root | ::1 | *41EE0F8759D5340036B009143E1727DB5787A448 | | ultraxuser | 127.0.0.1 | *41EE0F8759D5340036B009143E1727DB5787A448 | | ultraxuser | localhost | *41EE0F8759D5340036B009143E1727DB5787A448 | | rsyslog | 127.0.0.1 | *41EE0F8759D5340036B009143E1727DB5787A448 | | rsyslog | local | *41EE0F8759D5340036B009143E1727DB5787A448 | | zbxuser | 10.1.%.% | *24E65C3D3577DA6C2A596788CEAA02923A74B75D | | zbxuser | 127.0.0.1 | *24E65C3D3577DA6C2A596788CEAA02923A74B75D | | xiu | 192.168.1.% | *6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9 | +------------+-------------+-------------------------------------------+
2.假如现在我忘记了root管理员用户的密码,执行过程如下:
1)首先关闭mysql服务,修改启动mariadb.service的文件,添加 --skip-grant-tables和--skip-networking选项,如下:
[[email protected] ~]# systemctl stop mariadb.service # 停止mariadb服务 [[email protected] ~]# vim /usr/lib/systemd/system/mariadb.service # 修改mariadb启动文件 ExecStart=/usr/bin/mysqld_safe --basedir=/usr --skip-grant-tables --skip-networking [[email protected] ~]# systemctl daemon-reload # 要想生效需要重载
2)再次启动mariadb服务,然后使用mysql直接连接,连接成功后使用UPDATE修改密码
[[email protected] ~]# mysql Welcome to the MariaDB monitor. Commands end with ; or \g. Your MariaDB connection id is 2 Server version: 5.5.44-MariaDB MariaDB Server Copyright (c) 2000, 2015, Oracle, MariaDB Corporation Ab and others. Type ‘help;‘ or ‘\h‘ for help. Type ‘\c‘ to clear the current input statement. MariaDB [(none)]> UPDATE mysql.user SET Password=PASSWORD(‘taoxiu‘) WHERE User=‘root‘; # 修改密码 Query OK, 4 rows affected (0.00 sec) Rows matched: 4 Changed: 4 Warnings: 0 MariaDB [(none)]> exit Bye
3)然后再次关闭mariadb服务,把mariadb启动文件中添加的--skip-grant-tables和--skip-networking选项删除即可
[[email protected] ~]# systemctl stop mariadb.service [[email protected] ~]# vim /usr/lib/systemd/system/mariadb.service ExecStart=/usr/bin/mysqld_safe --basedir=/usr # 把添加的选项删除即可 [[email protected] ~]# systemctl daemon-reload [[email protected] ~]# systemctl start mariadb.service [[email protected] ~]# mysql # 再使用mysql直接登录,发现已经登录不上了 ERROR 1045 (28000): Access denied for user ‘root‘@‘localhost‘ (using password: NO) [[email protected] ~]# mysql -uroot -ptaoxiu # 使用修改的密码成功登录 Welcome to the MariaDB monitor. Commands end with ; or \g. Your MariaDB connection id is 3 Server version: 5.5.44-MariaDB MariaDB Server Copyright (c) 2000, 2015, Oracle, MariaDB Corporation Ab and others. Type ‘help;‘ or ‘\h‘ for help. Type ‘\c‘ to clear the current input statement. MariaDB [(none)]>
4.授权: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 ...]
★查看授权: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 PRIVILEGES, GRANT OPTION
FROM user [, user] ...
演示:
1.创建tao用户账户,并指定密码;
MariaDB [mysql]> CREATE USER ‘tao‘@‘localhost‘ IDENTIFIED BY ‘123456‘; Query OK, 0 rows affected (0.01 sec) MariaDB [mysql]> SHOW GRANTS FOR ‘tao‘@‘localhost‘; +------------------------------------------------------------------------------------------------------------+ | Grants for [email protected] | +------------------------------------------------------------------------------------------------------------+ | GRANT USAGE ON *.* TO ‘tao‘@‘localhost‘ IDENTIFIED BY PASSWORD ‘*6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9‘ | +------------------------------------------------------------------------------------------------------------+ 1 row in set (0.00 sec)
2.授予tao用户所有权限;
MariaDB [(none)]> GRANT ALL ON mydb.* TO ‘tao‘@‘localhost‘; Query OK, 0 rows affected (0.01 sec) MariaDB [(none)]> SHOW GRANTS FOR ‘tao‘@‘localhost‘; +------------------------------------------------------------------------------------------------------------+ | Grants for [email protected] | +------------------------------------------------------------------------------------------------------------+ | GRANT USAGE ON *.* TO ‘tao‘@‘localhost‘ IDENTIFIED BY PASSWORD ‘*6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9‘ | | GRANT ALL PRIVILEGES ON `mydb`.* TO ‘tao‘@‘localhost‘ | +------------------------------------------------------------------------------------------------------------+ 2 rows in set (0.00 sec)
3.现在我再创建一个叫‘jing‘的用户,看让tao用户能否把自己的权限转增给jing用户,如下:
MariaDB [(none)]> CREATE USER ‘jing‘@‘localhost‘; # 在root管理员上创建jing用户 Query OK, 0 rows affected (0.00 sec) [[email protected] ~]# mysql -utao -hlocalhost -p123456 # 登录tao用户账号 Welcome to the MariaDB monitor. Commands end with ; or \g. Your MariaDB connection id is 10 Server version: 5.5.44-MariaDB MariaDB Server Copyright (c) 2000, 2015, Oracle, MariaDB Corporation Ab and others. Type ‘help;‘ or ‘\h‘ for help. Type ‘\c‘ to clear the current input statement. MariaDB [(none)]> show databases; # 可以看到授权的mydb数据库 +--------------------+ | Database | +--------------------+ | information_schema | | mydb | | test | +--------------------+ 3 rows in set (0.01 sec) # tao用户把自己的权限转赠给jing用户,发现失败,这是因为要想有转赠的权限,需要管理员授予WITH GRANT OPTION权限 MariaDB [(none)]> GRANT SELECT,INSERT,DELETE on mydb.* TO ‘jing‘@‘localhost‘; ERROR 1044 (42000): Access denied for user ‘tao‘@‘localhost‘ to database ‘mydb‘
4.管理员授予tao用户允许转赠的权限,再次测试可以发现可以成功转赠给jing用户
MariaDB [(none)]> GRANT ALL ON mydb.* TO ‘tao‘@‘localhost‘ WITH GRANT OPTION; Query OK, 0 rows affected (0.00 sec) MariaDB [(none)]> FLUSH PRIVILEGES; Query OK, 0 rows affected (0.00 sec) # --------------------------------------------------------------------------------------- # 登录tao用户账号,查看其权限可以发现多了一项 WITH GRANT OPTION 的权限, MariaDB [(none)]> SHOW GRANTs FOR ‘tao‘@‘localhost‘; +------------------------------------------------------------------------------------------------------------+ | Grants for [email protected] | +------------------------------------------------------------------------------------------------------------+ | GRANT USAGE ON *.* TO ‘tao‘@‘localhost‘ IDENTIFIED BY PASSWORD ‘*6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9‘ | | GRANT ALL PRIVILEGES ON `mydb`.* TO ‘tao‘@‘localhost‘ WITH GRANT OPTION | +------------------------------------------------------------------------------------------------------------+ 2 rows in set (0.00 sec) # 成功将自己的权限转赠给jing用户 MariaDB [(none)]> GRANT SELECT,INSERT,DELETE on mydb.* TO ‘jing‘@‘localhost‘; Query OK, 0 rows affected (0.00 sec)
5.收回tao用户的GRANT OPTION的权限
MariaDB [(none)]> REVOKE GRANT OPTION ON mydb.* FROM ‘tao‘@‘localhost‘; # 回收权限 Query OK, 0 rows affected (0.00 sec) MariaDB [(none)]> SHOW GRANTS FOR ‘tao‘@‘localhost‘; +------------------------------------------------------------------------------------------------------------+ | Grants for [email protected] | +------------------------------------------------------------------------------------------------------------+ | GRANT USAGE ON *.* TO ‘tao‘@‘localhost‘ IDENTIFIED BY PASSWORD ‘*6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9‘ | | GRANT ALL PRIVILEGES ON `mydb`.* TO ‘tao‘@‘localhost‘ | +------------------------------------------------------------------------------------------------------------+ 2 rows in set (0.00 sec)
6.现在授权tao用户hellodb数据库的stuents表上某个字段的授权,如下:
MariaDB [(none)]> GRANT SELECT(Name,Age),UPDATE(Age) ON hellodb.students TO ‘tao‘@‘localhost‘; Query OK, 0 rows affected (0.06 sec)
登录tao的用户账号,查看权限,执行操作如下:
MariaDB [(none)]> SHOW GRANTS FOR ‘tao‘@‘localhost‘; # 查看权限如下: +------------------------------------------------------------------------------------------------------------+ | Grants for [email protected] | +------------------------------------------------------------------------------------------------------------+ | GRANT USAGE ON *.* TO ‘tao‘@‘localhost‘ IDENTIFIED BY PASSWORD ‘*6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9‘ | | GRANT ALL PRIVILEGES ON `mydb`.* TO ‘tao‘@‘localhost‘ | | GRANT SELECT (Age, Name), UPDATE (Age) ON `hellodb`.`students` TO ‘tao‘@‘localhost‘ | +------------------------------------------------------------------------------------------------------------+ 3 rows in set (0.00 sec) MariaDB [(none)]> SHOW DATABASES; # 可以看到数据库中又多了一个hellodb的数据库 +--------------------+ | Database | +--------------------+ | information_schema | | hellodb | | mydb | | test | +--------------------+ 4 rows in set (0.00 sec) MariaDB [(none)]> USE hellodb; Reading table information for completion of table and column names You can turn off this feature to get a quicker startup with -A Database changed MariaDB [hellodb]> SHOW TABLES; # 可以发现仅能看见我们授权给的students表 +-------------------+ | Tables_in_hellodb | +-------------------+ | students | +-------------------+ 1 row in set (0.05 sec) MariaDB [hellodb]> DESC students; # 表结构也只有Name和Age两个授权的字段,其他未授权的均不可见 +-------+---------------------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +-------+---------------------+------+-----+---------+-------+ | Name | varchar(50) | NO | | NULL | | | Age | tinyint(3) unsigned | NO | | NULL | | +-------+---------------------+------+-----+---------+-------+ 2 rows in set (0.08 sec) MariaDB [hellodb]> SELECT * FROM students; # 查询所有的的字段发现不允许,因为其他字段未经授权 ERROR 1143 (42000): SELECT command denied to user ‘tao‘@‘localhost‘ for column ‘StuID‘ in table ‘students‘ MariaDB [hellodb]> SELECT Name,Age FROM students; # 只能查看授权的字段 +---------------+-----+ | Name | Age | +---------------+-----+ | Shi Zhongyu | 22 | | Shi Potian | 22 | | Xie Yanke | 53 | | Ding Dian | 32 | | Yu Yutong | 26 | | Shi Qing | 46 | | Xi Ren | 19 | | Lin Daiyu | 17 | | Ren Yingying | 20 | | Yue Lingshan | 19 | | Yuan Chengzhi | 23 | | Wen Qingqing | 19 | | Tian Boguang | 33 | | Lu Wushuang | 17 | | Duan Yu | 19 | | Xu Zhu | 21 | | Lin Chong | 25 | | Hua Rong | 23 | | Xue Baochai | 18 | | Diao Chan | 19 | | Huang Yueying | 22 | | Xiao Qiao | 20 | | Ma Chao | 23 | | Xu Xian | 27 | | Sun Dasheng | 100 | +---------------+-----+ 25 rows in set (0.00 sec) #----------------------------------------------------------------------------------- MariaDB [hellodb]> UPDATE students SET Age=21 WHERE Name=‘Duan YU‘; # 可以修改年龄 Query OK, 1 row affected (0.00 sec) Rows matched: 1 Changed: 1 Warnings: 0 MariaDB [hellodb]> UPDATE students SET Name=GuoJing WHERE Name=‘Duan YU‘; # 修改姓名失败,因为只授权了UPDATE允许修改Age字段 ERROR 1143 (42000): UPDATE command denied to user ‘tao‘@‘localhost‘ for column ‘Name‘ in table ‘students‘ MariaDB [hellodb]> SELECT Name,Age FROM students; +---------------+-----+ | Name | Age | +---------------+-----+ | Shi Zhongyu | 22 | | Shi Potian | 22 | | Xie Yanke | 53 | | Ding Dian | 32 | | Yu Yutong | 26 | | Shi Qing | 46 | | Xi Ren | 19 | | Lin Daiyu | 17 | | Ren Yingying | 20 | | Yue Lingshan | 19 | | Yuan Chengzhi | 23 | | Wen Qingqing | 19 | | Tian Boguang | 33 | | Lu Wushuang | 17 | | Duan Yu | 21 | | Xu Zhu | 21 | | Lin Chong | 25 | | Hua Rong | 23 | | Xue Baochai | 18 | | Diao Chan | 19 | | Huang Yueying | 22 | | Xiao Qiao | 20 | | Ma Chao | 23 | | Xu Xian | 27 | | Sun Dasheng | 100 | +---------------+-----+ 25 rows in set (0.00 sec)
查询缓存:
★缓存:k/v
key:查询语句的hash值
value:查询语句的执行结果
★如何判断缓存是否命中:
通过查询语句的哈希值判断:哈希值考虑的因素包括
查询本身;
要查询数据库;
客户端使用的协议版本;
...
★哪些查询可能不会被缓存?
查询语句中包含UDF(用户自定义函数)
存储函数 如:CURRENT_TIME()
用户自定义变量
临时表
mysql系统表或者是包含列级别权限的查询
有着不确定结果值的函数(now());
★附图:
查询执行过程
本文出自 “逐梦小涛” 博客,请务必保留此出处http://1992tao.blog.51cto.com/11606804/1877656
以上是关于MySQL 权限和查询缓存的主要内容,如果未能解决你的问题,请参考以下文章