mysql.js を使用して TiDB に接続する

TiDB は MySQL 互換データベースであり、 mysql.jsドライバーは MySQL プロトコルを実装する純粋な Node.js JavaScript クライアントです。

このチュートリアルでは、TiDB と mysql.js ドライバーを使用して次のタスクを実行する方法を学習できます。

  • 環境をセットアップします。
  • mysql.js ドライバーを使用して TiDB クラスターに接続します。
  • アプリケーションをビルドして実行します。オプションで、基本的な CRUD 操作のサンプルコードスニペットを見つけることができます。

注記:

このチュートリアルは、TiDB サーバーレス、TiDB 専用、および TiDB セルフホストで動作します。

前提条件

このチュートリアルを完了するには、次のものが必要です。

  • Node.js >= 16.x がマシンにインストールされている。
  • ギットマシンにインストールされています。
  • TiDB クラスターが実行中です。

TiDB クラスターがない場合は、次のように作成できます。

サンプル アプリを実行して TiDB に接続する

このセクションでは、サンプル アプリケーション コードを実行して TiDB に接続する方法を説明します。

ステップ 1: サンプル アプリ リポジトリのクローンを作成する

ターミナル ウィンドウで次のコマンドを実行して、サンプル コード リポジトリのクローンを作成します。

git clone https://github.com/tidb-samples/tidb-nodejs-mysqljs-quickstart.git cd tidb-nodejs-mysqljs-quickstart

ステップ 2: 依存関係をインストールする

次のコマンドを実行して、サンプル アプリに必要なパッケージ ( mysqldotenvを含む) をインストールします。

npm install
依存関係を既存のプロジェクトにインストールする

既存のプロジェクトの場合、次のコマンドを実行してパッケージをインストールします。

npm install mysql dotenv --save

ステップ 3: 接続情報を構成する

選択した TiDB デプロイメント オプションに応じて、TiDB クラスターに接続します。

  • TiDB Serverless
  • TiDB Dedicated
  • TiDB Self-Hosted
  1. クラスターページに移動し、ターゲット クラスターの名前をクリックして、その概要ページに移動します。

  2. 右上隅にある「接続」をクリックします。接続ダイアログが表示されます。

  3. 接続ダイアログの設定が動作環境と一致していることを確認してください。

    • エンドポイント タイプはPublicに設定されます。
    • ブランチはmainに設定されます。
    • [接続先]Generalに設定されます。
    • [オペレーティング システム] は、アプリケーションを実行するオペレーティング システムと一致します。
  4. パスワードをまだ設定していない場合は、 「パスワードの生成」をクリックしてランダムなパスワードを生成します。

  5. 次のコマンドを実行して.env.exampleをコピーし、名前を.envに変更します。

    cp .env.example .env
  6. .envファイルを編集し、次のように環境変数を設定し、接続ダイアログ上の対応するプレースホルダー{}接続パラメーターに置き換えます。

    TIDB_HOST={host} TIDB_PORT=4000 TIDB_USER={user} TIDB_PASSWORD={password} TIDB_DATABASE=test TIDB_ENABLE_SSL=true

    注記

    TiDB サーバーレスの場合、パブリック エンドポイントを使用する場合は、TLS 接続をTIDB_ENABLE_SSL経由で有効にする必要があります

  7. .envファイルを保存します。

  1. クラスターページに移動し、ターゲット クラスターの名前をクリックして、その概要ページに移動します。

  2. 右上隅にある「接続」をクリックします。接続ダイアログが表示されます。

  3. 「どこからでもアクセスを許可」をクリックし、 「TiDB クラスター CA のダウンロード」をクリックして CA 証明書をダウンロードします。

    接続文字列の取得方法の詳細については、 TiDB専用標準接続を参照してください。

  4. 次のコマンドを実行して.env.exampleをコピーし、名前を.envに変更します。

    cp .env.example .env
  5. .envファイルを編集し、次のように環境変数を設定し、接続ダイアログ上の対応するプレースホルダー{}接続パラメーターに置き換えます。

    TIDB_HOST={host} TIDB_PORT=4000 TIDB_USER={user} TIDB_PASSWORD={password} TIDB_DATABASE=test TIDB_ENABLE_SSL=true TIDB_CA_PATH={downloaded_ssl_ca_path}

    注記

    パブリック エンドポイントを使用して TiDB Dended に接続する場合は、TLS 接続を有効にすることをお勧めします。

    TLS 接続を有効にするには、 TIDB_ENABLE_SSLtrueに変更し、 TIDB_CA_PATH使用して接続ダイアログからダウンロードした CA 証明書のファイル パスを指定します。

  6. .envファイルを保存します。

  1. 次のコマンドを実行して.env.exampleをコピーし、名前を.envに変更します。

    cp .env.example .env
  2. .envファイルを編集し、対応するプレースホルダー{}クラスターの接続パラメーターに置き換えます。構成例は次のとおりです。

    TIDB_HOST={host} TIDB_PORT=4000 TIDB_USER=root TIDB_PASSWORD={password} TIDB_DATABASE=test

    TiDB をローカルで実行している場合、デフォルトのホスト アドレスは127.0.0.1で、パスワードは空です。

  3. .envファイルを保存します。

