WindowsにMariaDBをインストール

AWS に乗せるサービスの開発をしているしているのですが、
やはり、公開されているページでデータベースのテストをするのは気がかりなので、
手元の WindowsOS に MariaDB のインストールをしました。
テストがてら、Node.js と PHP で同じ DB にアクセスしてみます。

目次

対象環境とインストーラの入手

インストール先の環境は Windows7 64bit です。

Windows 向けのインストーラはこちらから入手します。
僕は、MariaDB 10.3 Series を選んで、mariadb-10.3.9-winx64.msi をダウンロードしました

インストール

mariadb-10.3.9-winx64.msi を実行します。

  1. 「Next」
  2. ライセンスに承諾して「Next」
  3. 特別設定を変更せずに「Next」
  4. root パスワードを任意設定、テスト用なのでリモートアクセスのチェックは外し、
    文字コードを UTF8 にして「Next」
  5. 特別設定を変更せずに「Next」
  6. フィードバックはしないのでチェックを入れずに next」
  7. 「Install」
  8. インストール処理終わるまで待機
  9. 「Finish」

https://downloads.mariadb.com/Connectors/odbc/connector-odbc-3.0.6/
mariadb-connector-odbc-3.0.6-win64.msi

パス追加

インストールしただけでは、実行が一々実行ディレクトリに行くことになるので、
環境変数の PATH に mysql.exe のあるディレクトリを追加します。

  1. C:\Windows\System32\SystemPropertiesAdvanced.exe を実行し、
    環境変数(N)を開く
    (システムのプロパティが開ければ、コントロールパネルから追っていってもいいです。)
  2. システム環境変数(S)の Path を開く
  3. 変数値に C:\Program Files\MariaDB 10.3\bin を追加して、「OK」。
    開いたウィンドウをすべて閉じる。

確認

コマンドプロンプトを開いて
mysql --versionを実行して、

のように返ってくれば OK です。

データベース設定

Node.js でアクセスするにしても、php でアクセスするにしても、
データを投入する必要があります。
任意のユーザーを root 以外に作成し、以下のテーブルを準備しました。

id data0
1 ‘AAAA’
2 ‘BBBB’
3 ‘CCCC’

Node.js でアクセス

mariadb アクセス用にパッケージをインストールします。
npm i mariadb
mariadb パッケージの ReadMeを参考にしながら
index.js として以下を保存します。

index.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
const mariadb = require("mariadb/callback");

const conn = mariadb.createConnection({
host: "localhost",
user: "[ログインユーザー名]",
password: "[パスワード]",
database: "[データベース名]",
});

conn.connect((err) => {
if (err) {
console.log("Not connect!");
conn.end();
} else {
console.log("Connect!");
conn.query("select * from TESTTABLE", (err, rows, meta) => {
rows.forEach((element) => {
console.log(element);
});
conn.end();
});
}
});

node index.jsで実行。
実行すると、以下のように取得したテーブルの中身を 1 行ずつ表示します。

1
2
3
4
Connect
{ ID: 1, data0: 'AAAA' }
{ ID: 2, data0: 'BBBB' }
{ ID: 3, data0: 'CCCC' }

Mode.js で MariaDB にアクセスできました。

PHP でアクセス

今度は PHP でアクセスしてみます。
index.php として以下を保存します。

index.php
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
<?php

$fp = fopen('php://stdout', 'w');

$dsn = 'mysql:host=localhost;dbname=[データベース名];charset=utf8';
$user = '[ログインユーザー名]';
$password = '[パスワード]';

try {

$dbh = new PDO($dsn,$user,$password,[PDO::FETCH_COLUMN]);

if ($dbh == null) {
fprintf($fp,'"Not connect!'. "\n");

} else {
fprintf($fp,'Connect!'. "\n");
$result = $dbh->query('SELECT * from TESTTABLE');
foreach ($result as $row) {
fprintf($fp, '{ ID: %s, data0: \'%s\' }' . "\n",$row[0],$row[1]);
}
}
} catch (PDOException $e) {
print('Error:' . $e->getMessage());
die();
}

$dbh = null;

?>

php index.phpで実行します。
失敗した…。
以下のエラーが出た
Error:could not find driver
ドライバが見つからないらしい。

いろいろ調べたら、php_pdo_mysql.dll が参照できていないかららしい。
なので、以下の対応をとった。

  1. php.ini-production をコピーして php.ini を作成
  2. 以下の 2 つの項目のコメントアウトを外す。
    1
    2
    3
    4
    733行あたり
    extension_dir = "ext"  
    905行あたり
    extension=pdo_mysql

改めてphp index.phpで実行します。
実行結果は以下のように表示されます。(node.js で実行したときの表示に寄せたわけですが…。)

1
2
3
4
Connect!
{ ID: 1, data0: 'AAAA' }
{ ID: 2, data0: 'BBBB' }
{ ID: 3, data0: 'CCCC' }

PHP でも MariaDB にアクセスできました。

終わりに

今回は Windows7 64pit 環境にインストールした MariaDB に、
Node.js と PHP でアクセスしてみました。
AWS にアップする予定のサービスのテストのために、windows 環境でのインストールとテストをしたわけですが、
Node.js からのアクセスもできたので、ラズパイにも活用できそうでやってよかったななんて思います。

参考になる人がいれば何よりです。

ではでは。