Хранимые процедуры в MySQL

Скажем сразу, что лучше хранимые процедуры в MySQL не использовать. Но если пришлось — то вот несколько советов

1. MySQL dump для хранимых процедур
дамп базы вместе с хранимыми процедурами:
mysqldump --routines database
текст только хранимых процедур:
mysqldump --routines --no-create-info --no-data --no-create-db --skip-opt database

2. Права доступа
Права доступа можно настроить как разрешив пользователю выполнять процедуры вообще в принципе, так и дав ему право выполнять только конкретные процедуры.
GRANT EXECUTE ON PROCEDURE [procedure name] TO [user]
Главное помнить что после пересоздания процедуры через DROP/CREATE, права в 99% слетают нафиг и их надо переназначать.
Обойти это можно только если редактировать тело процедуры через UPDATE записи в таблице proc базы mysql Неправильно конечно… но других вариантов мало. И да — изменения вступят только для вновь подключившихся пользователей.

3. Отладка хранимых процедур
С отладкой все совем плохо… Поиск дает какие то инструментальные среды. Но их установка и настройка требуют времени и не всегда возможны — особенно если отладку надо делать на удаленном сервере.
Я вышел из ситуации следующим образом. Создал таблицу для хранения отладочной информации и создал хранимую процедуру, которую вызывал в нужных местах хранимой процедуры, которую надо было отладить.
Код для подготовки «окружения отладки»

DROP TABLE IF EXISTS `proc_debug_log`;
CREATE TABLE IF NOT EXISTS `proc_debug_log` (
`ctime` TIMESTAMP,
`debug_str` VARCHAR(255) DEFAULT '',
`debug_val` VARCHAR(255) DEFAULT ''
);
DELIMITER  ;;
DROP PROCEDURE IF EXISTS `write_debug_log`;;
CREATE PROCEDURE `write_debug_log` (`message` VARCHAR(255), `values` VARCHAR(255) )
BEGIN
	INSERT INTO `proc_debug_log` VALUES (NOW(), `message`, `values`);
END;;

Пример вызова в теле отлаживаемой хранимой процедуры MySQL

CALL proc_debug_log('Debug function. Value or count is', CNT);
Запись опубликована в рубрике Полезности, Работа с метками , , , . Добавьте в закладки постоянную ссылку.

Добавить комментарий