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