サーバープラグインを使用する前に、サーバープラグインをサーバーにロードする必要があります。MySQL では、ユーザーはサーバー起動時または実行時にプラグインをロードできます。また、ロードされたプラグインの有効化を起動時に制御したり、実行時にプラグインをアンロードしたりすることも可能です。
プラグインのインストール
サーバープラグインを使用する前に、サーバープラグインがサーバーに認識されている必要があります。ここで説明されているように、プラグインはいくつかの方法で認識させることができます。次の説明で、plugin_name
は innodb
や csv
などのプラグイン名を表します。
組み込みプラグイン:
サーバーに組み込まれているプラグインは、サーバーによって自動的に認識されます。通常、サーバーはプラグインを起動時に有効にしますが、--
オプションでこれを変更できます。
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_name
は innodb
や csv
などのプラグイン名を表します。ほかのオプションと同じように、オプション名のダッシュとアンダースコアは交換可能です。たとえば、--my_plugin=ON
と --my-plugin=ON
は同等です。
-
--
plugin_name
=OFFプラグインを無効にするようサーバーに指示します。
-
--
plugin_name
[=ON]プラグインを有効にするようサーバーに指示します。(値を付けずにオプションを
--
と指定しても効果は同じです。)プラグインが初期化に失敗した場合、サーバーはプラグインを無効にして実行します。plugin_name
-
--
plugin_name
=FORCEプラグインを有効にするようサーバーに指示しますが、プラグインの初期化が失敗した場合、サーバーは開始しません。つまり、このオプションはプラグインを有効にしてサーバーを実行するか、何もしないかのいずれかを強制します。
-
--
plugin_name
=FORCE_PLUS_PERMANENTFORCE
と似ていますが、さらにプラグインが実行時にアンロードされないようにします。ユーザーがUNINSTALL PLUGIN
を使用してこの操作を実行しようとすると、エラーが発生します。
OFF
、ON
、FORCE
、および FORCE_PLUS_PERMANENT
の値は大文字小文字を区別しません。
プラグインの有効化状態は、INFORMATION_SCHEMA.PLUGINS
テーブルの LOAD_OPTION
カラムに表示されます。
かりに、CSV
、BLACKHOLE
、および 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_PERMANENTINFORMATION_SCHEMA.PLUGINS
テーブルのLOAD_OPTION
カラムから識別できます。