写这些脚本需求放缓的调查记录到数据库,方便观看。

1. 因为默认mysql.slow_log表使用csv数据引擎,该数据不支持指数,因此,有必要改变MyISAM发动机。和query_time字段索引,优化搜索效率。

2. 部的用户进行授权。让大家要可通过调用 pub_getSlowQuery( limit ) 存储过程获取一天的慢查记录数据。

3. 存储过程命名约定:priv_ 起头的为私有存储过程。不须要对用户授权,以pub_起头的存储过程对全部的会员进行授权。仅仅同意执行。不可改动和删除。

-- 改动慢查日志表结构,加入索引优化查寻速度
DROP PROCEDURE IF EXISTS `mysql`.`priv_setSlowLogEngine`;
DELIMITER $$
CREATE PROCEDURE `mysql`.`priv_setSlowLogEngine`() COMMENT '改动慢查设置'
BEGIN
/** 关闭慢查记录 */
SET GLOBAL slow_query_log=0;
/** 改动存储方式 */
SET GLOBAL log_output='TABLE';
/** 记录日志的运行时间 */
SET GLOBAL long_query_time=3;
/** 改动表引擎 */
ALTER TABLE `mysql`.`slow_log` ENGINE=MYISAM;
/** 加入索引 */
ALTER TABLE `mysql`.`slow_log` ADD INDEX `query_time`(`query_time`);
/** 开启慢查记录 */
SET GLOBAL slow_query_log=1;
END$$
DELIMITER ; -- 获取慢查寻句子列表
DROP PROCEDURE IF EXISTS `mysql`.`pub_getSlowQuery`;
DELIMITER $$
CREATE PROCEDURE `mysql`.`pub_getSlowQuery`(IN top INT) COMMENT '获取慢查记录'
BEGIN
/**
* 昨天凌晨一点的时间
* 业务需求是每天凌晨时间运行,所以是取昨天凌晨到当前时间的全部慢查日志 */
DECLARE yesterday DATETIME;
SELECT CONCAT_WS(' ', DATE_SUB(CURDATE(),INTERVAL 1 DAY), '00:00:00') INTO yesterday;
SET @sql=CONCAT("SELECT * FROM `mysql`.`slow_log` WHERE `query_time`>0 ORDER BY `query_time` DESC LIMIT 0",top);
/** 使用预处理运行SQL句子 */
PREPARE m FROM @sql;
EXECUTE m;
DEALLOCATE PREPARE m;
END$$
DELIMITER ; -- 授权操作
DROP PROCEDURE IF EXISTS `mysql`.`priv_grantToProcedure`;
DELIMITER $$
CREATE PROCEDURE `mysql`.`priv_grantToProcedure`( IN procedureName VARCHAR(30) ) COMMENT '对存储过程授权'
BEGIN
DECLARE not_found_data INT DEFAULT 0;
DECLARE userName VARCHAR(20) DEFAULT '';
DECLARE hostName VARCHAR(20) DEFAULT ''; /**
* 将用户列表读入游标 */
DECLARE users CURSOR FOR SELECT `user`,`host` FROM mysql.user WHERE `user`!='csc86';
DECLARE CONTINUE HANDLER FOR NOT FOUND SET not_found_data=1; OPEN users;
WHILE not_found_data=0 DO
FETCH users INTO userName,hostName;
SET @sql=CONCAT('GRANT Execute ON PROCEDURE `mysql`.`',procedureName,'` TO `',userName,'`@`',hostName,'`'); /** 使用预处理运行SQL句子 */
PREPARE m FROM @sql;
EXECUTE m;
DEALLOCATE PREPARE m;
END WHILE;
CLOSE users;
END$$
DELIMITER ; -- 将mysql库中以pub_开头的存储过程对全部用户授权
DROP PROCEDURE IF EXISTS `mysql`.`priv_setPrivileges`;
DELIMITER $$
CREATE PROCEDURE `mysql`.`priv_setPrivileges`() COMMENT '设置调用存储过程权限'
BEGIN
/**
* 游标 */
DECLARE not_found_data INT DEFAULT 0; /**
* 存储过程名称 */
DECLARE proc_name VARCHAR(30) DEFAULT ''; /**
* 读取全部公开的存储过程 */
DECLARE procedures CURSOR FOR SELECT `name` FROM `mysql`.`proc` WHERE `db`='mysql' AND `type`='PROCEDURE' AND `name` REGEXP '^pub_'; /**
* 到达游标尾部时,设置not_found_data为1 */
DECLARE CONTINUE HANDLER FOR NOT FOUND SET not_found_data = 1; /**
* 打开游标进入循环 */
-- priv_grantToProcedure
OPEN procedures;
TRUNCATE TABLE mysql.`procs_priv`;
WHILE not_found_data=0 DO
FETCH procedures INTO proc_name;
CALL priv_grantToProcedure( proc_name );
END WHILE;
/** 关闭游标 */
CLOSE procedures; /** 刷新权限 */
FLUSH PRIVILEGES;
END$$
DELIMITER ;

版权声明:本文博客原创文章。博客,未经同意,不得转载。

