node.js + express + MySQL

MySQL インストール
// MySQL Yum リポジトリをシステムのリポジトリリストに追加
$ sudo yum localinstall http://dev.mysql.com/get/mysql57-community-release-el7-7.noarch.rpm
// リポジトリの確認
$ ls /etc/yum.repos.d/mysql-*
/etc/yum.repos.d/mysql-community-source.repo
/etc/yum.repos.d/mysql-community.repo
// インストール
$ sudo yum install -y mysql-community-server
// バージョンの確認
$ mysqld --version
mysqld Ver 5.7.33 for Linux on x86_64 (MySQL Community Server (GPL))
デーモンの起動
// 起動
$ sudo systemctl start mysqld
// ステータス確認
$ sudo systemctl status mysqld
● mysqld.service - MySQL Server
Loaded: loaded (/usr/lib/systemd/system/mysqld.service; enabled; vendor preset: disabled)
Active: active (running) since 日 2021-01-24 01:52:16 UTC; 3s ago
...
// 自動起動の設定
$ sudo systemctl enable mysqld
MySQL 初期設定
パスワードの変更
// root ユーザの初期 PW の確認
$ sudo cat /var/log/mysqld.log | grep root
2021-01-24T01:52:13.521392Z 1 [Note] A temporary password is generated for root@localhost: [パスワード文字列]
// root ユーザでログイン
$ mysql -u root -p
Enter password: ← 先ほどの [パスワード文字列] を入力する
パスワードを root に変更したいが、その前に、デフォルトのパスワードポリシー「英大文字・小文字・数字・記号を含む 8 文字以上の文字列」を変更する必要がある。
// 何かしようとすると、パスワードを変更しなさいと言われる
mysql> create database Test;
ERROR 1820 (HY000): You must reset your password using ALTER USER statement before executing this statement.
// ただし、"root" に変更しようとするとポリシーを満たさないのでエラーとなる。
mysql> SET PASSWORD = PASSWORD('root');
ERROR 1819 (HY000): Your password does not satisfy the current policy requirements
// ひとまず、適当なパスワードに変更しておく。
mysql> set password for root@localhost=password('passWORD99!');
Query OK, 0 rows affected, 1 warning (0.00 sec)
// 現在のポリシーを確認する。
mysql> SHOW VARIABLES LIKE 'validate_password%';
+--------------------------------------+--------+
| Variable_name | Value |
+--------------------------------------+--------+
| validate_password_check_user_name | OFF |
| validate_password_dictionary_file | |
| validate_password_length | 8 |
| validate_password_mixed_case_count | 1 |
| validate_password_number_count | 1 |
| validate_password_policy | MEDIUM |
| validate_password_special_char_count | 1 |
+--------------------------------------+--------+
7 rows in set (0.00 sec)
// 4文字以上 かつ 文字種別なし のポリシーに変更する。
mysql> SET GLOBAL validate_password_length=4;
Query OK, 0 rows affected (0.00 sec)
mysql> SET GLOBAL validate_password_policy=LOW;
Query OK, 0 rows affected (0.00 sec)
// ポリシーを確認する。
mysql> SHOW VARIABLES LIKE 'validate_password%';
+--------------------------------------+-------+
| Variable_name | Value |
+--------------------------------------+-------+
| validate_password_check_user_name | OFF |
| validate_password_dictionary_file | |
| validate_password_length | 4 |
| validate_password_mixed_case_count | 1 |
| validate_password_number_count | 1 |
| validate_password_policy | LOW |
| validate_password_special_char_count | 1 |
+--------------------------------------+-------+
7 rows in set (0.00 sec)
// パスワードを "root" に変更する。
mysql> set password for root@localhost=password('root');
Query OK, 0 rows affected, 1 warning (0.00 sec)
文字コード
// 確認
mysql> show variables like 'character%';
+--------------------------+----------------------------+
| Variable_name | Value |
+--------------------------+----------------------------+
| character_set_client | utf8 |
| character_set_connection | utf8 |
| character_set_database | latin1 |
| character_set_filesystem | binary |
| character_set_results | utf8 |
| character_set_server | latin1 |
| character_set_system | utf8 |
| character_sets_dir | /usr/share/mysql/charsets/ |
+--------------------------+----------------------------+
8 rows in set (0.00 sec)
- character_set_database latin1
- character_set_server latin1
を utf8 に設定する必要があるので、以下を実行
$ sudo vi /etc/my.cnf
//以下をファイルの末尾に追記
character_set_server=utf8
skip-character-set-client-handshake
デーモンを再起動
$ sudo systemctl restart mysqld
再度ログインして設定を確認する。
$ mysql -u root -p
Enter password: ← "root"
mysql> show variables like 'character%';
+--------------------------+----------------------------+
| Variable_name | Value |
+--------------------------+----------------------------+
| character_set_client | utf8 |
| character_set_connection | utf8 |
| character_set_database | utf8 |
| character_set_filesystem | binary |
| character_set_results | utf8 |
| character_set_server | utf8 |
| character_set_system | utf8 |
| character_sets_dir | /usr/share/mysql/charsets/ |
+--------------------------+----------------------------+
8 rows in set (0.01 sec)
テーブルの作成
// DB を作成する。
mysql> create database Test;
Query OK, 1 row affected (0.00 sec)
// 作成した DB を指定する。
mysql> use Test
Database changed
// テーブル を作成する。
mysql> create table test_table(id int(11),name varchar(255));
Query OK, 0 rows affected (0.01 sec)
// 適当な値を挿入する。
mysql> insert into test_table values(1,'testname');
Query OK, 1 row affected (0.01 sec)
node.js + mysql の連携
// MySQL パッケージをインストールする。
$ npm install mysql --save
app.js を作成する。
const express = require('express');
const app = express();
const mysql = require('mysql');
const connection = mysql.createConnection({
host: 'localhost',
user: 'root',
password: 'root',
database: 'Test',
});
app.get('/', (req, res) => {
connection.query('select * from test_table', (error, results, fields) => {
if (error) throw error;
res.send(results[0]);
});
});
app.listen(8080);
ブラウザで確認
$ node app.js