Skip to main content

概要

ソースコードからVillageSQLをビルドすると、最新の機能を利用でき、特定の環境に合わせてビルドをカスタマイズできます。 以下の手順では、アップストリームのMySQL 8.4上にVillageSQLをビルドします。VillageSQLは、代替のコードベースとしてPercona Server上にもビルドできます。Percona ビルドのページを参照してください。

前提条件

開始する前に、次のものがインストールされていることを確認してください。
  • Git - リポジトリのクローン用
  • サポートされているプラットフォーム - DebianまたはUbuntu Linux、あるいはHomebrewを導入したmacOS
リポジトリには、CMakeとビルドに必要な開発ライブラリをインストールするスクリプトが含まれています。Linuxではコンパイラーもインストールします。macOSではXcode Command Line Toolsがコンパイラーを提供します。ステップ2でこのスクリプトを実行するため、これらのパッケージを自分でインストールする必要はありません。

ステップ1:リポジトリのクローン

GitHubからVillageSQL Serverリポジトリをクローンします。以下のCMakeの手順が変更なしで機能するように、ホームディレクトリにクローンします。
リリースが提供したコードそのものをビルドするには、ブランチの代わりに、そのリリースを示すタグをクローンします: -b publish/mysql-8.4_0.0.7。
MySQLのコードベースが含まれているため、リポジトリのサイズは数GBあります。

ステップ2:ビルド依存関係のインストール

クローンしたリポジトリからセットアップスクリプトを実行します。このスクリプトはオペレーティングシステムを検出し、ビルドに必要なパッケージをインストールします。
Linuxでは、スクリプトはapt-getを使用し、sudoを要求します。macOSでは、Homebrewを使用します。VillageSQLのCIも同じスクリプトでビルド依存関係をインストールするため、パッケージの一覧は常にビルドの内容に追随します。
このスクリプトはDebianまたはUbuntu Linux、およびmacOSをサポートしています。それ以外のLinuxディストリビューションでは、villagesql/bld_tools/setup_linux_build_env.shを読み、同等のパッケージを各自のパッケージマネージャーでインストールしてください。

ステップ3:CMakeによる設定

リポジトリの外部にビルドディレクトリを作成し、プロジェクトを設定します。
macOSでは、OpenSSL 3のディレクトリも指定してください。Homebrewのバージョン指定のないopensslは現在OpenSSL 4であり、サーバーはOpenSSL 4ではビルドできません。
パスは両方のプラットフォームで~ではなく$HOMEを使用します。シェルは単語の先頭にある~しか展開しないため、--datadir=~/mysql-data/dataは~という名前のディレクトリとしてmysqldに渡され、サーバーは異常終了します。また、"$HOME/..."と引用符で囲むことで、ホームディレクトリ名にスペースが含まれる場合でもパスが分割されません。リポジトリのパスが異なる場合は、実際のクローン場所に置き換えてください。

CMakeオプションの説明

  • "$HOME/villagesql-server" - クローンされたVillageSQLリポジトリへのパス
  • -DWITH_DEBUG=1 - DBUG機能とアサーションを有効にした、最適化なしのビルドを行います(開発に推奨)
  • -DCMAKE_INSTALL_PREFIX="$HOME/mysql" - インストールディレクトリを設定します
  • -DWITH_SSL="$(brew --prefix openssl@3)" - cmakeにOpenSSL 3の場所を指定します。ステップ2でopenssl@3がインストールされます。ステップ2を省略した場合は、先にbrew install openssl@3を実行してください。brew --prefix openssl@3はパッケージが存在しない場合でもパスを出力するため、cmakeはWrong option or path for WITH_SSL=で停止します。

その他のCMakeオプション

プロダクションビルド:
カスタムコンパイルコメント付き:
再設定する必要がある場合は、最初にCMakeキャッシュをクリアします(ビルドディレクトリ内から実行します)。

ステップ4:コードのコンパイル

makeを使用して、並列コンパイルでVillageSQLをビルドします。ビルドディレクトリ内から: すべてをビルドします(推奨):
このコマンドは、サーバー、ステップ7で接続に使用するmysqlクライアント、拡張機能SDK、およびサンプル拡張機能のVEBファイルをビルドします。 サーバーとクライアントのみをビルドします:
この組み合わせは高速ですが、拡張機能SDKとサンプルのVEBファイルはビルドされません。そのため、INSTALL EXTENSION vsql_complexはインストールするバンドルを見つけられず、-DVillageSQL_BUILD_DIRを渡す拡張機能のビルドはSDKを見つけられません。
並列数(-j10)は、CPUコア数に基づいて調整します。システムの応答性を維持するために、合計コア数から2〜4を引いてください。たとえば、12コアのマシンでは、-j10を使用します。
完了したら、サーバーとクライアントのバイナリがビルドされたことを確認します。

