クイック スタート:Node.js を使用して Azure Database for MySQL に接続してデータを照会する

注意

この記事では、間もなくサポート終了 (EOL) 状態になる Linux ディストリビューションである CentOS について説明します。 適宜、使用と計画を検討してください。 詳細については、「CentOS のサポート終了に関するガイダンス」を参照してください。

適用対象: Azure Database for MySQL - シングル サーバー

重要

Azure Database for MySQL シングル サーバーは廃止パスにあります。 Azure Database for MySQL フレキシブル サーバーにアップグレードすることを強くお勧めします。 Azure Database for MySQL フレキシブル サーバーへの移行の詳細については、Azure Database for MySQL シングル サーバーの現状に関するページを参照してください

このクイックスタートでは、Node.js を使用して Azure Database for MySQL に接続します。 Mac、Linux、Windows の各プラットフォームから SQL ステートメントを使用して、データベース内のデータをクエリ、挿入、更新、削除できます。

この記事は、Node.js を使用した開発には慣れているものの、Azure Database for MySQL の使用は初めてであるユーザーを想定しています。

前提条件

重要

Azure portal または Azure CLI を使用して、接続元の IP アドレスにサーバーのファイアウォール規則が追加されていることを確認します。

Node.js と MySQL コネクタのインストール

プラットフォームに応じて、該当するセクションの手順に従って Node.js をインストールしてください。 npm を使用して mysql2 パッケージとその依存関係をプロジェクト フォルダーにインストールしてください。

  1. Node.js ダウンロード ページにアクセスし、必要な Windows インストーラー オプションを選択します。

  2. ローカル プロジェクト フォルダーを作成します (例: nodejsmysql)。

  3. コマンド プロンプトを開き、ディレクトリをプロジェクト フォルダーに変更します (例: cd c:\nodejsmysql\)。

  4. NPM ツールを実行して、mysql2 ライブラリをプロジェクト フォルダーにインストールします。

    cd c:\nodejsmysql\
    "C:\Program Files\nodejs\npm" install mysql2
    "C:\Program Files\nodejs\npm" list
    
  5. npm list の出力テキストを確認してインストール結果を検証します。 バージョン番号は、新しいパッチのリリースに伴って変わる場合があります。

接続情報の取得

Azure Database for MySQL に接続するために必要な接続情報を取得します。 完全修飾サーバー名とログイン資格情報が必要です。

  1. Azure Portal にログインします。
  2. Azure portal の左側のメニューにある [すべてのリソース] を選択し、作成したサーバー (例: mydemoserver) を検索します。
  3. サーバー名を選択します。
  4. サーバーの [概要] パネルから、 [サーバー名][サーバー管理者ログイン名] を書き留めます。 パスワードを忘れた場合も、このパネルからパスワードをリセットすることができます。 Azure Database for MySQL サーバー名

コード サンプルの実行

  1. JavaScript コードを新しいテキスト ファイルに貼り付け、そのファイルを .js というファイル拡張子でプロジェクト フォルダーに保存します (例: C:\nodejsmysql\createtable.js や/home/username/nodejsmysql/createtable.js)。

  2. コードの hostuserpassword および database 構成オプションを、サーバーとデータベースを作成した時に指定した値に置き換えます。

  3. SSL 証明書を取得する: Azure Database for MySQL サーバーで SSL 経由で通信するために必要な証明書を https://dl.cacerts.digicert.com/DigiCertGlobalRootCA.crt.pem からダウンロードし、ローカル ドライブに保存します。

    Microsoft Internet Explorer と Microsoft Edge の場合: ダウンロードが完了したら、証明書の名前を DigiCertGlobalRootCA.crt.pem に変更します。

    ソブリン クラウドにおけるサーバーの証明書については、Azure Government21Vianet によって運営される Microsoft AzureAzure Germany の各リンクを参照してください。

  4. ssl config オプションで、 ca-cert ファイル名をこのローカル ファイルのパスに置き換えます。

  5. コマンド プロンプトまたは Bash シェルを開き、ディレクトリをプロジェクト フォルダーに変更します (cd nodejsmysql)。

  6. アプリケーションを実行するには、node コマンドに続けてファイル名を入力します (例: node createtable.js)。

  7. Windows で環境変数 PATH に node アプリケーションが追加されていない場合、node アプリケーションを起動するには完全パスを使用する必要があります (例: "C:\Program Files\nodejs\node.exe" createtable.js)

接続、テーブルの作成、データの挿入

接続し、SQL ステートメント CREATE TABLE および INSERT INTO を使用してデータを読み込むには、次のコードを使用します。

MySQL サーバーとやり取りするには、mysql.createConnection() メソッドを使用します。 サーバーへの接続を確立するには、connect() 関数を使用します。 MySQL データベースに対して SQL クエリを実行するには、query() 関数を使用します。

const mysql = require('mysql2');
const fs = require('fs');

var config =
{
    host: 'mydemoserver.mysql.database.azure.com',
    user: 'myadmin@mydemoserver',
    password: 'your_password',
    database: 'quickstartdb',
    port: 3306,
    ssl: {ca: fs.readFileSync("your_path_to_ca_cert_file_DigiCertGlobalRootCA.crt.pem")}
};

const conn = new mysql.createConnection(config);

conn.connect(
    function (err) {
    if (err) {
        console.log("!!! Cannot connect !!! Error:");
        throw err;
    }
    else
    {
       console.log("Connection established.");
           queryDatabase();
    }
});

