【MySQL】ステータス確認・変更のためのコマンド集

MySQLのステータス確認のためのコマンド集です。
時々使う & すぐ使えるようにしておきたいものをまとめました。
※一部ステータスでないものもありますがご了承を。

## 環境
- OS：Windows10
- MySQL：5.7
 
## コマンド一覧
### 1. テーブルステータスの確認
#### (1) SHOW TABLE STATUS

```sql
> SHOW TABLE STATUS FROM データベース名;
```
ソートや特定のカラムのみの抽出といったカスタマイズは不可。

#### (2) INFORMATION_SCHEMA.TABLES

```sql
> SELECT * FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA = 'データベース名';
```

通常のSQLと同様、特定のカラムだけの切り出しやソートも可能。
データベース「hoge」のすべてのテーブルについて、テーブル名、エンジン、作成時刻を作成時刻の新しいもの順に表示する場合は以下の通り。

```sql:sample
> SELECT TABLE_NAME, ENGINE, CREATE_TIME FROM INFORMATION_SCHEMA.TABLES WHERE table_schema = 'hoge' ORDER BY CREATE_TIME DESC;
```

### 2. DDLの取得

#### (1) SHOW CREATE TABLE
```sql
> SHOW CREATE TABLE テーブル名;
```
特定の1テーブルのDDLを取得する場合に使用。

#### (2) mysqldump
```sql
> mysqldump -u ユーザー名 -h ホスト名 -P ポート番号 データベース名 -p
```
指定したデータベース内の全てのDDL（VIEWも含む）を取得する際に使用。
上記実行後にパスワードを聞かれるので入力。

DDLをファイル出力する場合は以下のとおり。

```sql
> mysqldump -u ユーザー名 -h ホスト名 -P ポート番号 データベース名 -p > ファイルパス
```

### 3. トランザクション
#### (1) SHOW PROCESSLIST
```sql
> SHOW PROCESSLIST;
``` 
実行中のスレッドの確認に使用。

#### (2) KILL
```sql
> KILL 対象のID
```
トランザクションを強制終了させる。
SHOW PROCESSLIST; で表示されたId列の値を指定。

#### (3) tx_isolation
```sql
> SELECT @@GLOBAL.tx_isolation, @@tx_isolation;
```
トランザクション分離レベル確認用。
前者がグローバル、後者がセッション。
MySQLのデフォルトは両者とも、REPEATABLE READ。

それぞれ以下のコマンドで変更可能。

```sql
> SET GLOBAL tx_isolation='トランザクション分離レベル';
> SET SESSION tx_isolation='トランザクション分離レベル';
```

### 4. 文字コードの確認

#### (1) SHOW VARIABLES

```sql
> SHOW VARIABLES LIKE 'char%';
```
SHOW VARIABLES; でMySQLのシステム変数の値が表示できる。
LIKEで条件を絞る。

### 5. SQLのリソース使用状況の確認
#### (1) SHOW PROFILES
```sql
> SHOW PROFILES;
```
Query列で実行されたSQLを、Duration列で経過時間を確認できる。
事前準備として、profiling セッション変数を1もしくはONにしておく。

```sql:事前準備
> SET profiling = 'ON';
```

### 6. クエリログの確認
#### (1) 一般クエリログ
```sql:
> SELECT * FROM mysql.general_log;
```
実行されたクエリの履歴全てを確認できる。
general_logテーブルにログを出力するための事前準備は以下の通り。

```sql:事前準備
> SET global general_log = 'ON';
> SET global log_output = 'TABLE';
```

#### (2) スロークエリログ
```sql:
> SELECT * FROM mysql.slow_log;
```
実行に時間のかかったクエリを確認できる。
slow_query_logテーブルにログを出力するための事前準備は以下の通り（log_outputの設定は(1)と共通）。

```sql
> SET global slow_query_log = 'ON';
> SET global log_output = 'TABLE';
```

## 変更履歴

- 2020/07/27：「2. DDLの取得」の「-d」を削除（不要のため）

## 参考

#### 1. テーブルステータスの確認
- [13.7.5.10 SHOW CREATE TABLE Statement | MySQL 5.7 Reference Manual ](https://dev.mysql.com/doc/refman/5.7/en/show-create-table.html)
- [Chapter 24 INFORMATION_SCHEMA Tables | MySQL 5.7 Reference Manual](https://dev.mysql.com/doc/refman/5.7/en/information-schema.html)

#### 2. DDLの取得
- [【MySQL】既に作成されているテーブルからCREATE文を取得する | あがノート](https://aga-note.com/mysql-show-create/)
- [MySQLで任意DBの全table create statementを出力する方法 | ゲンゾウ用ポストイット](https://genzouw.com/entry/2019/02/22/080511/951/)
- [4.5.4 mysqldump — A Database Backup Program | MySQL 5.7 Reference Manual](https://dev.mysql.com/doc/refman/5.7/en/mysqldump.html)

#### 3. トランザクション
- [13.7.5.29 SHOW PROCESSLIST Statement | MySQL 5.7 Reference Manual](https://dev.mysql.com/doc/refman/5.7/en/show-processlist.html)
- [13.7.6.4 KILL Statemen | MySQL 5.7 Reference Manual](https://dev.mysql.com/doc/refman/5.7/en/show-processlist.html)
- [13.3.6 SET TRANSACTION Statement | https://dev.mysql.com/doc/refman/5.7/en/set-transaction.html](https://dev.mysql.com/doc/refman/5.7/en/set-transaction.html)
- [第47回　トランザクション分離レベルを変更する | gihyo.jp](https://gihyo.jp/dev/serial/01/mysql-road-construction-news/0047)

#### 4. 文字コードの確認
- [13.7.5.39 SHOW VARIABLES Statement | MySQL 5.7 Reference Manual](https://dev.mysql.com/doc/refman/5.7/en/show-variables.html)

#### 5. SQLのリソース使用状況の確認
- [プロファイリングで快適MySQLチューニング生活 | 漢のコンピュータ道](http://nippondanji.blogspot.com/2009/02/mysql.html)
- [13.7.5.30 SHOW PROFILE Statement | MySQL 5.7 Reference Manual](https://dev.mysql.com/doc/refman/5.7/en/show-profile.html)

#### 6. クエリログの確認
- [MySQLにおける４つのログファイルの設定と確認方法 | ProEngineer](https://proengineer.internous.co.jp/content/columnfeature/7002#section200)
- [5.4.3 The General Query Log | MySQL 5.7 Reference Manual ](https://dev.mysql.com/doc/refman/5.7/en/query-log.html)
- [5.4.5 The Slow Query Log | MySQL 5.7 Reference Manual](https://dev.mysql.com/doc/refman/5.7/en/slow-query-log.html)