0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

LOLIPOP!マネージドクラウドでMySQLデータベースを利用する

Last updated at Posted at 2025-01-26

はじめに

LOLIPOP!マネージドクラウドNode.jsプロジェクトでデータベースを利用する方法の備忘録です。

目次

  1. データベースの情報を確認する
  2. MySQLのバージョンを確認する
  3. MySQL8.0に対応したmysqlライブラリを使用する
  4. LOLIPOP!マネージドクラウドのサーバーにSSH接続する
  5. テーブルの作成
  6. 環境変数の設定

1. データベースの情報を確認する

プロジェクト一覧から作成したプロジェクトを選択し、データベースの情報を確認します。
データベース名ユーザー名ホスト名は自動で設定されます。パスワードはプロジェクト作成時に入力したパスワードが設定されており、プロジェクト作成後もパスワードを変更するリンクから変更できます。

スクリーンショット 2025-01-26 16.52.41.png

2. MySQLのバージョンを確認する

2024年4月からは、新規プロジェクトを作成するとMySQL8.0のデータベースが作成されます。

本日、データベースについて【 MySQL8.0 】を提供開始いたしました。
これより、新規作成いただくデータベースについては、MySQL8.0 で作成いただけるようになりました。

・すでに作成いただいているデータベースの MySQL バージョンに変更はございません。
・MySQL5.7 でのデータベース新規作成は提供終了いたしました。
(MySQL8.0 提供のお知らせ:https://note.com/mclolipopjp/n/n3b9bbff6ec61)

データベースのホスト名からもMySQLのバージョンを知ることができます。

ホスト名 MySQLのバージョン
mysql-1.mc.lolipop.lan 5.7
mysql-2.mc.lolipop.lan 5.7
mysql-3.mc.lolipop.lan 8.0

3. MySQL8.0に対応したmysqlライブラリを使用する

MySQL5.7を利用している方、既にMySQL8.0対応ずみの方はスキップしてください

Node.jsMySQLを利用するライブラリとして代表的なmysqlライブラリはMySQL8.0に対応していません。
そこで、今回はmysql2を使用します。

npm install --save mysql2

Node.js+Express.jsを使用したWEBアプリケーションの場合は下記のように使用します。

javascript
const mysql = require("mysql2/promise");

const pool = mysql.createPool({
    host: process.env.DB_HOST,
    user: process.env.DB_USER,
    password: process.env.DB_PASSWORD,
    database: process.env.DB_NAME,
});

app.get("/list", async (req, res) => {
    try {
        const [results] = await pool.query("SELECT * FROM table");
        res.render("list.ejs", { results: results });
    } catch {
        res.status(500).send("Database Error");
    }
});

4. LOLIPOP!マネージドクラウドのサーバーにSSH接続する

LOLIPOP!マネージドクラウドに登録するための公開鍵・秘密鍵を生成します。

local
cd ~/.ssh
ssh-keygen -t rsa

生成した公開鍵は、ダッシュボード>SSH公開鍵の管理画面から追加します。

プロジェクトのSSH/SFTP欄のSSHコマンドを使用して、LOLIPOP!マネージドクラウドのサーバーにSSH接続します。

local
ssh -p 22 <ユーザー名>@<ホスト>

5. テーブルの作成

SSH接続した状態で、mysqlを実行します。データベース名ユーザー名ホスト名手順.1で確認したものを入力してください。

ssh
mysql -u <ユーザー名> -p -h <ホスト名> <データベース名>

mysqlのインターフェースが開かれたら任意のテーブルを作成します。

mysql> CREATE TABLE hoge (id INT AUTO_INCREMENT,fuga TEXT, PRIMARY KEY (id));

あらかじめ作成したSQLファイルを実行する事もできます。
pushしたリポジトリは/var/app/current上に配置されているので、下記のようなコマンドで実行できます。

ssh
mysql -u <ユーザー名> -p -h <ホスト名> <データベース名> < ./current/hoge.sql

LOLIPOP!マネージドクラウドのサーバーは、キーボードから日本語が入力できない初期設定になっているので、日本語のデータをINSERTしたいときはSQLファイルを実行する方法が簡単です。

日本語データが文字化けする場合はmysqlコマンド実行時に下記のように文字コードを指定してください。

ssh
mysql -u <ユーザー名> -p -h <ホスト名> <データベース名> --default-character-set=utf8mb4 < ./current/hoge.sql

6. 環境変数の設定

環境変数からデータベースの接続情報を利用する場合はプロジェクトの環境変数設定から設定しておきます。

スクリーンショット 2025-01-26 18.25.38.png

設定した環境変数は、通常の環境変数と同様下記のように利用できます。

javascript
const pool = mysql.createPool({
    host: process.env.DB_HOST,
    user: process.env.DB_USER,
    password: process.env.DB_PASSWORD,
    database: process.env.DB_NAME,
});

おわりに

ここまでの手順で、LOLIPOP!マネージドクラウドにデプロイしたWEBアプリケーションからデータベースが利用できるようになります。

スクリーンショット 2025-01-26 17.29.06.png

ちなみに、なぜかデータベースの利用方法は公式のサポート対象外となっています。:thinking:

参考文献

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?