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导入触发器需要哪些特殊权限呢?

4

1 回答 1

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

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

请参阅在 Amazon RDS 中使用 MySQL 触发器和视图以了解使用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
于 2016-06-01T09:19:35.207 回答