# データベース周り ## 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%"; ```