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