ステップ5:データベースの初期化

サーバーを初めて起動する前に、データディレクトリを初期化します。 プロダクション(生成されたパスワードを使用 - 推奨):
開発(パスワードなし - オプション):
rootとして実行する場合(Dockerまたはsudo): rootとして実行する場合(例:Docker内)、MySQLは--user=rootフラグが必要です。
プロダクションのような設定では、--initialize(パスワード付き)を使用します。ローカル開発およびテストでのみ、--initialize-insecure(パスワードなし)を使用します。--initializeを使用すると、一時的なパスワードが生成され、コンソールに出力されます:A temporary password is generated for root@localhost: <password>
システムデータベースが作成されたことを確認し、初期化が成功したことを検証します。

ステップ6:サーバーの起動

VillageSQLサーバーを起動します。
rootとして実行する場合(Dockerまたはsudo):
--gdbフラグはSIGINTのブロックを解除するため、ターミナルから実行しているときにCtrl-Cを押すとサーバーが停止します。また、クラッシュ時のバックトレースを抑制し、--core-fileを無効にするため、クラッシュレポートが必要な場合は指定しないでください。バックグラウンドで実行するには、mysqldコマンドに--daemonizeを追加します。

ステップ7:MySQLクライアントでの接続

新しいターミナルを開き、MySQLクライアントを使用してサーバーに接続します。 --initialize-insecure(パスワードなし)を使用する場合:
--initialize(生成されたパスワードを使用)を使用する場合:
MySQLプロンプトが表示されるはずです。

rootパスワードの変更

--initializeを使用した場合は、一時パスワードを変更します。

インストールの確認

VillageSQLが実行されていることを確認します。
開発ビルドには、バージョン文字列にgitコミットハッシュが含まれます。

ステップ8:ユーザーとデータベースの設定

開発ユーザーの作成

日常的な開発のために、root以外のユーザーを作成します。
終了して、新しいユーザーとして再接続します。

データベースの作成

特定のデータベースに接続します:mysql -u developer -p -D my_database

ステップ9:テストの実行

ビルドディレクトリから、VillageSQLのテストスイートでビルドを検証します。
--nounit-testsは、既知の失敗を含むアップストリームMySQLのユニットテストをスキップします。VillageSQLのユニットテストは別途実行します。
テストが失敗すると、どちらのコマンドもゼロ以外で終了します。 GDBデバッグ、個別のテストの実行、期待される結果の再記録、サーバーコードベースへの貢献については、サーバー開発ガイドを参照してください。

ネイティブパッケージ(RPM/DEB)のビルド

villagesql/bld_tools/build_deb.shとbuild_rpm.shは、上記の手動の手順に従う代わりにパッケージマネージャーでインストールできるように、ソースツリーから直接DebianまたはRPMパッケージをビルドします。どちらも事前のCMake configureを必要としません。両方とも、リポジトリのルートにあるVSQL_VERSIONファイルとMYSQL_VERSIONファイルからパッケージのバージョンを導出します。ステップ1〜2を完了した状態で、パッケージングツールと、ステップ2では入らないビルド依存関係をインストールします。Debian/Ubuntuではdpkg-dev、debhelper、libcurl4-openssl-dev、libsystemd-dev、systemd-dev、Enterprise Linuxではrpm-buildです。その後、リポジトリのルートからどちらかを実行します。
このツールを追加したvillagesql-server#931によると、生成されたパッケージは、ターゲットホスト上の既存のMySQLインストールと並行してインストールされるのではなく、それを置き換えます。

トラブルシューティング

ビルドが依存関係の欠如で失敗する

セットアップスクリプトをもう一度実行します。ステップ3ではビルドディレクトリにいるため、スクリプトの絶対パスを指定します。
エラーメッセージで、欠落している具体的なライブラリを確認します。

サーバーが起動しない

  • データディレクトリが初期化されていることを確認します:ls "$HOME/mysql-data/data/"
  • 別のMySQL/VillageSQLインスタンスがポート3306を使用していないことを確認します
  • mysqldがターミナルに出力するメッセージを読むか、--log-error="$HOME/mysql-data/error.log"を付けて起動し、そのファイルを読みます

拡張機能のインストールが失敗する

  • 拡張機能の.vebファイルがveb_dirディレクトリ(ソースビルドでは$HOME/build/villagesql/lib/veb)に存在し、そのライブラリがLinuxとmacOSの両方で<extension_name>.soという名前であることを確認します
  • VillageSQLが拡張機能をロードするために必要な権限を持っていることを確認します
  • 拡張機能の名前と.vebファイル名が正しいことを確認します

次のステップ

拡張機能の使用

VillageSQL拡張機能をインストール、更新、および管理する方法を学びます。

拡張機能の作成

VillageSQL用の独自のカスタム拡張機能を構築します。

はじめに

VillageSQLのクイックスタートガイド。