寫這些指令碼需求放緩的調查記錄到資料庫,方便**。
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.slow log表使用的是csv資料引擎,不支援對資料進行索引,所以需要將其修改為myisam引擎,並對query time欄位進行索引以優化查尋效率。2.需要對所有的使用者進行授權,讓大家要可通過呼叫 pub ge...
MySQL儲存過程 批量為使用者授權
編寫出這些指令碼的需求是把慢查日誌寫入資料庫中,方便檢視。1.由於預設的mysql.slow log表使用的是csv資料引擎,不支援對資料進行索引,所以需要將其修改為myisam引擎,並對query time欄位進行索引以優化查尋效率。2.需要對所有的使用者進行授權,讓大家要可通過呼叫 pub ge...
儲存過程授權給子使用者
將本身的儲存過程授權給其他使用者使用 使用者名稱 user ohter 儲存過程案例 清空表資料 儲存過程案例 清空表資料 create or replace package user a.pkg tra tab operation is procedure p tab truncate a 方法一...