Closed4

mysql2 の client で TiDB に接続する

mittsmasamittsmasa

local : MySQL
remote: TiDB
という構成の場合、すこし設定が必要だった

これで解決した

const createDrizzle = async () => {
  const client = await mysqlConnect({
    host: process.env.DB_HOST,
    user: process.env.DB_USERNAME,
    password: process.env.DB_PASSWORD,
    database: process.env.DB_DATABASE,
    ssl: process.env.DB_TYPE?.toLowerCase() === 'tidb' ? {} : undefined,
  });
  return mysql(client, { schema, mode: 'default' });
};

export const db = await createDrizzle();
mittsmasamittsmasa
const createDrizzle = async () => {
  const client = await mysqlConnect({
    host: process.env.DB_HOST,
    user: process.env.DB_USERNAME,
    password: process.env.DB_PASSWORD,
    database: process.env.DB_DATABASE,
  });
  return mysql(client, { schema, mode: 'default' });
};

export const db = await createDrizzle();

で接続すると

⨯ Error: Connections using insecure transport are prohibited. See https://docs.pingcap.com/tidbcloud/secure-connections-to-serverless-tier-clusters

といわれるので素直にページに飛ぶ

mittsmasamittsmasa

https://docs.pingcap.com/tidbcloud/secure-connections-to-serverless-clusters

クライアントと TiDB Cloud Serverless クラスター間の安全な TLS 接続を確立することは、データベースに接続するための基本的なセキュリティ対策の 1 つです。TiDB Cloud Serverless のサーバー証明書は、独立したサードパーティの証明書プロバイダーによって発行されます。サーバー側のデジタル証明書をダウンロードしなくても、TiDB Cloud Serverless クラスターに簡単に接続できます。

デジタル証明書をつかって TLS で通信してね と読んだ

mittsmasamittsmasa

https://zenn.dev/windchime_yk/scraps/af78c59c1aa0b4
色々調べていて こちらのスクラップがみつかった
どうやら ssl に空オブジェクトを渡すとうまくいくらしい

sslについては、空オブジェクトを渡すことでnode:tlsモジュールがMozillaのCAを利用するそうなので、それをすることで接続は叶った

このスクラップは6ヶ月前にクローズされました