1

swisscom app cloud に移行する予定なので、既存の 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 に答える