почему я не могу импортировать дамп mysql с триггерами в mariadb

Мы планируем перенести наши материалы в облако приложений swisscom, и поэтому нам нужно импортировать существующие дампы MySQL в MariaDB — пока это не проблема...

Но импорт дампов невозможен, как только нужно импортировать триггер.

например У меня есть дамп с этим единственным триггером:

DELIMITER ;;
/*!50003 CREATE*/ /*!50017 DEFINER=`root`@`localhost`*/ /*!50003 TRIGGER trg_mytable_insert AFTER INSERT ON mytable FOR EACH ROW
                    BEGIN

                         INSERT INTO mytable_audit (id, fk_X)
                         SELECT a.id, a.fk_X FROM mytable a WHERE a.id = NEW.id;

                    END */;;
DELIMITER ;

Я запускаю импорт следующим образом:

mysql --user xxxxxxx -pxxxxxxx -h 127.0.0.1 -P 13000 CF_E7D2D18F_A20B_4FFF_89A7_XXXXXXXX < trigger.sql

вызывает эту ошибку:

ERROR 1227 (42000) at line 2: Access denied; you need (at least one of) the SUPER privilege(s) for this operation

Странно то, что с помощью Liquibase мы можем создавать триггеры с одним и тем же пользователем. Итак, какие специальные привилегии требуются для импорта триггера через mysql CLI?


person domi    schedule 31.05.2016    source источник


Ответы (1)


CREATE*/ /*!50017 DEFINER=`root`@`localhost`*

Вы видите это сообщение, потому что MariaDB в Swisscom App Cloud не предоставляет привилегию SUPER, и поэтому вы не можете настроить триггер или представление для запуска от имени другого пользователя — это может сделать только пользователь с SUPER.

см. Использование MySQL триггеры и представления в Amazon RDS в качестве обходного пути с помощью sed.

Недавно у меня была возможность перенести клиента с физического сервера в среду Amazon RDS. В этом конкретном случае платформа клиентов широко использует триггеры и представления MySQL. Я столкнулся с двумя существенными проблемами, которые помешали мне следовать документации Amazon, в которой в основном говорится «использовать mysqldump», но не указывается конкретный метод работы с триггерами и представлениями MySQL.

mysqldump -h hostname -u username -ppassword –single-transaction database_name | sed -e 's/\/\*[^*]*DEFINER=[^*]*\*\///' | mysql -h hostname -u username -ppassword database_name
person Josefine    schedule 01.06.2016