Read it later.

Web製作に関するサーバ構成やコーディングネタの備忘録として使ってます。

*

[MySQL]ストアドプロシージャをmysqldumpでダンプできない – user has insufficent privileges to SHOW CREATE PROCEDURE

   

データベースに対して、ALL PRIVILEGES権限を割り当てているユーザでmysqldumpを実行しているのに、失敗する

# mysqldump --comments --routines -u ft -p hogehoge > dump_hogehoge.sql

と実行すると下記のような感じでエラーが出てダンプ出力に失敗した。
rootユーザでダンプできたらいいんだけど、そうもできない環境だと泣けてくる。

mysqldump: user has insufficent privileges to SHOW CREATE PROCEDURE `ストアドプロシージャ`!

GLOBAL権限で下記の2つを割り当てて試したけど、それでも失敗する

・CREATE ROUTINE
・ALTER ROUTINE

mysql.procテーブルにアクセスさえできればなんとかなる

調べてみると、やっぱりマニュアルにヒントがあった。

サーバはストアドルーチンを生成、変更もしくは撤去するステートメントに対して、mysql.procテーブルを操作します。このテーブルの手動操作のサポートは、サーバに通知されません。

MySQL 5.1 リファレンスマニュアル :: 17 ストアドプロシージャとファンクション :: 17.1 ストアドルーチンとグラントテーブル

たしかに、対象のデータベースにALL PRIVILEGES権限を割り当てても、異なるデータベース(mysql.proc)は読めないよね(-_-;

ざっくりした権限付けを行うのであれば、GLOBAL権限であるSELECT権限を割り当てれれば解決。

GRANT SELECT ON *.* TO user;

ダンプするだけでいいのであれば、

GRANT SELECT ON `mysql`.`proc` TO user;

これでよし。

 - MySQL

  関連記事

mysql
[MySQL]innodbチューニング

いま携わっているプロジェクトでMySQLを使用しているのだけど、主要テーブル全て …

mysql
[MySQL]データベースごとのサイズをSQLで一発で取得する

各データベースに接続して、単体でデーターベースサイズや、各テーブルのサイズを取得 …

mysql
[MySQL]SELECT文で、FROM句を使用しないで、WHERE句を使用する

『SELECT文で、FROM句を使用しないで、WHERE句を使用する』 といった …

mysql
MySQL用シーケンス制御ファンクション集(PostgreSQL風にファンクションを揃えてみた)

MySQLには、PostgreSQLのようなシーケンスが機能的にないので、作って …

mysql
mysqlコマンドをコメント付きでクエリを実行する。

phpMyAdminでストアドを登録するとスクリプト内部にあるコメントも、ソース …

mysql
[MySQL]コマンドでのSQL文入力の途中キャンセル

mysqlをコマンドラインで操作している際、特に複数行、SQL文を入力してて途中 …

mysql
[MySQL] ランダム文字列の生成

「指定された文字の構成で、ランダムの文字列を生成する。」 よく使うのだけど、なか …

mysql
[MySQL]よく使うコマンド一覧

自分用のメモです。

mysql
MySQLのrootパスワードが分からなくなったら

rootのパスワードが分からなくなったとき、どうすることもできないと観念したら、 …

mysql
[MySQL][phpMyAdmin]Allowed memory size of XXXXXX bytes exhausted (tried to allocate XXXXXX bytes)

こんな現象がおきました phpMyAdminでデータベース全体をエクスポートした …