mysql.jsを使用してTiDBに接続する
TiDBはMySQL互換データベースであり、 mysql.jsドライバはMySQLプロトコルを実装した純粋なNode.js JavaScriptクライアントです。
このチュートリアルでは、TiDBとmysql.jsドライバを使用して以下のタスクを実行する方法を学ぶことができます。
- 環境をセットアップしてください。
- mysql.jsドライバを使用してTiDBに接続します。
- アプリケーションをビルドして実行します。オプションで、基本的な CRUD 操作用のサンプルコードスニペットを見つけることができます。
前提条件
このチュートリアルを完了するには、以下が必要です。
TiDBクラスタをお持ちでない場合は、以下の手順で作成できます。
- (推奨) TiDB Cloud Starterインスタンスを作成する。
- ローカルテスト用のTiDB Self-Managedクラスタをデプロイまたは本番のTiDB Self-Managedクラスタをデプロイ
TiDBに接続するには、サンプルアプリを実行してください。
このセクションでは、サンプルアプリケーションコードを実行してTiDBに接続する方法を説明します。
ステップ1:サンプルアプリのリポジトリをクローンする
サンプルコードリポジトリをクローンするには、ターミナルウィンドウで以下のコマンドを実行してください。
git clone https://github.com/tidb-samples/tidb-nodejs-mysqljs-quickstart.git
cd tidb-nodejs-mysqljs-quickstart
ステップ2:依存関係をインストールする
サンプルアプリに必要なパッケージ( mysqlおよびdotenvを含む)をインストールするには、次のコマンドを実行します。
npm install
既存のプロジェクトに依存関係をインストールします
既存のプロジェクトの場合、以下のコマンドを実行してパッケージをインストールしてください。
npm install mysql dotenv --save
ステップ3:接続情報の設定
選択したTiDBのデプロイオプションに応じて、TiDBに接続してください。
My TiDBページに移動し、対象のTiDB Cloud StarterまたはEssentialインスタンスの名前をクリックして、概要ページに移動します。
右上隅のConnectをクリックしてください。接続ダイアログが表示されます。
接続ダイアログの設定がご使用のオペレーティング環境と一致していることを確認してください。
- Connection Typeは
Publicに設定されています。 - Branchは
mainに設定されています。 - Connect Withは
Generalに設定されています。 - Operating Systemは、アプリケーションを実行するオペレーティングシステムと一致します。
- Connection Typeは
まだパスワードを設定していない場合は、 Generate Passwordをクリックしてランダムなパスワードを生成してください。
.env.exampleをコピーして.envに名前を変更するには、次のコマンドを実行します。cp .env.example .env.envファイルを編集し、環境変数を以下のように設定し、接続ダイアログ上の対応するプレースホルダー{}接続パラメータに置き換えます。TIDB_HOST={host} TIDB_PORT=4000 TIDB_USER={user} TIDB_PASSWORD={password} TIDB_DATABASE=test TIDB_ENABLE_SSL=true.envファイルを保存します。
My TiDBページに移動し、対象のTiDB Cloud Premiumインスタンスの名前をクリックして概要ページに移動します。
左側のナビゲーションペインで、 Settings > Networkingをクリックします。
Networkingページで、Public EndpointのEnableをクリックし、次にAdd IP Addressをクリックします。
クライアントのIPアドレスがアクセスリストに追加されていることを確認してください。
左側のナビゲーションペインでOverviewをクリックすると、インスタンスの概要ページに戻ります。
右上隅のConnectをクリックしてください。接続ダイアログが表示されます。
接続ダイアログで、 Connection TypeドロップダウンリストからPublicを選択します。
- 公開エンドポイントがまだ有効化中であることを示すメッセージが表示された場合は、処理が完了するまでお待ちください。
- まだパスワードを設定していない場合は、ダイアログのSet Root Passwordをクリックしてください。
- サーバー証明書を確認する必要がある場合、または接続に失敗して認証局(CA)証明書が必要な場合は、 CA certをクリックしてダウンロードしてください。
- Public接続タイプに加えて、 TiDB Cloud Premium はPrivate Endpoint接続をサポートします。詳細については、 AWS PrivateLink経由でTiDB Cloud Premiumに接続しますを参照してください。
.env.exampleをコピーして.envに名前を変更するには、次のコマンドを実行します。cp .env.example .env.envファイルを編集し、環境変数を以下のように設定し、接続ダイアログで対応するプレースホルダー{}を接続パラメータに置き換えます。TIDB_HOST={host} TIDB_PORT=4000 TIDB_USER={user} TIDB_PASSWORD={password} TIDB_DATABASE=test TIDB_ENABLE_SSL=false.envファイルを保存します。
My TiDBページに移動し、対象のTiDB Cloud Dedicatedクラスタの名前をクリックして概要ページに移動します。
右上隅のConnectをクリックしてください。接続ダイアログが表示されます。
接続ダイアログで、 Connection TypeドロップダウンリストからPublicを選択し、 CA certをクリックしてCA証明書をダウンロードします。
IP アクセス リストを設定していない場合は、最初の接続の前に、 Configure IP Access Listをクリックするか、IP アクセス リストを設定するの手順に従って設定します。
TiDB Cloud Dedicated は、Public接続タイプに加えて、Private EndpointおよびVPC Peering接続タイプもサポートしています。詳細については、 TiDB Cloud Dedicatedクラスタに接続しますを参照してください。
.env.exampleをコピーして.envに名前を変更するには、次のコマンドを実行します。cp .env.example .env.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}.envファイルを保存します。
.env.exampleをコピーして.envに名前を変更するには、次のコマンドを実行します。cp .env.example .env.envファイルを編集し、対応するプレースホルダー{}TiDB の接続パラメータに置き換えてください。設定例は以下のとおりです。TIDB_HOST={host} TIDB_PORT=4000 TIDB_USER=root TIDB_PASSWORD={password} TIDB_DATABASE=testTiDBをローカルで実行している場合、デフォルトのホストアドレスは
127.0.0.1で、パスワードは空です。.envファイルを保存します。
ステップ4:コードを実行して結果を確認する
サンプルコードを実行するには、以下のコマンドを実行してください。
npm start
接続が成功すると、コンソールには次のようにTiDBのバージョンが出力されます。
🔌 Connected to TiDB cluster! (TiDB version: 8.0.11-TiDB-v8.5.4)
⏳ 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 TiDB.
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();
データを挿入する
次のクエリは、単一の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]);
}
});
詳細については、 クエリデータを参照してください。
データの更新
以下のクエリは、 50の ID を持つ50にPlayerコインと1の商品を追加します。
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がPlayerである1レコードを削除します。
conn.query('DELETE FROM players WHERE id = ?;', [1], (err, ok) => {
if (err) {
reject(err);
} else {
resolve(ok.affectedRows);
}
});
詳細については、データを削除するを参照してください。
役立つメモ
接続プールを使用してデータベース接続を管理することで、接続の頻繁な確立と切断によって発生するパフォーマンスのオーバーヘッドを削減できます。
SQL インジェクション攻撃を回避するには、SQL を実行する前にクエリ値のエスケープを使用することをお勧めします。
ORM フレームワークを使用して、Sequelize、 TypeORM 、 Prismaなど、多数の複雑な SQL文を使用しないシナリオでの開発効率を向上させます。
データベースで大きな数値(
supportBigNumbers: true列とBIGINT列)を扱う場合は、DECIMALオプションを有効にすることをお勧めします。
次のステップ
- mysql.js ドライバーの使用方法の詳細についてはmysql.jsのドキュメントを参照してください。
- 開発者ガイドのデータを挿入する、データの更新、データを削除する、クエリデータ、トランザクション、SQLパフォーマンス最適化などの章を読んで、TiDB アプリケーション開発のベストプラクティスを学びましょう。
- プロフェッショナルなTiDB開発者向けコースコースを通じて学習し、試験に合格するとTiDB認定資格を取得します。
お困りですか?
- Discordor Slackコミュニティに質問してください。
- TiDB Cloudのサポートチケットを送信してください
- TiDB Self-Managedのサポートチケットを送信してください