はじめに
MySQLの設定を機能を踏まえてふんわり理解できればなと思います
メモリ
サーバ自体にも利用される重要な項目ですね。すごくざっくり分けると以下に分類されるかなと思います。
- クライアント接続処理のサイズ (スレッドバッファサイズ)
- サーバで利用されるデータキャッシュのサイズ (グローバルバッファサイズ)
ストレージエンジンにもよりますが、こんな感じで設定します。
innodb_buffer_pool_size=xxxM
read_buffer_size=xxM
read_rnd_buffer_size=xxM
sort_buffer_size=xxM
query_cache_size=xxM
query_cache_limit=xxM
max_allowed_packet=xxM
join_buffer_size=xxM
このあたりは別途深くやっていきたいですね。。。(遠目)
文字コード
MySQLでは、サーバ全体、データベース、クライアントのように各所で細かく設定する事が可能です。設定には character_set_server=文字コード のように設定します。(この例ではMySQLサーバの文字コードを設定します)
MySQL(5.7の場合)は「latin1」という文字コードがデフォルトで設定されており、日本語を取り扱う事ができません。そのため日本語を含むデータを取り扱う場合は、「サーバ」および「クライアント」側の文字コードを変更する必要があります。最近だと「utf8mb4」になるかと思います。
照合順序
文字(データ)の比較とかに必要になります。文字コードには複数に照合順序(collation)が存在しています。下記に例を記載します。
説明 | collation名 | 補足 |
---|---|---|
大文字小文字を区別しない | utf8mb4_general_ci | 末尾が ci (case insensitive) |
文字のバイナリ値で比較 | utf8mb4_bin | 末尾が bin |
大文字小文字を区別する | utf8mb4_bin | utf8_mf4_general_csというものはない |
ログ
MySQLのログには6つの種類があります。
種類 | 拡張子 | デフォルト出力 |
---|---|---|
エラーログ | .err | 有効 |
バイナリログ | .bin.xxxxx | 無効 |
一般クエリログ | .log | 無効 |
スロークエリログ | .slow.log | 無効 |
リレーログ | host_name-relay-bin.xxxxx | 有効?(操作不能?) |
DDL(メタデータ)ログ | ddl_log.log | 有効(操作不能) |
ファイル名は明示的にシステム変数で設定する事が可能ですが、指定しない場合は一部にホスト名が利用されます。
少しですが、それぞれ掘り下げていきたいと思います。
エラーログ
サーバ起動・停止といった読んで字の如くではありますが、エラーに関するログです。
バイナリログ
更新系の処理や処理に要した時間などのメタデータを記録しているログです。このログは下記の重要な役割にも利用されています。
- レプリケーション
- マスターサーバはバイナリログに格納されている情報をスレーブサーバに送信します。スレーブサーバはその情報をリレーログに書き出し、処理を実行。
- データリカバリ操作
こんな感じで有効化します。
log_bin
binlog_format = 'STATEMENT' {'STATEMENT'|'ROW'|'MIXED'}
一般クエリログ
クライアントからの接続や解除時に受け取ったSQLステートメントを記録します(MySQLの実行内容を記録しているログ)。このログはバイナリログとは違い、実行されたSQLステートメントとログに格納されている順序が異なる場合があります。バイナリログは実行された後にロックリリース前に書き込むため順序が異なる事はありません
こんな感じで有効化します。
general_log=1 {0|1}
general_log_file=ファイルパス
スロークエリログ
実行に要した時間がシステム変数(long_query_time)秒を超えたSQLステートメントを記録しているログです。
slow_query_log=1 {0|1}
slow_query_log_file=ファイルパス
long_query_time=xx (デフォルト10s)
ここには記載していないですが、記録する・しないといった制御がもっと細かく設定する事ができます。
リレーログ
バイナリログのレプリケーションの項目で説明しているはず。。。。なので割愛(いつかどこかで深くやりたいなと思っています)
DDLログ
データ定義ステートメント(データベースに対して発行されたオブジェクトの作成や変更)によって生成されるメタデータを記録しているログです。
まとめ
「collationとか全く意識せずに適当に設定していたな・・・・・・・」