Mysqldumpを復元しようとすると、一部のルーチンに対するユーザー権限が失われます。私が知る限り、mysqlスキーマの後にロードされるスキーマにあるルーチンにはユーザー権限がありません。 (たとえば、スキーマ「abc」にはルーチンに対する正しいユーザー権限がありますが、スキーマ「qrs」にはありません。)
私が使用しているダンプは、次の方法で作成されます。
mysqldump --allow-keywords --all-databases --single-transaction --events --routines --flush-logs --flush-privileges --hex-blob
過去にこの問題が発生した場合は、ダンプをロードしてからmysqlスキーマのみをリロードします。これにより、不足しているユーザーにルーチンに対する権限が付与されます。
ただし、最近GTIDの使用を開始しました。その結果、GTIDが重複しているため、ダンプからmysqlスキーマだけを再ロードできません。そうしようとすると、次のエラーが発生します。
@@GLOBAL.GTID_PURGED cannot be changed: the added gtid set must not overlap with @@GLOBAL.GTID_EXECUTED
この方法で作成されたダンプをリロードし、別のサーバーにダンプをリロードした後、すべてのユーザー権限をまったく同じにする方法はありますか?
Mysqldumpステートメントに--set-gtid-purged=OFF
フラグを追加する必要があります。これにより、ダンプファイルにset-gtid-purged行が書き込まれなくなります。