Skip to main content

インストール済み拡張機能の表示

INFORMATION_SCHEMA ビューを使用して、インストールされた拡張機能をクエリします:
出力:
使用方法:
  • インタラクティブセッションとスクリプトの両方で使用可能
  • MySQL ツールと互換性のある標準 SQL インターフェース

拡張機能関数の確認

インストール後に拡張機能関数が正常に動作することを確認します:

拡張機能ディレクトリ

VillageSQL が .veb ファイルを検索する場所を確認します:
利用可能な拡張機能の一覧表示:

veb_dir の設定

拡張機能ディレクトリの場所を変更するには、MySQL 設定ファイルに veb_dir を設定します: my.cnf / my.ini:
要件:
  • パスは絶対パスである必要があります(相対パス不可)
  • ディレクトリはサーバー起動前に存在している必要があります
  • MySQL ユーザーはディレクトリに対して読み取り権限を持っている必要があります
  • 設定できる veb_dir は 1 つのみです(複数のパスは設定不可)
  • 変更を有効にするにはサーバーの再起動が必要です
再起動後の確認:

トラブルシューティング

クイックリファレンス

拡張機能が見つからない

Error: Extension 'my_extension' not found デバッグ手順:

インストール後に関数が利用できない

Error: FUNCTION my_func does not exist デバッグ手順:

アップデート後に拡張機能が古い動作を表示

症状: .veb ファイルを置き換えて再インストールした後、拡張機能がまだ 古いコードを実行しています。 原因: VillageSQL は初回読み込み時に .veb ファイルを {datadir}/.veb_expansion_cache/ に展開します。UNINSTALL EXTENSION を実行せずに新しい .veb をコピーした場合、サーバーはメモリに既に読み込まれている以前に展開された .so の使用を続けます。 解決策: 常に完全な UNINSTALL → 置き換え → INSTALL のサイクルに従ってください:
次に veb_dir 内の .veb ファイルを置き換えて再インストールします:
拡張機能がまだ古い動作を表示する場合は、再インストールする前に展開キャッシュをクリアします:

拡張機能をアンインストールできない

Error: Cannot uninstall extension: types in use 解決策:

ライブラリの読み込みエラー

Error: Cannot load library: undefined symbol 原因:
  • 必要なライブラリ依存関係の欠如
  • ABI 互換性の不一致
  • 間違った MySQL バージョン
デバッグ:

拡張機能名の検証エラー

Error: Failed to load VEF extension 'extension_name' with log message Extension name mismatch 原因: manifest.json 内の拡張機能名が VEB ファイル名と一致していません。 デバッグ手順:
  1. VEB ファイル名がマニフェストと一致するか確認:
  2. manifest.json の name フィールドを確認:
解決策: 両方の名前は一致している必要があり、アンダースコアを使用します(拡張機能の命名規則 を参照):
  • VEB ファイル名: my_extension.veb
  • manifest.json: "name": "my_extension"
一般的なミス:
  • マニフェストでハイフンを使用: "name": "my-extension"
  • VEB ファイル名が一致しない: my-extension.veb vs "name": "my_extension"
正しい例:

カスタム型の比較エラー

Error: Cannot compare types X and Y in = 原因: 比較の両側がカスタム型ですが、異なる型または拡張機能に属しています。
解決策: 比較の両側で同じカスタム型を使用していることを確認してください。型間で比較する必要がある場合は、適切な型変換関数を使用して明示的に変換してください。
Error: Unable to implicitly cast a non-custom type during compare with a custom type in = 原因: 比較の片側がカスタム型の列で、もう片側がその型に自動的に変換できない値(リテラルまたは列)です。
解決策: 文字列リテラルは、型の encode 関数を使用して自動的にカスタム型にキャストされます。他の型(整数、浮動小数点数)には、明示的な変換関数を使用してください:

拡張機能の使用状況の監視

クエリパフォーマンス

performance_schema を使用して VDF の実行時間を追跡します:

カスタム型の使用状況

カスタム型を使用しているテーブルを追跡します:

エクステンションの更新

エクステンションを新しいバージョンに更新するには、手動更新プロセスを使用します:
ALTER EXTENSION UPDATE はまだサポートされておらず、将来のリリースで予定されています。

手動更新プロセス

  1. 現在のバージョンをアンインストールします:
  2. .veb ファイルを置き換えます:
  3. 新しいバージョンをインストールします:
  4. 更新を確認します:
データの安全性: テーブルがエクステンションのカスタム型を使用している場合、アンインストールする前にそれらのテーブルをドロップまたは変更する必要があります。まずデータをバックアップしてください。
例:

クリーンアップ

孤立した展開ディレクトリの削除

VillageSQL は .veb ファイルを {datadir}/.veb_expansion_cache/{name}/{sha256}/ に展開します。古いバージョンは時間とともに蓄積されます。
サーバーの再起動により、孤立した展開ディレクトリは自動的にクリーンアップされます。

レプリケーション

カスタム型には ROW 形式のバイナリログが必要です。STATEMENT および MIXED モードはサポートされていません。 カスタム型のカラムを持つテーブルでは、INSERT、UPDATE、DELETE、および ALTER TABLE 操作は、ROW 形式で正しくレプリケートされます。 INSTALL EXTENSION はレプリケートされません。各サーバーは独自のエクステンションを管理します。 レプリケーションを開始する前に、ソースと同じバージョンのエクステンションをすべてのレプリカにインストールしてください。サーバーは正確なバージョンの一致を強制します。バージョンが不一致だとレプリケーションが停止します。 レプリカが認識しないカスタム型に遭遇した場合、レプリケーションは DDL ステートメントで停止します。 CREATE TABLE または ALTER TABLE の実行時、関連する DML が適用される前に停止します。正しいエクステンションバージョンをインストールし、再開してください:
mysqldump は、出力に完全に修飾されたカスタム型名を保持します。論理 リストアは、ダンプをインポートする前にターゲットサーバーにエクステンションがインストールされていれば機能します。
Clone プラグイン、XtraBackup、InnoDB Cluster / Group Replication での動作はまだテストされていません。本番環境で依存する前に、リストアパスをテストしてください。

Docker でのエクステンションの使用

Docker で VillageSQL を実行する際、veb_dir としてローカルディレクトリをマウントすると、コンテナを再構築せずにホストから .veb ファイルを追加できます。 Docker Compose の例:
ホストの ./extensions/.veb ファイルをコピーし、SQL からインストールします:
実行中のサーバーが使用しているディレクトリを確認するには:

サポート

ここでカバーされていない問題が発生した場合は:
  1. エラーログを確認: ほとんどのエクステンションエラーは詳細とともにログに記録されます
  2. エクステンションドキュメントを確認: エクステンション固有のトラブルシューティングが存在する場合があります
  3. Discord で質問: VillageSQL Discord に参加してください
  4. 問題を報告: GitHub Issues でバグを報告してください

次のステップ

システムリファレンス

システムテーブルとビューへのクエリ

拡張機能のアンインストール

エクステンションを安全に削除

拡張機能のアーキテクチャ

内部構造の理解