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
Windows7でMySQL Connectorのインストールに失敗する – Error installing ODBC driver MySQL ODBC 5.5 Driver

Error installing ODBC driver MySQL ODBC …

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

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

mysql
[MySQL]Cannot load from mysql.proc. The table is probably corrupted

mysqlのストアドプロシージャの再登録をしようとすると、下記のエラーが表示され …

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

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

mysql
mysqlで一般クエリログをする

mysqlで一般クエリログをするためには、 my.cnfをいじるといいのだけど、 …

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

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

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

自分用のメモです。

mysql
[MySQL]テーブルのカラムのコメントの変更

MySQLでカラムのコメントを変更する方法を探してみた。 結局、カラムの再定義と …

mysql
[MySQL]LOAD DATA INFILEで正常にCSVデータを読み込めない

※winscpを使って開発している人だけ、ご覧下さい。 LOAD DATA IN …

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

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