インストール済み拡張機能の表示
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 ファイル名と一致していません。
デバッグ手順:
-
VEB ファイル名がマニフェストと一致するか確認:
-
manifest.json の name フィールドを確認:
- VEB ファイル名:
my_extension.veb - manifest.json:
"name": "my_extension"
- マニフェストでハイフンを使用:
"name": "my-extension"❌ - VEB ファイル名が一致しない:
my-extension.vebvs"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 =
原因: 比較の片側がカスタム型の列で、もう片側がその型に自動的に変換できない値(リテラルまたは列)です。
拡張機能の使用状況の監視
クエリパフォーマンス
performance_schema を使用して VDF の実行時間を追跡します:カスタム型の使用状況
カスタム型を使用しているテーブルを追跡します:エクステンションの更新
エクステンションを新しいバージョンに更新するには、手動更新プロセスを使用します:ALTER EXTENSION UPDATE はまだサポートされておらず、将来のリリースで予定されています。
手動更新プロセス
-
現在のバージョンをアンインストールします:
-
.veb ファイルを置き換えます:
-
新しいバージョンをインストールします:
-
更新を確認します:
クリーンアップ
孤立した展開ディレクトリの削除
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 は、出力に完全に修飾されたカスタム型名を保持します。論理
リストアは、ダンプをインポートする前にターゲットサーバーにエクステンションがインストールされていれば機能します。
Docker でのエクステンションの使用
Docker で VillageSQL を実行する際、veb_dir としてローカルディレクトリをマウントすると、コンテナを再構築せずにホストから .veb ファイルを追加できます。
Docker Compose の例:
./extensions/ に .veb ファイルをコピーし、SQL からインストールします:
サポート
ここでカバーされていない問題が発生した場合は:- エラーログを確認: ほとんどのエクステンションエラーは詳細とともにログに記録されます
- エクステンションドキュメントを確認: エクステンション固有のトラブルシューティングが存在する場合があります
- Discord で質問: VillageSQL Discord に参加してください
- 問題を報告: GitHub Issues でバグを報告してください
次のステップ
システムリファレンス
システムテーブルとビューへのクエリ
拡張機能のアンインストール
エクステンションを安全に削除
拡張機能のアーキテクチャ
内部構造の理解

