読者です 読者をやめる 読者になる 読者になる

vague memory

うろ覚えを無くしていこうともがき苦しむ人の備忘録

RDS(MySQL) システム変数デフォルト値

AWS MySQL

logo-mysql-170x115.png

Amazon RDS for MySQL でのシステム変数(Server System Variables)についてです。
RDSではパラメーターグループを使用して設定値の変更を行います。

このデフォルトグループには、エンジン、コンピューティングクラス、インスタンスの割り当てストレージに基づいて、データベースエンジンのデフォルトと Amazon RDS システムのデフォルトが含まれています。

ここで言う Amazon RDS システムのデフォルトがどういう値なのか気になったので、パラメーターグループでの変更可否と併せて列挙しました。

比較環境

通常版

CentOSyumでインストール

sudo yum -y install http://dev.mysql.com/get/mysql-community-release-el6-5.noarch.rpm
sudo yum install mysql-community-server
/usr/bin/mysql_secure_installation

RDS版

2015年8月現在の最新版

  • 5.6.23-log MySQL Community Server
    • Instance Class : db.t2.micro
    • Parameter Group : default.mysql5.6
    • Multi AZ

比較結果

ディレクトリ・ログファイル関連

RDSへのsshログインは不可のため、意識する機会は少なそうですが /rdsdbbin、/rdsdbdata ディレクトリ配下に設定されています。 パラメーターグループによる変更もできません。

Variable_name Value
basedir /rdsdbbin/mysql/
character_sets_dir /rdsdbbin/mysql-5.6.23.R1/share/charsets/
datadir /rdsdbdata/db/
general_log_file /rdsdbdata/log/general/mysql-general.log
innodb_data_home_dir /rdsdbdata/db/innodb
innodb_log_group_home_dir /rdsdbdata/log/innodb
lc_messages_dir /rdsdbbin/mysql-5.6.23.R1/share/
log_bin_basename /rdsdbdata/log/binlog/mysql-bin-changelog
log_bin_index /rdsdbdata/log/binlog/mysql-bin-changelog.index
log_error /rdsdbdata/log/error/mysql-error.log
pid_file /rdsdbdata/log/mysql-3306.pid
plugin_dir /rdsdbbin/mysql-5.6.23.R1/lib/plugin/
relay_log /rdsdbdata/log/relaylog/relaylog
relay_log_basename /rdsdbdata/log/relaylog/relaylog
relay_log_index /rdsdbdata/log/relaylog/relaylog.index
slave_load_tmpdir /rdsdbdata/tmp
slow_query_log_file /rdsdbdata/log/slowquery/mysql-slowquery.log
ssl_ca /rdsdbdata/rds-metadata/ca-cert.pem
ssl_cert /rdsdbdata/rds-metadata/server-cert.pem
ssl_key /rdsdbdata/rds-metadata/server-key.pem
tmpdir /rdsdbdata/tmp

一般ログとスロークエリログはテーブルに出力する設定です。
FILEに変更する事も可能です。その場合はマネジメントコンソール、または、AWS CLIで参照する事になります。

Variable_name DEFAULT RDS Edit
log_output FILE (general_log_file、slow_query_log_file) TABLE (mysql.general_log、mysql.slow_log)

バイナリログ関連

ReadReplicaを作成した場合のレプリケーションに使用される設定です。 尚、RDSの設定でバックアップ保持期間が0の場合、バイナリログは無効化されます。この状態の場合はReadReplicaの作成ができません。

Variable_name DEFAULT RDS Edit
binlog_format STATEMENT MIXED △(ROWのみ)
log_bin OFF ON
log_bin_basename   /rdsdbdata/log/binlog/mysql-bin-changelog
log_bin_index   /rdsdbdata/log/binlog/mysql-bin-changelog.index
max_binlog_size 1073741824 (1024MB) 134217728 (128MB) ×
sync_binlog 0 1

Replication関連

MySQLを使っていて稀に引っかかるのが名称のアンダースコアとハイフンの混在です。統一して欲しい所です。

Variable_name DEFAULT RDS Edit
log_slave_updates OFF ON ×
master_info_repository FILE (master.info) TABLE (mysql.slave_master_info) △(master-info-repository)
relay_log_info_repository FILE (relay-log.info) TABLE (mysql.slave_relay_log_info)
relay_log_recovery OFF ON ×

TIMESTAMPデータ型

INSERT時に値を明示的に指定しない場合、自動的に現在日時が挿入されるというMySQL固有のデータ型です。
MySQL 5.6.6 以降では非推奨の動作となっており、OFF(デフォルト)のままだとMySQLの起動時に警告メッセージが出力されます。
RDSでは推奨される設定値である ON になっているため、自動挿入はされません。

Variable_name DEFAULT RDS Edit
explicit_defaults_for_timestamp OFF ON

mysql> CREATE TABLE timestamp_test(id int, dt datetime, ts timestamp);
mysql> INSERT INTO timestamp_test (id) VALUES (1);
mysql> INSERT INTO timestamp_test (id,dt,ts) VALUES (2,NOW(),NOW());
mysql> INSERT INTO timestamp_test (id,dt) VALUES (3,NOW());
mysql> SELECT * FROM timestamp_test;
  • OFF(デフォルト)での結果
+------+---------------------+---------------------+
| id   | dt                  | ts                  |
+------+---------------------+---------------------+
|    1 | NULL                | 2015-08-08 20:42:30 |
|    2 | 2015-08-08 20:42:38 | 2015-08-08 20:42:38 |
|    3 | 2015-08-08 20:42:43 | 2015-08-08 20:42:43 |
+------+---------------------+---------------------+
  • ONでの結果
+------+---------------------+---------------------+
| id   | dt                  | ts                  |
+------+---------------------+---------------------+
|    1 | NULL                |                NULL |
|    2 | 2015-08-08 20:42:38 | 2015-08-08 20:42:38 |
|    3 | 2015-08-08 20:42:43 |                NULL |
+------+---------------------+---------------------+

SSL接続サポート、シンボリックリンクサポート

RDSではSSL接続をサポートする設定となっています。 (have_opensslはhave_sslエイリアスなので意味は同じです。)
また、ssh接続出来ないため明示的な利用はできませんが、シンボリックリンクサポートも有効化設定がなされています。

Variable_name DEFAULT RDS Edit
have_openssl DISABLED YES ×
have_ssl DISABLED YES ×
have_symlink DISABLED YES ×

InnoDB

インスタンスクラスにより変動します。

Variable_name DEFAULT RDS Edit
innodb_flush_method (fsync) O_DIRECT
innodb_buffer_pool_size 134217728 (128MB) 627048448 (598MB) △({DBInstanceClassMemory*3/4})
innodb_log_file_size 50331648 (48MB) 134217728 (128MB)
read_buffer_size 131072 (128KB) 262144 (256KB)
read_rnd_buffer_size 262144 (256KB) 524288 (512KB)

MyISAM

Variable_name DEFAULT RDS Edit
key_buffer_size 8388608 (8MB) 16777216 (16MB)

Max Connection

インスタンスクラスにより変動します。 また、open_files_limit、thread_cache_sizeのデフォルト値のベースになります。

Variable_name DEFAULT RDS Edit
max_connections 151 66 △({DBInstanceClassMemory/12582880})

その他

Variable_name DEFAULT RDS Edit
secure_file_priv   /tmp/ ×
socket /var/lib/mysql/mysql.sock /tmp/mysql.sock ×
performance_schema ON OFF
table_open_cache_instances 1 16
system_time_zone CEST UTC ×
time_zone SYSTEM UTC ×