基礎MySQL  ~その２~ my.cnf (設定ファイル)

# 設定ファイル
MySQLに対する設定は、**my.cnf**というファイルに対して行う

## my.cnfの読み込み順序
my.cnfの読み込まれる順序は、Linux環境では以下の順

|ファイル名|目的|
|:--------|---|
|/etc/my.cnf|グローバルオプション|
|/etc/mysql/my.cnf| グローバルオプション|
|SYSCONFDIR/my.cnf| グローバルオプション|
|$MYSQL_HOME/my.cnf| サーバー固有のオプション|
|defaults-extra-file| --defaults-extra-file=path によって指定されるファイル (ある場合)|
|~/.my.cnf| ユーザー固有のオプション|
|~/.mylogin.cnf| ログインパスオプション|
[オプションファイルの使用](http://dev.mysql.com/doc/refman/5.6/ja/option-files.html)

## my.cnfに設定できる値

設定値にはセクション（グループ？）と言われる、
オプションを設定するプログラムまたはグループの名前以下に設定する。
（[mysqld]のように書かれているところのこと）

```text:/etc/my.cnfの例
[client]                           # clientセクション: mysqlクライアントツールへの設定
port=3306
socket=/tmp/mysql.sock

[mysqld]                           # mysqldセクション: mysqlサーバーへの設定
port=3306
socket=/tmp/mysql.sock
key_buffer_size=16M
max_allowed_packet=8M

[mysqldump]                        # mysqldumpセクション:　バックアップコマンドへの設定
quick

[mysqld_safe]                      # mysqld_safeセクション: 起動ファイル設定
log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid
```

### 各セクションと設定可能項目

 * [mysqld]
   [サーバーシステム変数](https://dev.mysql.com/doc/refman/5.6/ja/server-system-variables.html)の「オプションファイル」以下に
   「はい」と書かれている項目

 * [client], [mysql]
   [mysql のオプション](https://dev.mysql.com/doc/refman/5.6/ja/mysql-command-options.html)

 * [mysqld_safe]
   [mysqld_safe — MySQL サーバー起動スクリプト](https://dev.mysql.com/doc/refman/5.6/ja/mysqld-safe.html)

 * その他セクション
  * 各クライアントプログラムでは、[プログラム名]もしくは[client]でオプションを設定できる  
    [MySQL クライアントプログラム](https://dev.mysql.com/doc/refman/5.6/ja
/programs-client.html)

  * [mysql.server]  
    [mysql.server — MySQL サーバー起動スクリプト](https://dev.mysql.com/doc/refman/5.6/ja/mysql-server.html)

  * [mysqld_multi]  
    [mysqld_multi — 複数の MySQL サーバーの管理](https://dev.mysql.com/doc/refman/5.6/ja/mysqld-multi.html)



## デフォルトmy.cnf
RPMインストール時のデフォルトのmy.cnf（MySQLの設定ファイル）は以下

```text:/etc/my.cnf

# For advice on how to change settings please see
# http://dev.mysql.com/doc/refman/5.6/en/server-configuration-defaults.html


[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
#
# Remove leading # to turn on a very important data integrity option: logging
# changes to the binary log between backups.
# log_bin
#
# 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
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock

# Disabling symbolic-links is recommended to prevent assorted security risks
symbolic-links=0

# Recommended in standard MySQL setup
sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES 

[mysqld_safe]
log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid
```

## デフォルト設定での各PATHの設定
 * datadir: MySQLのデータファイル（テーブル定義、データ）が作成される場所
    
    ```
    /var/lib/mysql
    ```
 * errorファイル: MySQLのエラーログの出力先
 
    ```
    /var/log/mysqld.log
    ```
 * slow_query_logファイル: スローログファイル(遅いクエリ)の出力先

    ```
    /var/run/mysqld/mysqld-slow.log
    ```
    ※デフォルトではOFFになってるので出力されない

## デフォルトのmysqldの設定状況を確認

```mysql:query
SHOW GLOBAL VARIABLES;
+--------------------------------------------------------+--------+
| Variable_name                                          | Value  |
+--------------------------------------------------------+--------+
| auto_increment_increment                               | 1      |

.
.
.
| wait_timeout                                           | 28800  |
+--------------------------------------------------------+--------+

```

LIKE文で特定の項目のみに絞れる

```mysql:query
SHOW GLOBAL VARIABLES LIKE '%「検索項目」%';
```

# promptの変更

mysqlコマンドラインツールでログインした際のプロンプト表示を変更

```
[client]
prompt='\\U [\\d] > '
```
ログイン時の表示

```
root@localhost [(none)] > use mysql;
Database changed
root@localhost [mysql] >
```

設定可能なstrは以下参照
http://dev.mysql.com/doc/refman/5.6/ja/mysql-commands.html