# データベース周り
## mysqlクライアント
### つなぎ方
```
mysql -h HOSTNAME -u USERNAME -P 3306 -p
```
### データベース一覧
```
mysql> show schemas;
+--------------------+
| Database |
+--------------------+
| information_schema |
| here_songs |
+--------------------+
```
### テーブル一覧
```
mysql> show tables;
+----------------------+
| Tables_in_here_songs |
+----------------------+
| credentials |
| schema_migrations |
| sessions |
| users |
| users_sessions |
+----------------------+
```
### テーブルのスキーマをしりたい時
```
mysql< desc TABLE_NAME
+-----------+------------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+-----------+------------------+------+-----+---------+----------------+
| id | int(10) unsigned | NO | PRI | NULL | auto_increment |
| title | varchar(128) | NO | | NULL | |
| public_fg | tinyint(1) | NO | | NULL | |
| closed_fg | tinyint(1) | NO | | NULL | |
| price | int(10) unsigned | NO | | NULL | |
+-----------+------------------+------+-----+---------+----------------+
```
### インデックスを確認する
```
show index from TABLE_NAME;
```
## mysqldump
本番DBを弄ってしくじったときにしっかり復旧できるようにしよう
[mysqldumpまとめ](https://qiita.com/PlanetMeron/items/3a41e14607a65bc9b60c)
### バックアップ
```
mysqldump -p -h HOSTNAME -u USERNAME DB_NAME > export.sql
```
もし、`Can't exxecute`的なエラーがでて、`statistics`という文字があれば、`--column-statistics=0`のオプションを付けると良さげ
### 全部バックアップしたいとき
```
mysqldump -p -h HOSTNAME -u USERNAME -A -n > export.sql
```
### 復元
```
mysql -p -h HOST_NAME -u USER_NAME DB_NAME < export.sql
```
## スロークエリ
スロークエリを使うことで、遅いクエリを発見することができる。
おそらくインターンでも使うでしょう。
### 設定方法
`my.conf` を書き換える。
`my.conf`は大体この辺にあるらしい
- `/etc/my.cnf`
- `/etc/mysql/my.cnf`
- `/usr/local/etc/my.cnf`
- `~/.my.cnf`
```
[mysqld]
slow_query_log=ON
long_query_time = 0
slow_query_log_file = /tmp/mysql-slow.sql
```
long_query_time=0にすることでとりえあず全部のログを出す。
その後再起動
```
sudo service mysqld restart
```
反映されている以下確認する
```
mysql> show variables like 'slow%';
mysqk> show variables like 'long%';
```
### ログを解析する
生ログを解析するのはしんどいので、人間にもわかるようにしてくれる[pt-query-digest](https://www.percona.com/doc/percona-toolkit/2.2/pt-query-digest.html)を使う。
#### インストール
```
wget https://github.com/percona/percona-toolkit/archive/3.0.5-test.tar.gz
tar zxvf 3.0.5-test.tar.gz
./percona-toolkit-3.0.5-test/bin/pt-query-digest --version
sudo mv ./percona-toolkit-3.0.5-test/bin/pt-query-digest /usr/local/bin/pt-query-digest
```
#### 使い方
```
pt-query-digest /tmp/mysql-slow.sql
```
[pt-query-digestを使って遅いクエリーを発見する](https://thinkit.co.jp/article/9617)
## my.conf
### dockerのmysqlのmy.confをいじりたいとき
[Dockerの公式MySQLイメージの使い方を徹底的に解説するよ](http://dqn.sakusakutto.jp/2015/10/docker_mysqld_tutorial.html)
### 設定項目
#### コネクション数 (OS側の設定にも治す)
```
[mysqld]
max_connections=10000
```
[maxconnection を増やす](https://gist.github.com/south37/d4a5a8158f49e067237c17d13ecab12a#maxconnection-%E3%82%92%E5%A2%97%E3%82%84%E3%81%99)
#### 文字コード
```
[mysqld]
character-set-server=utf8mb4
[client]
default-character-set=utf8mb4
```
**確認**
```
show variables like "chara%";
```