mysqlの基本設定

mysqlの設定ファイルはmy.cnfと、my.cnf.d/配下に配置される設定ファイルで構成されています。

基本設定

my.cnfにはサービスが動くための基本設定が記述されています。 変更が無い場合は特に設定の必要はない。

# For advice on how to change settings please see
# http://dev.mysql.com/doc/refman/5.7/en/server-configuration-defaults.html
[client-server]
character_set_client = utf8

[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

#log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid

!includedir /etc/my.cnf.d

サーバ設定

サーバ設定用my.cnf.d配下に作成してサーバ用設定を行います。

# vim /etc/my.cnf.d/mysql-server.cnf

ポート設定
DBがリスニングするポートを設定、デフォルトは3306

[mysqld]
port = 3306

デフォルトキャラセット
デフォルトで利用するキャラクターセット

[mysqld]
character_set_server = utf8mb4

データベースディレクトリ
DBが利用するデータの配置先、利用するディレクトリを指定。

[mysqld]
datadir = /data/db/mysql
tmpdir = /var/tmp

ロードファイル・ディレクトリ
ファイルロードを許可するディレクトリが明示的に制限されているため設定。
※制限を外すことも可能。

[mysqld]
secure_file_priv = /var/lib/mysql-files/

ディレクトリはmysqlユーザー権限でパーミッションが770である必要がある。

タイムスタンプ
timestamp型の暗黙的なデフォルト値利用は非推奨のため、デフォルト値が適応されないように有効化

[mysqld]
explicit_defaults_for_timestamp = ON

パスワード設定
DBユーザーのパスワード有効期限を無期限に変更。
パスワードポリシーを変更する場合も定義。

[mysqld]
default_password_lifetime = 0
validate_password_policy = LOW

最大接続数
DBに接続できる最大同時接続数を設定。
サーバスペックと相談し、フロントサーバの接続数より少し多い値に設定しておく。

[mysqld]
max_connections = 151

接続待ち数
MySQLで保持できる未処理の接続リクエストの数。
50 + (max_connections / 5)から算出します。

[mysqld]
back_log = 80

接続ロック
ホストからの連続する接続リクエストが、接続に成功することなくこの数を超えて中断した場合、
サーバーはホストのその後の接続をブロックします。

[mysqld]
max_connect_errors = 100

接続タイムアウト
wait_timeoutがプログラム等からの接続で使われるタイムアウト。
interactive_timeoutは対話的、コマンド等からの接続タイムアウト。
デフォルトは両方8時間なので、プログラム用のタイムアウトは適正値にしておく。

[mysqld]
wait_timeout = 600
interactive_timeout = 28800

最大受信パケットサイズ
1つのパケット、生成された文字列または中間文字列、
または mysql_stmt_send_long_data() C API 関数によって送信されたすべてのパラメータの最大サイズ。

[mysqld]
max_allowed_packet = 16M

通信のSSL化
mysqlへの接続をsslで行わない場合は無効化。

[mysqld]
ssl = OFF

ログ関連

バイナリログファイルの自動削除のための日数。
デフォルトは0で自動削除されないが、定期的なバックアップを取得しているのであれば、
長期間のログは不要なため設定する。

[mysqld]
expire_logs_days = 7

エラーログ設定。

[mysqld]
log_error = /var/log/mysql/mysqld.log
#log_warnings = 2
log_error_verbosity = 3
log_timestamps = SYSTEM

エラーログレベルには下記定義方法があるため注意する。

valu notes warnings error
log_warnings = 0,log_error_verbosity = 1 No No Yes
log_warnings = 1,log_error_verbosity = 2 No Yes Yes
log_warnings >= 2,log_error_verbosity >= 3 Yes Yes Yes

スロークエリログ設定。

[mysqld]
slow_query_log = ON
slow_query_log_file = /var/log/mysql/slow-query.log
long_query_time = 2.000000

バイナリログ設定。

[mysqld]
log_bin = mysql-bin
max_binlog_size = 200M
binlog_format = MIXED

クエリログ。 必要により有効化する、デフォルトでは無効化。

[mysqld]
general-log = 0
general_log_file = /data/db/mysql/log/mysql-general.log

ファンクション権限
デフォルトではストアドファンクションじゃSUPER権限を持たない限り作成、変更できない。
またSQL上もREADS SQL DATAまたはNO SQLを宣言しないと利用できない制約がある。

DB担当者と相談し無効化する場合は1にする。

[mysqld]
log_bin_trust_function_creators = 1

照合順序
データの大文字小文字区別について設定。
デフォルトではutf8_general_ciとなっておりmysqlは大文字小文字を区別しない。
区別する場合は下記のように指定する?

[mysqld]
collation_server = utf8mb4_bin

名前解決
ホスト名の名前解決を行うかの設定。
接続にlocalhost等を利用するとメッセージが出るため必要により有効化。

[mysqld]
#skip-name-resolve

クライアント設定

サーバ設定用my.cnf.d配下に作成してサーバ用設定を行います。

# vim /etc/my.cnf.d/mysql-client.cnf

ソケット指定
ソケットをデフォルトから任意の場所に変更した場合は明記。

[client]
socket = /data/db/mysql/mysql.sock

results matching ""

    No results matching ""