Documentation Home
MySQL 5.6 リファレンスマニュアル
Download this Manual
PDF (US Ltr) - 27.1Mb
PDF (A4) - 27.2Mb
HTML Download (TGZ) - 7.2Mb
HTML Download (Zip) - 7.2Mb


MySQL 5.6 リファレンスマニュアル  /  ...  /  プラグインのインストールおよびアンインストール

5.1.8.1 プラグインのインストールおよびアンインストール

サーバープラグインを使用する前に、サーバープラグインをサーバーにロードする必要があります。MySQL では、ユーザーはサーバー起動時または実行時にプラグインをロードできます。また、ロードされたプラグインの有効化を起動時に制御したり、実行時にプラグインをアンロードしたりすることも可能です。

プラグインのインストール

サーバープラグインを使用する前に、サーバープラグインがサーバーに認識されている必要があります。ここで説明されているように、プラグインはいくつかの方法で認識させることができます。次の説明で、plugin_nameinnodbcsv などのプラグイン名を表します。

組み込みプラグイン:

サーバーに組み込まれているプラグインは、サーバーによって自動的に認識されます。通常、サーバーはプラグインを起動時に有効にしますが、--plugin_name オプションでこれを変更できます。

mysql.plugin テーブルに登録済みのプラグイン:

mysql.plugin テーブルはプラグインのレジストリの役割を担っています。サーバーは通常、テーブルにリストされている各プラグインを起動時に有効にしますが、特定のプラグインを有効化するかどうかは --plugin_name オプションで変更できます。サーバーが --skip-grant-tables オプションで開始された場合、サーバーはこのテーブルを参照せず、ここにリストされているプラグインをロードしません。

コマンド行オプションで名前を指定されたプラグイン:

プラグインライブラリファイルに存在するプラグインは、--plugin-load オプションを使用するとサーバー起動時にロードできます。通常、サーバーはプラグインを起動時に有効にしますが、--plugin_name オプションでこれを変更できます。

オプション値は、セミコロンで区切られた name=plugin_library のペアのリストです。それぞれの name はプラグインの名前で、plugin_library はプラグインコードを含む共有ライブラリの名前です。プラグイン名を前に付けずにプラグインライブラリを指定した場合、サーバーはライブラリ内のすべてのプラグインをロードします。各ライブラリファイルは、plugin_dir システム変数によって指定されるディレクトリに配置されている必要があります。

このオプションは、mysql.plugin テーブルにプラグインを登録しません。後続の再起動では、--plugin-load がふたたび指定された場合のみ、サーバーはプラグインを再ロードします。つまり、このオプションは 1 回のサーバー起動にしか継続しない 1 回のインストールに影響します。

--plugin-load は、(サーバーが mysql.plugin テーブルを無視するようにする) --skip-grant-tables が指定されている場合でも、プラグインのロードを可能にします。--plugin-load はまた、プラグインが実行時にロードできない構成で、プラグインを起動時にロードできるようにします。

--plugin-load-add オプションは --plugin-load オプションを補完します。--plugin-load-add は、起動時にロードされるプラグインのセットに 1 つまたは複数のプラグインを追加します。引数の形式は --plugin-load と同じです。--plugin-load-add を使用すれば、大量のプラグインのセットを、長くて扱いにくい単一の --plugin-load 引数として指定することを回避できます。--plugin-load-add--plugin-load がなくても指定できますが、--plugin-load はロードするプラグインのセットをリセットするため、--plugin-load の前にあるすべての --plugin-load-add のインスタンスは無効になります。つまり、次のオプションの場合、

--plugin-load=x --plugin-load-add=y

上記は次のオプションと同等です。

--plugin-load="x;y"

ただし、次のオプションの場合、

--plugin-load-add=y --plugin-load=x

上記は次のオプションと同等です。

--plugin-load=x

INSTALL PLUGIN ステートメントでインストールされるプラグイン:

プラグインライブラリファイルに存在するプラグインは、INSTALL PLUGIN ステートメントで実行時にロードできます。このステートメントはさらにプラグインを mysql.plugin テーブルに登録し、その後再起動してサーバーからロードします。このため、INSTALL PLUGIN には、mysql.plugin テーブルに対する INSERT 権限が必要です。

プラグインが --plugin-load オプションと mysql.plugin テーブルの両方を使用して指定された場合、サーバーは起動しますが、次のメッセージがエラーログに書き込まれます。

100310 19:15:44 [ERROR] Function 'plugin_name' already exists
100310 19:15:44 [Warning] Couldn't load plugin named 'plugin_name'
with soname 'plugin_object_file'.

例: --plugin-load オプションはサーバー起動時にプラグインをインストールします。myplugin という名前のプラグインを somepluglib.so という名前のプラグインライブラリファイルにインストールするには、my.cnf ファイル内で次の行を使用します。

[mysqld]
plugin-load=myplugin=somepluglib.so

この場合、プラグインは mysql.plugin に登録されません。--plugin-load オプションを付けずにサーバーを再起動すると、プラグインは起動時にロードされません。

一方、INSTALL PLUGIN ステートメントでは、サーバーは起動時にライブラリファイルからプラグインコードをロードします。

mysql> INSTALL PLUGIN myplugin SONAME 'somepluglib.so';

また、INSTALL PLUGIN永続的なプラグイン登録を実行します。サーバーはプラグインを mysql.plugin テーブルにリストすることで、その後サーバーを再起動するとプラグインがロードされます。

