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

问题描述 投票:1回答:1

我们计划将我们的东西迁移到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导入触发器需要什么特权?

mysql mariadb swisscomdev
1个回答
3
投票
CREATE*/ /*!50017 DEFINER=`root`@`localhost`*

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

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

我最近有机会将客户从物理服务器迁移到亚马逊的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
© www.soinside.com 2019 - 2024. All rights reserved.