Closed4
mysql2 の client で TiDB に接続する

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();

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
といわれるので素直にページに飛ぶ

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

どうやら ssl に空オブジェクトを渡すとうまくいくらしい
sslについては、空オブジェクトを渡すことでnode:tlsモジュールがMozillaのCAを利用するそうなので、それをすることで接続は叶った
このスクラップは6ヶ月前にクローズされました