多くのプラグインは、サーバーの起動時または実行時のいずれかにロードできます。ただし、サーバー起動時にプラグインがロードおよび初期化されるように設計されている場合、INSTALL PLUGIN ではなく --plugin-load を使用してください。

プラグインがロードされているとき、プラグインについての情報は、INFORMATION_SCHEMA.PLUGINS テーブルや SHOW PLUGINS ステートメントなどのいくつかのソースから実行時に入手できます。詳細については、セクション5.1.8.2「サーバープラグイン情報の取得」を参照してください。

プラグインの有効化の制御

サーバーが起動するときにプラグインを認識している場合 (たとえば、プラグインが --plugin-load オプションを使用して指定されていたり、mysql.plugin テーブルに登録されていたりする場合)、サーバーはデフォルトでは、プラグインをロードして有効にします。プラグインのあとに --plugin_name[=value] 起動オプションを使用すると、これらのプラグインの有効化を制御できます。次の説明で、plugin_nameinnodbcsv などのプラグイン名を表します。ほかのオプションと同じように、オプション名のダッシュとアンダースコアは交換可能です。たとえば、--my_plugin=ON--my-plugin=ON は同等です。

  • --plugin_name=OFF

    プラグインを無効にするようサーバーに指示します。

  • --plugin_name[=ON]

    プラグインを有効にするようサーバーに指示します。(値を付けずにオプションを --plugin_name と指定しても効果は同じです。)プラグインが初期化に失敗した場合、サーバーはプラグインを無効にして実行します。

  • --plugin_name=FORCE

    プラグインを有効にするようサーバーに指示しますが、プラグインの初期化が失敗した場合、サーバーは開始しません。つまり、このオプションはプラグインを有効にしてサーバーを実行するか、何もしないかのいずれかを強制します。

  • --plugin_name=FORCE_PLUS_PERMANENT

    FORCE と似ていますが、さらにプラグインが実行時にアンロードされないようにします。ユーザーが UNINSTALL PLUGIN を使用してこの操作を実行しようとすると、エラーが発生します。

OFFONFORCE、および FORCE_PLUS_PERMANENT の値は大文字小文字を区別しません。

プラグインの有効化状態は、INFORMATION_SCHEMA.PLUGINS テーブルの LOAD_OPTION カラムに表示されます。

かりに、CSVBLACKHOLE、および ARCHIVE がプラガブルな組み込みストレージエンジンで、サーバーが起動時にこれらをロードするようにし、次の条件が与えられているとします。つまり、CSV の初期化に失敗しても、サーバーは実行を許可されるが、BLACKHOLE の初期化に成功することが必要で、ARCHIVE が無効化されていなければならないという条件です。これを満たすには、オプションファイル内で次の行を使用します。

[mysqld]
csv=ON
blackhole=FORCE
archive=OFF

--enable-plugin_name オプション形式は --plugin_name=ON のシノニムとしてサポートされます。--disable-plugin_name および --skip-plugin_name オプション形式は、--plugin_name=OFF のシノニムとしてサポートされます。

プラグインが OFF で明示的に無効化されるか、ON で有効化されたが初期化に失敗したため暗黙的に無効化される場合、プラグインを必要とするサーバー操作について変更されます。たとえば、プラグインがストレージエンジンを実装する場合、そのストレージエンジンの既存のテーブルはアクセス不能になり、そのストレージエンジンに対して新規テーブルを作成しようとすると、代わりにエラーを発生させる NO_ENGINE_SUBSTITUTION SQL モードが有効になっていないかぎり、デフォルトのストレージエンジンを使用するテーブルが生成されます。

プラグインの無効化は、ほかのオプションの調整を要することもあります。たとえば、--skip-innodb を使用してサーバーを開始して、InnoDB を無効化した場合、ほかの innodb_xxx オプションを起動コマンドから省略することが必要になる可能性があります。さらに、InnoDB はデフォルトのストレージエンジンであるため、使用可能な別のストレージエンジンを --default_storage_engine で指定しないかぎり開始しません。MySQL 5.6.3 以降では、--default_tmp_storage_engine も設定する必要があります。

プラグインのアンインストール

サーバーに認識されているプラグインは、UNINSTALL PLUGIN ステートメントで実行時にアンインストールすると無効化できます。このステートメントはプラグインをアンロードし、プラグインが mysql.plugin テーブルに登録されている場合はそこから削除します。このため、UNINSTALL PLUGIN ステートメントには、mysql.plugin テーブルに対する DELETE 権限が必要です。プラグインがテーブルに登録されていない場合、サーバーはその後の再起動でプラグインを自動的にロードしません。

UNINSTALL PLUGIN は、プラグインが INSTALL PLUGIN または --plugin-load のいずれでロードされたかに関係なく、プラグインをアンロードできます。

UNINSTALL PLUGIN には次の例外が該当します。

  • サーバーに組み込まれているプラグインをアンロードできません。これらは INFORMATION_SCHEMA.PLUGINS または SHOW PLUGINS からの出力で、ライブラリ名が NULL のプラグインとして識別できます。

  • 実行時にプラグインをアンロードしないようにする --plugin_name=FORCE_PLUS_PERMANENT を使用すると、サーバーが開始された目的のプラグインをアンロードできません。これらは INFORMATION_SCHEMA.PLUGINS テーブルの LOAD_OPTION カラムから識別できます。


User Comments
Sign Up Login You must be logged in to post a comment.