CygwinでMySQL(MariaDB)

Cygwin使ってMySQL環境を作ったのでメモ。

#インストール
・Cygwinをインストールした時に使ったsetup.exeを起動。
・次へ次へとSelect Packagesまで遷移。
・以下の条件で検索
　・view：Category
　・search：mysql
・Databaseから以下を選択し次へ次へでインストール。
　・mysql
　・mysql-common
　・mysql-server


#初期化
Cygwinを起動して、以下のコマンド実行。
MySQLデータディレクトリを初期化。

```bash
$ mysql_install_db
```

以下のようなメッセージが出力されたら成功。

```bash
To start mysqld at boot time you have to copy
support-files/mysql.server to the right place for your system

PLEASE REMEMBER TO SET A PASSWORD FOR THE MariaDB root USER !
To do so, start the server, then issue the following commands:

'/usr/bin/mysqladmin' -u root password 'new-password'
'/usr/bin/mysqladmin' -u root -h MainPC password 'new-password'

Alternatively you can run:
'/usr/bin/mysql_secure_installation'

which will also give you the option of removing the test
databases and anonymous user created by default.  This is
strongly recommended for production servers.

See the MariaDB Knowledgebase at http://mariadb.com/kb or the
MySQL manual for more instructions.

You can start the MariaDB daemon with:
cd '/usr' ; /usr/bin/mysqld_safe --datadir='/var/lib/mysql'

You can test the MariaDB daemon with mysql-test-run.pl
cd '/usr/mysql-test' ; perl mysql-test-run.pl

Please report any problems at http://mariadb.org/jira

The latest information about MariaDB is available at http://mariadb.org/.
You can find additional information about the MySQL part at:
http://dev.mysql.com
Consider joining MariaDB's strong and vibrant community:
https://mariadb.org/get-involved/
```

#起動・停止
##・起動
上記初期化時のメッセージにある通り--datadirを指定して起動。
パスが通っているので/usr/bin/なしでも起動可能。
「&」を指定してバックグラウンドで起動

```bash
$ mysqld_safe --datadir='/var/lib/mysql' &
180211 15:08:26 mysqld_safe Logging to '/var/lib/mysql/MainPC.err'.
180211 15:08:29 mysqld_safe Starting mysqld daemon with databases from /var/lib/mysql
$ mysql -u root    # 初期はパスワードなし
Welcome to the MariaDB monitor.  Commands end with ; or \g.
Your MariaDB connection id is 8
Server version: 10.1.30-MariaDB Source distribution

Copyright (c) 2000, 2017, Oracle, MariaDB Corporation Ab and others.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

MariaDB [(none)]>
MariaDB [(none)]> exit
```
※--datadirのデフォルトは/var/lib/mysqlのため、指定なしでもOK
バージョンが10.1.30-MariaDBなのでちょっと古い（Release date: 22 Dec 2017）

##・停止
killでPIDを指定してmysqlを停止。
他の方法もありそう。

```bash
$ ps -ef
     UID     PID    PPID  TTY        STIME COMMAND
      ka    5808    2668 pty0     21:48:00 /usr/bin/bash
      ka    6576    5224 pty0     21:51:19 /usr/sbin/mysqld
      ka    2668       1 ?        21:48:00 /usr/bin/mintty
      ka    5224    5808 pty0     21:51:14 /usr/bin/sh
      ka    4196    5808 pty0     21:51:42 /usr/bin/ps
$ kill 6576
```

#rootパスワード設定
rootへのパスワードを設定は、
初期化時のメッセージに従って以下を実施。
※DBは起動していること

```bash
$ mysqladmin -u root password 'password'
$ mysql -u root -p
Enter password:
Welcome to the MariaDB monitor.  Commands end with ; or \g.
Your MariaDB connection id is 8
Server version: 10.1.30-MariaDB Source distribution

Copyright (c) 2000, 2017, Oracle, MariaDB Corporation Ab and others.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

MariaDB [(none)]> exit
```

#設定ファイルのテンプレートコピー。
今回はテスト環境で自分しか使わないため、ユーザホームにコピー。

```bash
$ cp /usr/share/mysql/my-huge.cnf  ~/.my.cnf
```
コピー元は複数あって環境によって使い分けるようです。
各設定の説明からしてDBに使用できるメモリとかで使い分けるっぽい(たぶん)
今回は複雑なクエリを発行する予定はないし、メモリも余裕あるしでmy-huge.cnfを使いました。

各テンプレートの使い分け
- my-small.cnf：メモリが少ない(64M以下)、DBの使用が少ないシステム用
- my-medium.cnf：メモリが少ない(32M ~ 64M)、DBが重要な役割のあるシステム用
- my-large.cnf：メモリが512Mある大規模システム用
- my-huge.cnf：メモリが1G~2Gある大規模システム用
- my-innodb-heavy-4G.cnf：メモリが4GBある。InnoDBのテーブルを使用し、少ない接続で複雑なクエリを実行するシステム用。



#文字化け対策
このままだと日本語使った時に文字化けしちゃうので設定変更する。

##現在の設定確認

