MySQL Community Server 5.6 - Installing on Windows 7

# 概要

Windows7に開発・検証目的用にMySQL Community Server 5.6をインストールし、初歩的な設定を行うまでの作業メモです。
MySQLはZIP Archiveを使用します。

**環境**

この記事の内容は下記のバージョンで動作確認を行いました。

* Windows7 (64bit)
* MySQL Community Server 5.6.25
 
**参考サイト**

下記のサイトの内容を参考にしました。

* [MySQL] (http://dev.mysql.com/)
* [MySQL 5.6 Reference Manual] (http://dev.mysql.com/doc/refman/5.6/en/index.html)
* [MySQLのmy.cnfファイルサンプル] (http://time-complexity.blogspot.jp/2013/10/mysqlmycnf.html)
* [MySQL5.6で今までのVerでは問題無かったSQL文がエラーになった場合の対処法] (http://oranie.hatenablog.com/entry/20130402/1364906656)


## インストール

**アーカイブファイルのダウンロード**

ダウンロードページよりアーカイブファイルをダウンロードします。
今回ダウンロードしたファイルは`mysql-5.6.25-winx64.zip`です。

**アーカイブファイルの展開**

アーカイブファイルを適当な場所(`D:/dev/mysql-5.6.25-winx64`にしました)へ展開します。
また、次のディレクトリを作成します。

* `D:/dev/mysql-5.6.25-winx64/logs`
* `D:/dev/mysql-5.6.25-winx64/tmp`

**my.iniの準備**

`D:/dev/mysql-5.6.25-winx64/my-default.ini`というテンプレートファイルを`my.ini`へリネームし、下記のように修正します。

```diff:my.ini
# For advice on how to change settings please see
# http://dev.mysql.com/doc/refman/5.6/en/server-configuration-defaults.html
# *** DO NOT EDIT THIS FILE. It's a template which will be copied to the
# *** default location during install, and will be replaced if you
# *** upgrade to a newer version of MySQL.

[mysqld]

# Remove leading # and set to the amount of RAM for the most important data
# cache in MySQL. Start at 70% of total RAM for dedicated server, else 10%.
- # innodb_buffer_pool_size = 128M
+ innodb_buffer_pool_size = 64M
+ innodb_file_per_table = 1
+ innodb-status-output = 1
+ innodb-status-output-locks = 1
+ 
+ default-storage-engine = innodb

# Remove leading # to turn on a very important data integrity option: logging
# changes to the binary log between backups.
- # log_bin
+ log_bin = mysql-bin

# These are commonly set, remove the # and set as required.
- # basedir = .....
- # datadir = .....
- # port = .....
- # server_id = .....
+ basedir = "D:/dev/mysql-5.6.25-winx64"
+ datadir = "D:/dev/mysql-5.6.25-winx64/data"
+ tmpdir  = "D:/dev/mysql-5.6.25-winx64/tmp"
+ port = 3306
+ server_id = 1
+ 
+ character-set-server = utf8
+ collation-server = utf8_general_ci
+ 
+ transaction-isolation = REPEATABLE-READ
+ 
+ # Logging
+ log_output = FILE
+ log_warnings = 1
+ log_error = "D:/dev/mysql-5.6.25-winx64/logs/mysqld_error.log
+ general_log = 1
+ general_log_file = "D:/dev/mysql-5.6.25-winx64/logs/general_query_all.log"
+ log-slow-admin-statements = 1
+ log-queries-not-using-indexes = 1
+ slow_query_log = 1
+ long_query_time = 1
+ slow_query_log_file = "D:/dev/mysql-5.6.25-winx64/logs/slow_query.log"
+ 

# Remove leading # to set options mainly useful for reporting servers.
# The server defaults are faster for transactions and fast SELECTs.
# Adjust sizes as needed, experiment to find the optimal values.
# join_buffer_size = 128M
# sort_buffer_size = 2M
# read_rnd_buffer_size = 2M 

sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES 
+ 
+ #autocommit = 0
+ explicit_defaults_for_timestamp = true
+ 
+ [mysql]
+ default-character-set = utf8
+ show-warnings
```

**mysql serverの起動と接続**

起動

```bat:startup
> D:\dev\mysql-5.6.25-winx64\bin\mysqld.exe --defaults-file=D:\dev\mysql-5.6.25-winx64\my.ini --console
```

rootユーザーでログイン

```bat:login
> D:\dev\mysql-5.6.25-winx64\bin\mysql.exe -u root -p
```

停止

```bat:shutdown
> D:\dev\mysql-5.6.25-winx64\bin\mysqladmin.exe -u root -p shutdown
```

mysqldのオプションの確認と設定値の出力
(結果が長いのでtextファイルに出力しています。)

```bat:option
> D:\dev\mysql-5.6.25-winx64\bin\mysqld.exe --help --verbose > option_dump.txt
```

## インストール後の設定

**rootユーザーのパスワード設定**

rootユーザーでログイン

```bat:login
> D:\dev\mysql-5.6.25-winx64\bin\mysql.exe -u root -p
```

rootユーザーのパスワードを変更(パスワードは伏せています)

```sql:change_password
mysql> set password for 'root'@'localhost' = password('******');
```

**不要なユーザーの削除**

使用しないユーザーは削除します。

```sql:drop_user
mysql> drop user ''@'localhost';
mysql> drop user 'root'@'127.0.0.1'
mysql> drop user 'root'@'::1'
```

## コマンド実行サンプル

### データベース

データベースの一覧

```sql:show
mysql> show databases;
```

データベースの作成

```sql:create_database
mysql> create database if not exists sample_db
default character set utf8
default collate utf8_general_ci;
```
[Manual - CREATE DATABASE Syntax] (http://dev.mysql.com/doc/refman/5.6/en/create-database.html)

データベースの削除

```sql:drop_database
mysql> drop database sample_db;
```

カレントデータベースの変更

```sql:use
mysql> use sample_db
```

### INNODB

```sql
mysql> show engine innodb status;
```

```sql:variables
mysql> show variables like "innodb%";
```

### ユーザーの作成と権限の付与

ユーザーの確認

```sql
mysql> select user,host from mysql.user;
```

ユーザーの作成

```sql:create_user
mysql> create user 'test_user'@'localhost' identified by 'test_user';
```

[Manual - CREATE USER Syntax] (http://dev.mysql.com/doc/refman/5.6/en/create-user.html)

ユーザーの削除

```sql:drop_user
mysql> drop user 'test_user'@'localhost';
```

ユーザーへ権限の付与

```sql:grant
mysql> grant all on sample_db.* to 'test_user'@'localhost';
```

[Manual - GRANT Syntax] (http://dev.mysql.com/doc/refman/5.6/en/grant.html)

ユーザーの権限を取り消す

```sql:revoke
mysql> revoke insert on sample_db.* from 'test_user'@'localhost'
```

ユーザーの権限をすべて取り消す

```sql:revoke
mysql> revoke all privileges, grant option from 'test_user'@'localhost';
```

[Manual - REVOKE Syntax] (http://dev.mysql.com/doc/refman/5.6/en/revoke.html)

ユーザーの権限を確認

```sql:grants
mysql> show grants for 'test_user'@'localhost'
```

現在接続しているユーザーの権限を確認

```sql:grants
mysql> show grants;
```

[Manual - SHOW GRANTS Syntax] (http://dev.mysql.com/doc/refman/5.6/en/show-grants.html)

### テーブル

テーブルの一覧

```sql:tables
mysql> show tables;
```

テーブルの作成

```sql:create_table
mysql> create table if not exists sample_tbl (
  id int(11) not null auto_increment,
  name varchar(20),
  primary key(id)
);
```

[Manual - CREATE TABLE Syntax] (http://dev.mysql.com/doc/refman/5.6/en/create-table.html)

テーブル定義の確認

```sql:desc
mysql> desc sample_tbl;
```

カラムの追加

```sql:alter_table
mysql> alter table sample_tbl add column address varchar(256);
```

カラムの削除

```sql:alter_table
mysql> alter table sample_tbl drop column address;
```

テーブルの削除

```sql:drop_table
mysql> drop table sample_tbl;
```

### インデックス

インデックスの一覧

```sql:show_index
mysql> show index from sample_tbl;
```

インデックスの作成

```sql:create_index
mysql> create index sample_tbl_idx01 on sample_tbl(address(64) asc);
```

[Manual - CREATE INDEX Syntax] (http://dev.mysql.com/doc/refman/5.6/en/create-index.html)

インデックスの削除

```sql:drop_index
mysql> drop index sample_tbl_idx01 on sample_tbl;
```

### キャラクターセット

利用できるキャラクターセットの一覧

```sql:character_set
mysql> show character set;
```

一部抜粋です。

|Charset   |Description                  |                     |
|:---------|:----------------------------+---------------------|
|`cp850`   | DOS West European           |                     |
|`latin1`  | cp1252 West European        |                     |
|`latin2`  | ISO 8859-2 Central European |                     |
|`ascii`   | US ASCII                    |                     |
|`ujis`    | EUC-JP Japanese             |                     |
|`sjis`    | Shift-JIS Japanese          |                     |
|`greek`   | ISO 8859-7 Greek            |                     |
|`cp1250`  | Windows Central European    |                     |
|`latin5`  | ISO 8859-9 Turkish          |                     |
|`utf8`    | UTF-8 Unicode               |                     |
|`ucs2`    | UCS-2 Unicode               |                     |
|`cp852`   | DOS Central European        |                     |
|`latin7`  | ISO 8859-13 Baltic          |                     |
|`utf8mb4` | UTF-8 Unicode               |                     |
|`utf16`   | UTF-16 Unicode              |                     |
|`utf16le` | UTF-16LE Unicode            |                     |
|`cp1256`  | Windows Arabic              |                     |
|`cp1257`  | Windows Baltic              |                     |
|`utf32`   | UTF-32 Unicode              |                     |
|`cp932`   | SJIS for Windows Japanese   |                     |
|`eucjpms` | UJIS for Windows Japanese   |                     |


```sql:variables
mysql> 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       | D:\dev\mysql-5.6.25-winx64\share\charsets\ |
+--------------------------+--------------------------------------------+
8 rows in set (0.00 sec)
```


### その他

#### 環境変数

```sql:variables
mysql> show variables;
```

```sql:variables
mysql> show variables like "slow%";
+---------------------+------------------------------------------------+
| Variable_name       | Value                                          |
+---------------------+------------------------------------------------+
| slow_launch_time    | 2                                              |
| slow_query_log      | ON                                             |
| slow_query_log_file | D:/dev/mysql-5.6.25-winx64/logs/slow_query.log |
+---------------------+------------------------------------------------+
3 rows in set (0.00 sec)
```

```sql:variables
mysql> select @@slow_query_log_file;
+------------------------------------------------+
| @@slow_query_log_file                          |
+------------------------------------------------+
| D:/dev/mysql-5.6.25-winx64/logs/slow_query.log |
+------------------------------------------------+
1 row in set (0.00 sec)
```


#### status
```sql
mysql> status
```

#### help

```sql
mysql> help
```