为什么我不能将带有触发器的mysql转储导入mariadb

时间:2016-05-31 18:22:03

标签: mysql mariadb swisscomdev

我们计划将我们的东西迁移到swisscom应用程序云中,因此需要将现有的MySQL转储导入MariaDB - 到目前为止没什么大不了的......

但是,只要导入触发器,转储的导入就会失败。

e.g。我有这个单一触发器的转储:

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导入触发器需要什么特权?

1 个答案:

答案 0 :(得分:3)

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

您看到此消息是因为Swisscom App Cloud中的MariaDB未提供SUPER权限,因此您无法设置触发器或视图以作为其他用户运行 - 只有具有SUPER的用户才能这样做。 / p>

请参阅Using MySQL triggers and views in Amazon RDS了解sed的解决方法。

  

我最近有机会从物理上迁移客户   服务器进入亚马逊的RDS环境。在这种特殊情况下   客户平台广泛使用MySQL触发器和视图。   我遇到了两个阻碍我跟踪的重要问题   亚马逊的文档,基本上说“使用mysqldump”但是   没有提出一个处理MySQL触发器的特定方法   视图。

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