ステップ 4: コードを実行して結果を確認する

次のコマンドを実行してサンプル コードを実行します。

npm start

接続が成功すると、コンソールには次のように TiDB クラスターのバージョンが出力されます。

🔌 Connected to TiDB cluster! (TiDB version: 8.0.11-TiDB-v7.5.1) ⏳ Loading sample game data... ✅ Loaded sample game data. 🆕 Created a new player with ID 12. ℹ️ Got Player 12: Player { id: 12, coins: 100, goods: 100 } 🔢 Added 50 coins and 50 goods to player 12, updated 1 row. 🚮 Deleted 1 player data.

サンプルコードスニペット

次のサンプル コード スニペットを参照して、独自のアプリケーション開発を完了できます。

完全なサンプル コードとその実行方法については、 tidb-samples/tidb-nodejs-mysqljs-quickstartリポジトリを確認してください。

接続オプションを使用して接続する

次のコードは、環境変数で定義されたオプションを使用して TiDB への接続を確立します。

// Step 1. Import the 'mysql' and 'dotenv' packages. import { createConnection } from "mysql"; import dotenv from "dotenv"; import * as fs from "fs"; // Step 2. Load environment variables from .env file to process.env. dotenv.config(); // Step 3. Create a connection to the TiDB cluster. const options = { host: process.env.TIDB_HOST || '127.0.0.1', port: process.env.TIDB_PORT || 4000, user: process.env.TIDB_USER || 'root', password: process.env.TIDB_PASSWORD || '', database: process.env.TIDB_DATABASE || 'test', ssl: process.env.TIDB_ENABLE_SSL === 'true' ? { minVersion: 'TLSv1.2', ca: process.env.TIDB_CA_PATH ? fs.readFileSync(process.env.TIDB_CA_PATH) : undefined } : null, } const conn = createConnection(options); // Step 4. Perform some SQL operations... // Step 5. Close the connection. conn.end();

注記

TiDB サーバーレスの場合、パブリック エンドポイントを使用する場合はTIDB_ENABLE_SSL経由の TLS 接続を有効にする必要があります。ただし、Node.js はデフォルトで組み込みのMozilla CA 証明書を使用し、TiDB Serverless によって信頼されるため、 TIDB_CA_PATH経由で SSL CA 証明書を指定する必要はありません

データの挿入

次のクエリは、単一のPlayerレコードを作成し、新しく作成されたレコードの ID を返します。

conn.query('INSERT INTO players (coins, goods) VALUES (?, ?);', [100, 100], (err, ok) => { if (err) { console.error(err); } else { console.log(ok.insertId); } });

詳細については、 データの挿入を参照してください。

クエリデータ

次のクエリは、ID 1による単一のPlayerレコードを返します。

conn.query('SELECT id, coins, goods FROM players WHERE id = ?;', [1], (err, rows) => { if (err) { console.error(err); } else { console.log(rows[0]); } });

詳細については、 クエリデータを参照してください。

データを更新する

次のクエリは、ID 1Player50コインと50グッズを追加します。

conn.query( 'UPDATE players SET coins = coins + ?, goods = goods + ? WHERE id = ?;', [50, 50, 1], (err, ok) => { if (err) { console.error(err); } else { console.log(ok.affectedRows); } } );

詳細については、 データを更新するを参照してください。

データの削除

次のクエリは、ID 1Playerレコードを削除します。

conn.query('DELETE FROM players WHERE id = ?;', [1], (err, ok) => { if (err) { reject(err); } else { resolve(ok.affectedRows); } });

詳細については、 データの削除を参照してください。

便利なメモ

  • 接続プールを使用してデータベース接続を管理すると、接続の頻繁な確立と破棄によって生じるパフォーマンスのオーバーヘッドを軽減できます。

  • SQL インジェクション攻撃を回避するには、SQL を実行する前にクエリ値のエスケープを使用することをお勧めします。

    注記

    mysqljs/mysqlパッケージはまだプリペアド ステートメントをサポートしておらず、クライアント側で値をエスケープするだけです (関連問題: mysqljs/mysql#274 )。

    この機能を使用して SQL インジェクションを回避したり、バッチ挿入/更新の効率を向上させたい場合は、代わりにmysql2パッケージを使用することをお勧めします。

  • ORM フレームワークを使用すると、 続編TypeORMプリズマなどの多数の複雑な SQL ステートメントを使用しないシナリオでの開発効率が向上します。

  • データベースで大きな数値 ( BIGINTDECIMAL列) を扱う場合は、 supportBigNumbers: trueオプションを有効にすることをお勧めします。

次のステップ

助けが必要?

不和またはサポートチケットを作成するについて質問してください。

不和またはサポートチケットを作成するについて質問してください。

このページは役に立ちましたか?

Playground
新規
登録なしで TiDB の機能をワンストップでインタラクティブに体験できます。
製品
TiDB Cloud
TiDB
価格
PoC お問い合わせ
エコシステム
TiKV
TiFlash
OSS Insight
© 2024 PingCAP. All Rights Reserved.
Privacy Policy.