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