```bash
MariaDB [(none)]> show variables like 'char%';
+--------------------------+----------------------------+
| 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)
```
```bash
MariaDB [(none)]> status
--------------
mysql  Ver 15.1 Distrib 10.1.30-MariaDB, for CYGWIN (x86_64) using  EditLine wrapper

Connection id:          4
Current database:
Current user:           root@localhost
SSL:                    Not in use
Current pager:          stdout
Using outfile:          ''
Using delimiter:        ;
Server:                 MariaDB
Server version:         10.1.30-MariaDB Source distribution
Protocol version:       10
Connection:             Localhost via UNIX socket
Server characterset:    latin1
Db     characterset:    latin1
Client characterset:    utf8
Conn.  characterset:    utf8
UNIX socket:            /var/run/mysql.sock
Uptime:                 8 min 28 sec

Threads: 1  Questions: 8  Slow queries: 0  Opens: 17  Flush tables: 1  Open tables: 11  Queries per second avg: 0.015
--------------

```
ServerとDBがlatin1なのでこれを変更する。



##設定変更
コピーしてきた~/.my.cnfを開いて以下を[mysqld]に以下を追加する。

```bash
[mysqld]
character-set-server = utf8
```

追加後、mysqlを停止し再度起動する。

##設定確認
```bash
MariaDB [(none)]> show variables like 'char%';
+--------------------------+----------------------------+
| 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.00 sec)

MariaDB [(none)]> status
--------------
mysql  Ver 15.1 Distrib 10.1.30-MariaDB, for CYGWIN (x86_64) using  EditLine wrapper

Connection id:          3
Current database:
Current user:           root@localhost
SSL:                    Not in use
Current pager:          stdout
Using outfile:          ''
Using delimiter:        ;
Server:                 MariaDB
Server version:         10.1.30-MariaDB Source distribution
Protocol version:       10
Connection:             Localhost via UNIX socket
Server characterset:    utf8
Db     characterset:    utf8
Client characterset:    utf8
Conn.  characterset:    utf8
UNIX socket:            /var/run/mysql.sock
Uptime:                 16 sec

Threads: 1  Questions: 5  Slow queries: 0  Opens: 17  Flush tables: 1  Open tables: 11  Queries per second avg: 0.312
--------------

```

#コマンドライン(対話モード)で日本語消える問題
自分の環境だと日本語が打てなくてなんじゃこりゃーってなったので調べてみました。

どうやらmysql(mariadb)で使用するreadlineというライブラリによるものらしいです。
解決策としてはconfigure時に、readlineのオプションを追加するのが有用そうです。

参考（ちょっと古いですが）
　mysqlクライアントCUIコマンドで日本語入力が出来ない場合
　http://d.hatena.ne.jp/ringmaster/20080616/1213603123

DBへのSQL発行はA5:SQL Mk-2というツールを使うし、
そっちでは日本語が使えるしってことで放置！

#A5A5:SQL Mk-2について(知らない人用)
引用
> A5:SQL Mk-2は複雑化するデータベース開発を支援するために開発されたフリーのSQL開発ツールです。

SQLの発行以外にもテーブル変更前後の差分を取れたりER図を作成できたりと便利です。

A5:SQL Mk-2 フリーの汎用SQL開発ツール/ER図ツール
https://a5m2.mmatsubara.com/

使い方については、A5:SQL Mk-2オンラインヘルプをどうぞ
http://www.wind.sannet.ne.jp/m_matsu/developer/a5m2/help2.9/

#余談
MySQLの「My」は「私」じゃないらしいですね。
製作者の娘さんの名前らしいです。
んで、MariaDBのMariaも娘さんの名前らしいです。

知らなかったぁ「私」だと思っていた。。

参考
MySQLと互換性をもつ『妹分』、MariaDBとは？
https://news.goo.ne.jp/article/enterprisezine/business/enterprisezine_4220.html

#おわり
コマンドラインで日本語消える問題さえ気にしなければサクッとできちゃいました。

気が向いたらconfigureで、
コマンドラインで日本語消える問題が解決するか試そうかと思います。
configureってことはソースからのインストールでいいのかな？

という訳で、今回は以上です。


#追記：/usr/share/mysql/my-*.cnfがない問題
気が向いたからconfigureをやってみたという話ではなくCygwinでの話でもなく、
CentOS7にインストールしようとした時の話ですが、
/usr/share/mysql/にサンプル設定ファイルがなくなっていて戸惑ったのでメモします。

同じように困って調べて記事にしてくださっている先人の方がいました(感謝)。
http://kwnflog.hatenablog.com/entry/2018/07/19/mariadb-template-cnf


> MariaDB v10.3.2以降には、それまで設定例として含まれていたmy-small.cnfなどのテンプレファイルは無くなった。
> 基本はデフォルト値で導入して明確に実現したい要件があればconfファイルに書き込む。

というわけで設定をコピーせずに設定変更すればよいようです。

以下設定例

```
設定をバックアップ
$ cp -p /etc/my.cnf.d/server.cnf /etc/my.cnf.d/server.cnf.org
設定ファイルを編集する。
$ sudo vi /etc/my.cnf.d/server.cnf
```

編集内容：`character-set-server=utf8`を`[server]`または`[mysqld]`に追加する。

```
DBを再起動
$ sudo systemctl restart mariadb
```

以上です。