MySQL存储过程:用户授权量的更多相关文章

  1. MYSQL存储过程实现用户登录

    MYSQL存储过程实现用户登录 CREATE DEFINER=`root`@`%` PROCEDURE `uc_session_login`( ), ) ) LANGUAGE SQL NOT DETE ...

  2. MySQL 授权用户 ; 存储过程的DEFINER; 命令分隔符DELIMITER

    最近项目中遇到有人使用DEFINER这样的关键字,找了半天没有怎么理解这个意思.以为是限制谁使用这个存储过程,后来测试发现并不是这样. 搜索网上发现很多说法都不正确.看到一篇博客,做了如下介绍,才有所 ...

  3. MySQL存储过程(转)

    一.MySQL 创建存储过程 "pr_add" 是个简单的 MySQL 存储过程,这个存储过程有两个 int 类型的输入参数 "a"."b" ...

  4. MySQL 存储过程

    MySQL 存储过程 存储过程是通过给定的语法格式编写自定义的数据库API,类似于给数据库编写可执行函数. 简介 存储过程是一组为了完成特定功能的SQL语句集合,是经过编译后存储在数据库中. 存储过程 ...

  5. mysql存储过程详解

    mysql存储过程详解 1.      存储过程简介   我们常用的操作数据库语言SQL语句在执行的时候需要要先编译,然后执行,而存储过程(Stored Procedure)是一组为了完成特定功能的S ...

  6. MySql 存储过程、触发器和权限问题

    存储过程 1.1 什么是存储过程 存储过程,带有逻辑的sql语句 之前的sql没有条件判断,没有循环 存储过程带上流程控制语句(if  while) 1.2 存储过程特点 1)执行效率非常快!存储过程 ...

  7. mysql存储过程语法及实例

    存储过程如同一门程序设计语言,同样包含了数据类型.流程控制.输入和输出和它自己的函数库. --------------------基本语法-------------------- 一.创建存储过程cr ...

  8. mysql 操作用户权限

    使用可以对mysql数据库用户表有操作权限的用户名登陆mysqlinsert into user(Host,User,Password) values('%','name','password');如 ...

  9. Mysql存储过程调用

    mysql存储过程实例教程 发布时间:2014-04-09编辑:JB01 这篇文章主要介绍了mysql存储过程的使用方法,mysql存储过程实例教程,有需要的朋友参考下.   1.1create  p ...

  10. mysql存储过程详细教程

    记录mysql存储过程中的关键语法:DELIMITER //  声明语句结束符,用于区分;CREATE PROCEDURE demo_in_parameter(IN p_in int)  声明存储过程 ...

随机推荐

  1. 获取不同机型外置SD卡路径

    /** * 运行挂载命令.返回挂载的地址.然后将地址解析 */ private void getExtSDCardPath() { try { Runtime runtime = Runtime.ge ...

  2. Ajax—初识

    看DRP的过程.又一次学习了一遍Ajax.更深刻的体会到了Ajax所具有的魅力.Ajax是一种技术或者方法,更是一 种艺术.它让我们的程序以一种更完美的姿态呈如今用户面前.以下就让我们一起走进Ajax ...

  3. Sqlite 扩展功能 GET_PHONEBOOK_INDEX

    在联系人数据库设计中遇到了这个函数,晚上找了半天没找到答案. GET_PHONEBOOK_INDEX This function will produce a normalized upper cas ...

  4. altKey,ctrlKey,shiftKey

    <1> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <title>< ...

  5. client对象层次和0级DOM

    刚開始学了两天JS,闲着无聊,顺手画了张图

  6. hdu 5073 Galaxy(2014acm鞍山亚洲分部 C)

    主题链接:http://acm.hdu.edu.cn/showproblem.php? pid=5073 Galaxy Time Limit: 2000/1000 MS (Java/Others)   ...

  7. Storm On YARN带来的好处

    1)弹性计算资源     将storm执行在yarn上后.Storm能够与其它计算框架(如mapreduce)共享整个集群的资源.这样当Storm负载骤增时,可动态为它添加计算资源. 负载减小时,能够 ...

  8. Hadoop认知--在不同的阶段

    入门阶段 出于兴趣,及工作中的简单有用,大约经过1个月的时间,完毕了对Hadoop的基本认知. 在这个月中我干了例如以下几件事 1.大体看了<Hadoop权威指南>.把里面的代码手工码了一 ...

  9. 【Quick-COCOS2D-X 3.3 怎样绑定自己定义类至Lua之三】动手绑定自己定义类至Lua

        查看[Quick-COCOS2D-X 3.3 怎样绑定自己定义类至Lua之二]新建项目中配制环境,我们完美的在新建项目中完毕了绑定须要的环境,接下来才是最关健的一步.绑定自己定义C++类至Lu ...

  10. Asp.net 视频摘要

    Asp.net一遍又一遍视频最近,例如中,大多数的实现.由于原因的版本号,.当然学过是学过.总结不可缺少. 先宏观后微观.刚学完,感觉知识特别乱,所以先画了张图: watermark/2/text/a ...