Скажем сразу, что лучше хранимые процедуры в 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);