MySQL 8.0をWindows10へzipでインストール

MySQLを某勉強会で使うので、Windows10 Homeへzip形式でインストールしたときの手順
※ 勝手に予習してる内容なので勉強会内での手順と異なる場合があります

MySQL: https://www.mysql.com/

# zipのダウンロード

2018.11.07時点ではzipのダウンロードは以下の通り

- [DOWNLOADS]
- -> 下部の[Community (GPL) Downloads]
- -> 中央付近にある"MySQL on Windows (Installer & Tools) "でなく、[MySQL Community Server]
- -> 下部のOther Downloadsのとこにある「Windows (x86, 64-bit), ZIP Archive」の[Download]
- -> ログイン画面になるけど、下部の[No thanks, just start my download.]でzipダウンロード開始

![image.png](https://qiita-image-store.s3.amazonaws.com/0/256859/d4e683ae-c601-c33e-b0d6-b3781dd3b830.png)

↓

![image.png](https://qiita-image-store.s3.amazonaws.com/0/256859/363b95f3-dc3a-448e-2acb-c3201d799f15.png)

↓

![image.png](https://qiita-image-store.s3.amazonaws.com/0/256859/1b402408-c2b8-27b6-d627-4c3b3994d3c1.png)

↓

![image.png](https://qiita-image-store.s3.amazonaws.com/0/256859/211fea65-48c5-aa64-5215-6b32677884ca.png)

↓

![image.png](https://qiita-image-store.s3.amazonaws.com/0/256859/6beb019f-e5ec-d992-dc4a-97f9210211f4.png)


# セットアップ

インストーラを使用しないzipインストールのドキュメントはこちら。  
[MySQL :: MySQL 8.0 Reference Manual :: 2.3.5 Installing MySQL on Microsoft Windows Using a noinstall ZIP Archive](https://dev.mysql.com/doc/refman/8.0/en/windows-install-archive.html)

## zipの展開

どこでもいいんだけれど、念のためにスペースや日本語を含まないパスへ。
今回は`C:\local\mysql-8.0.13-winx64`へ。

ドキュメントを見る限りでは`C:\Program Files\MySQL`でもよさそう。

## 設定ファイルの作成

https://dev.mysql.com/doc/refman/8.0/en/windows-create-option-file.html

以下の内容でMySQLを展開した場所に`C:\local\mysql-8.0.13-winx64\my.ini`を作成する

```ini:my.ini
[mysqld]
# set basedir to your installation path
basedir=C:/local/mysql-8.0.13-winx64
# set datadir to the location of your data directory
datadir=C:/local/var/mysqldata
```

`basedir`はMySQLをインストールした場所。
`datadir`はDBのデータを置く場所。指定のパスにディレクトリを作成しておく。

## データディレクトリの初期化

https://dev.mysql.com/doc/refman/8.0/en/windows-initialize-data-directory.html
https://dev.mysql.com/doc/refman/8.0/en/data-directory-initialization-mysqld.html

コマンドプロンプトを起動して、MySQLをインストールしたディレクトリへ移動

```
C:\Users\zaki>cd C:\local\mysql-8.0.13-winx64

C:\local\mysql-8.0.13-winx64>
```

初期化コマンドを実行

```
C:\local\mysql-8.0.13-winx64>bin\mysqld --initialize --console
2018-11-07T13:24:12.714689Z 0 [System] [MY-013169] [Server] C:\local\mysql-8.0.13-winx64\bin\mysqld.exe (mysqld 8.0.13) initializing of server in progress as process 12964
2018-11-07T13:24:19.141134Z 5 [Note] [MY-010454] [Server] A temporary password is generated for root@localhost: ********
2018-11-07T13:24:22.306672Z 0 [System] [MY-013170] [Server] C:\local\mysql-8.0.13-winx64\bin\mysqld.exe (mysqld 8.0.13) initializing of server has completed
```

実行すると、「temporary password～～」のところにパスワードが表示されるのでメモっておく。
また、my.iniファイルの`datadir`に指定したディレクトリにデータファイルが多数作成されるので、ファイルが存在することを確認する。

## MySQLサーバの起動

パスワードの設定が次の手順にあるけど、設定するためにはMySQLを先に起動しないといけない。(ドキュメントちょっと読みにくいなｗ)

https://dev.mysql.com/doc/refman/8.0/en/windows-server-first-start.html

```
C:\local\mysql-8.0.13-winx64> bin\mysqld --console
2018-11-07T13:39:14.928628Z 0 [System] [MY-010116] [Server] C:\local\mysql-8.0.13-winx64\bin\mysqld.exe (mysqld 8.0.13) starting as process 9260
2018-11-07T13:39:17.390529Z 0 [Warning] [MY-010068] [Server] CA certificate ca.pem is self signed.
2018-11-07T13:39:17.487625Z 0 [System] [MY-010931] [Server] C:\local\mysql-8.0.13-winx64\bin\mysqld.exe: ready for connections. Version: '8.0.13'  socket: ''  port: 3306  MySQL Community Server - GPL.
2018-11-07T13:39:17.560250Z 0 [System] [MY-011323] [Server] X Plugin ready for connections. Bind-address: '::' port: 33060
```

![image.png](https://qiita-image-store.s3.amazonaws.com/0/256859/2491a808-69e6-1c78-499c-ee48d523e7bd.png)

起動処理中に、例によってWindowsファイアウォールの警告が表示されると思うのでアクセスを許可する。

`ready for connections`と表示されたら起動OK

## パスワード設定

https://dev.mysql.com/doc/refman/8.0/en/default-privileges.html

MySQLを起動したコマンドプロンプトはMySQL実行中でとりあえず使えないので、もう一つコマンドプロンプトを起動し、ディレクトリを移動する

```
Microsoft Windows [Version 10.0.17134.345]
(c) 2018 Microsoft Corporation. All rights reserved.

C:\Users\zaki>cd C:\local\mysql-8.0.13-winx64

C:\local\mysql-8.0.13-winx64>
```

以下のコマンドを実行
`bin\mysql -u root -p`

するとパスワードを聞いてくるので、初期化時に表示されたパスワードを入力する。

```
C:\local\mysql-8.0.13-winx64>bin\mysql -u root -p
Enter password: ************
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 8
Server version: 8.0.13

Copyright (c) 2000, 2018, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

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

mysql>
```

プロンプトが`mysql>`に変わったら、次のコマンドを実行してパスワードを設定
(この実行例だと、パスワードは`root-password`になる。思いっきり画面に表示されるのでショルダーハックに注意)

```
mysql> ALTER USER 'root'@'localhost' IDENTIFIED BY 'root-password';
Query OK, 0 rows affected (0.04 sec)

mysql>
```

コンソールを抜ける

```
mysql> exit
Bye
```

※ これは操作を終わるだけ。MySQLサーバは実行したまま。

## MySQLサーバの停止

MySQLを起動しっぱなしのコマンドプロンプトで、`Ctrl-C`をタイプする

```
^C
C:\local\mysql-8.0.13-winx64>2018-11-07T13:56:45.123815Z 0 [System] [MY-010910] [Server] C:\local\mysql-8.0.13-winx64\bin\mysqld.exe: Shutdown complete (mysqld 8.0.13)  MySQL Community Server - GPL.

C:\local\mysql-8.0.13-winx64>
```

すると停止する

## PATHの追加

今のままだと、mysqlのコマンド名だけで実行できないので、環境変数を追加する

PCを右クリックしてプロパティを起動
![image.png](https://qiita-image-store.s3.amazonaws.com/0/256859/a438f365-de34-e75a-6fa8-0fb51ce877fd.png)

システムの詳細設定
![image.png](https://qiita-image-store.s3.amazonaws.com/0/256859/da4d217a-648c-2333-a6ba-4ad369bef363.png)

[環境変数(N)]ボタンを押下
![image.png](https://qiita-image-store.s3.amazonaws.com/0/256859/fe126c27-e41a-a3db-f428-11a841addd5d.png)

「システム環境変数」の「Path」の行を選択して[編集(I)]ボタンを押下
![image.png](https://qiita-image-store.s3.amazonaws.com/0/256859/46cfc1ac-48e8-53b0-d5d2-5cc0400b5159.png)

[新規(N)]ボタン押下
![image.png](https://qiita-image-store.s3.amazonaws.com/0/256859/5aa38775-5902-5657-34bc-63c961440687.png)

すると最後の行へ設定のテキスト入力状態になるので、MySQLをインストールしたディレクトリの下にある`bin`ディレクトリのパスを入力する。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/256859/a2de4967-9e1e-0802-6c7f-64e5e6ec0771.png)
![image.png](https://qiita-image-store.s3.amazonaws.com/0/256859/4e9c145e-252c-b1fc-ed90-479a39080fc1.png)

あとはOKで画面を閉じていく。

これ以降新しく起動したコマンドプロンプトからは、パスの指定不要でMySQLのコマンドが使用できるようになる。

```
C:\Users\zaki>mysqld --console
2018-11-07T14:12:29.458091Z 0 [System] [MY-010116] [Server] C:\local\mysql-8.0.13-winx64\bin\mysqld.exe (mysqld 8.0.13) starting as process 9612
2018-11-07T14:12:30.300697Z 0 [System] [MY-010229] [Server] Starting crash recovery...
2018-11-07T14:12:30.339499Z 0 [System] [MY-010232] [Server] Crash recovery finished.
2018-11-07T14:12:31.448031Z 0 [Warning] [MY-010068] [Server] CA certificate ca.pem is self signed.
2018-11-07T14:12:31.516241Z 0 [System] [MY-010931] [Server] C:\local\mysql-8.0.13-winx64\bin\mysqld.exe: ready for connections. Version: '8.0.13'  socket: ''  port: 3306  MySQL Community Server - GPL.
2018-11-07T14:12:31.536121Z 0 [System] [MY-011323] [Server] X Plugin ready for connections. Bind-address: '::' port: 33060

```

## タイムゾーンの設定

※ あれ？この設定不要？ 設定してもmysqld --consoleの時刻はUTCのままだし、変更前でも`select curtime();`の値はJSTになってる…いちおう設定したので手順を残しておく

https://dev.mysql.com/doc/refman/8.0/en/time-zone-support.html
デフォルトだとUTCになっている？ので日本時間と9時間ズレてるので、タイムゾーン設定する。

https://dev.mysql.com/downloads/timezones.html
まずタイムゾーンファイルをダウンロードする(ここからっ！？)

![image.png](https://qiita-image-store.s3.amazonaws.com/0/256859/9221f45f-0c6c-5c9b-eb17-a6fd3dd00562.png)

ここの"5.7+"の"POSIX standard"のzipをダウンロードする。(他のは試してない)
zipの中は`timezone_posix.sql`ファイル(テキストファイル)が一つ含まれているだけなので、どこでもいいので取り出す(Downloadsフォルダのままでよい)

まずMySQLサーバが起動していなければ起動する

```
C:\Users\zaki>mysqld --console
```

次に別のコマンドプロンプトで`timezone_posix.sql`があるディレクトリへ移動する。

```
C:\Users\zaki>cd Downloads

C:\Users\zaki\Downloads>
```

次のコマンドを実行する
`mysql -u root -p mysql < ダウンロードしたSQLファイル`

```
C:\Users\zaki\Downloads>mysql -u root -p mysql < timezone_posix.sql
Enter password: ******** (設定済みのrootパスワード)

C:\Users\zaki\Downloads>
```

設定ファイルに以下タイムゾーンの設定を追加

```ini
# timezone
default-time-zone = 'Asia/Tokyo'
```

MySQLを再起動する

```
C:\Users\zaki>mysqld --console
2018-11-07T14:59:57.522997Z 0 [System] [MY-010116] [Server] C:\local\mysql-8.0.13-winx64\bin\mysqld.exe (mysqld 8.0.13) starting as process 12396
2018-11-07T14:59:59.383907Z 0 [Warning] [MY-010068] [Server] CA certificate ca.pem is self signed.
2018-11-07T14:59:59.452232Z 0 [System] [MY-010931] [Server] C:\local\mysql-8.0.13-winx64\bin\mysqld.exe: ready for connections. Version: '8.0.13'  socket: ''  port: 3306  MySQL Community Server - GPL.
2018-11-07T14:59:59.481844Z 0 [System] [MY-011323] [Server] X Plugin ready for connections. Bind-address: '::' port: 33060
```

あれ？時刻はUTCのままだ。。


# コマンドラインツール

`mysql`コマンドでサーバへ接続してコマンドラインでSQLをたたく。
`-p`がないとパスワードを聞かれないため認証エラーになる。

```
C:\Users\zaki>mysql -u root -p
Enter password: ********
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 11
Server version: 8.0.13 MySQL Community Server - GPL

Copyright (c) 2000, 2018, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

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

mysql>
```

終了するには`quit`

```
mysql> quit
Bye

C:\Users\zaki>
```