function queryDatabase(){
    conn.query('DROP TABLE IF EXISTS inventory;', function (err, results, fields) {
        if (err) throw err;
        console.log('Dropped inventory table if existed.');
    })
        conn.query('CREATE TABLE inventory (id serial PRIMARY KEY, name VARCHAR(50), quantity INTEGER);',
            function (err, results, fields) {
                if (err) throw err;
        console.log('Created inventory table.');
    })
    conn.query('INSERT INTO inventory (name, quantity) VALUES (?, ?);', ['banana', 150],
            function (err, results, fields) {
                if (err) throw err;
        else console.log('Inserted ' + results.affectedRows + ' row(s).');
        })
    conn.query('INSERT INTO inventory (name, quantity) VALUES (?, ?);', ['orange', 154],
            function (err, results, fields) {
                if (err) throw err;
        console.log('Inserted ' + results.affectedRows + ' row(s).');
        })
    conn.query('INSERT INTO inventory (name, quantity) VALUES (?, ?);', ['apple', 100],
    function (err, results, fields) {
                if (err) throw err;
        console.log('Inserted ' + results.affectedRows + ' row(s).');
        })
    conn.end(function (err) {
    if (err) throw err;
    else  console.log('Done.')
    });
};

データの読み取り

接続し、SELECT SQL ステートメントを使用してデータを読み取るには、次のコードを使用します。

MySQL サーバーとやり取りするには、mysql.createConnection() メソッドを使用します。 サーバーとの接続を確立するには、connect() メソッドを使用します。 MySQL データベースに対して SQL クエリを実行するには、query() メソッドを使用します。 クエリの結果は、results 配列を使って保存します。

const mysql = require('mysql2');
const fs = require('fs');

var config =
{
    host: 'mydemoserver.mysql.database.azure.com',
    user: 'myadmin@mydemoserver',
    password: 'your_password',
    database: 'quickstartdb',
    port: 3306,
    ssl: {ca: fs.readFileSync("your_path_to_ca_cert_file_DigiCertGlobalRootCA.crt.pem")}
};

const conn = new mysql.createConnection(config);

conn.connect(
    function (err) {
        if (err) {
            console.log("!!! Cannot connect !!! Error:");
            throw err;
        }
        else {
            console.log("Connection established.");
            readData();
        }
    });

function readData(){
    conn.query('SELECT * FROM inventory',
        function (err, results, fields) {
            if (err) throw err;
            else console.log('Selected ' + results.length + ' row(s).');
            for (i = 0; i < results.length; i++) {
                console.log('Row: ' + JSON.stringify(results[i]));
            }
            console.log('Done.');
        })
    conn.end(
        function (err) {
            if (err) throw err;
            else  console.log('Closing connection.')
    });
};

データの更新

接続して UPDATE SQL ステートメントを使ってデータを更新するには、以下のコードを使います。

MySQL サーバーとやり取りするには、mysql.createConnection() メソッドを使用します。 サーバーとの接続を確立するには、connect() メソッドを使用します。 MySQL データベースに対して SQL クエリを実行するには、query() メソッドを使用します。

const mysql = require('mysql2');
const fs = require('fs');

var config =
{
    host: 'mydemoserver.mysql.database.azure.com',
    user: 'myadmin@mydemoserver',
    password: 'your_password',
    database: 'quickstartdb',
    port: 3306,
    ssl: {ca: fs.readFileSync("your_path_to_ca_cert_file_DigiCertGlobalRootCA.crt.pem")}
};

const conn = new mysql.createConnection(config);

conn.connect(
    function (err) {
        if (err) {
            console.log("!!! Cannot connect !!! Error:");
            throw err;
        }
        else {
            console.log("Connection established.");
            updateData();
        }
    });

function updateData(){
       conn.query('UPDATE inventory SET quantity = ? WHERE name = ?', [200, 'banana'],
            function (err, results, fields) {
                if (err) throw err;
                else console.log('Updated ' + results.affectedRows + ' row(s).');
           })
       conn.end(
           function (err) {
                if (err) throw err;
                else  console.log('Done.')
        });
};

データの削除

以下のコードを使って接続し、DELETE SQL ステートメントを使ってデータを削除します。

MySQL サーバーとやり取りするには、mysql.createConnection() メソッドを使用します。 サーバーとの接続を確立するには、connect() メソッドを使用します。 MySQL データベースに対して SQL クエリを実行するには、query() メソッドを使用します。

const mysql = require('mysql2');
const fs = require('fs');

var config =
{
    host: 'mydemoserver.mysql.database.azure.com',
    user: 'myadmin@mydemoserver',
    password: 'your_password',
    database: 'quickstartdb',
    port: 3306,
    ssl: {ca: fs.readFileSync("your_path_to_ca_cert_file_DigiCertGlobalRootCA.crt.pem")}
};

const conn = new mysql.createConnection(config);

conn.connect(
    function (err) {
        if (err) {
            console.log("!!! Cannot connect !!! Error:");
            throw err;
        }
        else {
            console.log("Connection established.");
            deleteData();
        }
    });

function deleteData(){
       conn.query('DELETE FROM inventory WHERE name = ?', ['orange'],
            function (err, results, fields) {
                if (err) throw err;
                else console.log('Deleted ' + results.affectedRows + ' row(s).');
           })
       conn.end(
           function (err) {
                if (err) throw err;
                else  console.log('Done.')
        });
};

リソースをクリーンアップする

このクイックスタートで使用したすべてのリソースをクリーンアップするには、次のコマンドを使用してリソース グループを削除します。

az group delete \
    --name $AZ_RESOURCE_GROUP \
    --yes

次のステップ