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]LOAD DATA INFILEで正常にCSVデータを読み込めない

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

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

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

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

自分用のメモです。

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

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

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

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

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

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

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

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

mysql
MySQL 5.5からMySQL 5.6へのアップグレード後の諸々の対応

先日、とあるシステムのデータベースをMySQL5.5からMySQL5.6にアップ …

mysql
MySQL 権限一覧

権限 意味 ALL [PRIVILEGES] GRANT OPTION 以外の全 …

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

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