次の権限を持つdumpというMySQLユーザーがいます。
GRANT USAGE ON *.* TO 'dump'@'%' IDENTIFIED BY ...
GRANT SELECT, LOCK TABLES ON `mysql`.* TO 'dump'@'%'
GRANT SELECT, LOCK TABLES ON `myschema`.* TO 'dump'@'%'
dumpユーザーを使用して、すべてのデータ(トリガーとプロシージャを含む)をダンプします。次の方法でmysqldumpを呼び出します。
mysqldump -u dump -p --routines --triggers --quote-names --opt \
--add-drop-database --databases myschema > myschema.sql
トリガー、それらが欠落している !!を除いて、ダンプされたファイルではすべて問題ありません
rootMySQLユーザーでmysqldumpを試行すると、トリガーが正しくダンプされます。
mysqldump -u root -p --routines --triggers --quote-names --opt \
--add-drop-database --databases myschema > myschema.sql
だから、私はそれがpermsの問題だと思います... extra grants mydumpMySQLユーザーは完全なダンプを正しく行うために必要です?
完全なダンプでVIEW
sとEVENT
sを意味すると仮定すると、以下が必要になります:
GRANT USAGE ON *.* TO 'dump'@'%' IDENTIFIED BY ...;
GRANT SELECT, LOCK TABLES ON `mysql`.* TO 'dump'@'%';
GRANT SELECT, LOCK TABLES, SHOW VIEW, EVENT, TRIGGER ON `myschema`.* TO 'dump'@'%';
関数を実行するVIEW
sがある場合、残念ながらEXECUTE
も必要です。
私自身の問題は、データなしのダンプのみを作成したいのにSELECT
が必要なのはなぜですか?
必要な追加の補助金が見つかりました!!
GRANT TRIGGER ON `myschema`.* TO 'dump'@'%'
ここに公式ドキュメントのリファレンスがあります: http://dev.mysql.com/doc/refman/5.5/en/privileges-provided.html#priv_trigger
TRIGGER特権は、トリガー操作を有効にします。そのテーブルのトリガーを作成、ドロップ、または実行するには、テーブルのこの権限が必要です。
VIEW DEFINERユーザーが存在しない場合、いつかダンプが失敗することがわかりました。
説明に従って変更します there
Jannes answerに加えて、-tabオプションでmysqldumpを使用する場合(ダンプごとにタブ区切りテキストファイルを生成テーブル)、MySQLユーザーにもFILE
特権が付与されている必要があります:
GRANT FILE ON *.* TO 'dump'@'%';
公式ドキュメントリファレンス: https://dev.mysql.com/doc/refman/5.7/en/mysqldump.html#option_mysqldump_tab
このセクションで言及:
このオプションは、mysqldumpがmysqldサーバーと同じマシンで実行されている場合にのみ使用してください。サーバーは指定したディレクトリに* .txtファイルを作成するため、ディレクトリはサーバーによって書き込み可能でなければならず、使用するMySQLアカウントにはFILE権限が必要です。 mysqldumpは同じディレクトリに* .sqlを作成するため、システムログインアカウントで書き込み可能でなければなりません。