0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

個人的備忘録:RDS MySQL環境を一発構築!パラメータ・オプション設定まとめ

Posted at

はじめに

AWSのRDS MySQL 8.0で効率的にサーバを運用するためには、デフォルトの設定ではなく環境に合わせたチューニングが必要になる場合があります。

個人の備忘録程度の走り書きとなっておりますが、温かい目で見守っていただければ幸いです。

そのため、CloudFormationを使って第一段階でパラメータグループやオプショングループを作成するテンプレートを用意しました。

書こうと思ったきっかけ

MySQL RDSの初期構築時に、デフォルト値だと効率が悪かったり、スロークエリを逆に見落とすことがあるため、よく使われるチューニングパラメータをあらかじめ定義したテンプレートを作ろうと考えたためです。

実際のテンプレート


1. RDS MySQL 8.0 用「DBパラメータグループ」

(リソース名: MyDBParameterGroup)

パラメータ一覧 (設定内容)

パラメータ名 設定値 説明
max_connections 100 同時接続数の上限
innodb_buffer_pool_size 3221225472 InnoDBバッファプールサイズ(約3GB)
innodb_log_file_size 536870912 InnoDBログファイルサイズ(512MB)
innodb_flush_log_at_trx_commit 2 トランザクションコミット時のログフラッシュ効果(パフォーマンス重視)
table_open_cache 512 同時オープン可能なテーブルキャッシュ数
tmp_table_size 67108864 一時テーブルサイズの上限(64MB)
max_allowed_packet 67108864 1パケットあたりの最大許可サイズ(64MB)
max_execution_time 30000 クエリの最大実行時間(ミリ秒)30秒)
net_write_timeout 120 書き込みタイムアウト(秒)
net_read_timeout 120 読み取りタイムアウト(秒)
sort_buffer_size 3145728 ソート時バッファサイズ(約3MB)
join_buffer_size 3145728 JOIN操作時バッファサイズ(約3MB)
innodb_io_capacity 200 InnoDBストレージIO能力の情報
innodb_read_io_threads 4 InnoDB読み込みIOスレッド数
innodb_write_io_threads 4 InnoDB書き込みIOスレッド数
log_bin_trust_function_creators 1 バイナリログ使用時のファンクション作成許可
slow_query_log 1 スロークエリログを有効化
long_query_time 2 スロークエリ認識実行時間(2秒)
character_set_server utf8mb4 デフォルトサーバ文字コード(絵文字対応)
collation_server utf8mb4_0900_ai_ci デフォルト照合順序(MySQL8.0標準)
time_zone Asia/Tokyo サーバータイムゾーン(日本時間)

2. RDS MySQL 8.0 用「オプショングループ」

(リソース名: MyDBOptionGroup)

オプション一覧 (追加されている内容)

オプション名 説明
MARIADB_AUDIT_PLUGIN 監査ログ取得用プラグイン (セキュリティ監査目的)

(エンジン名:mysql、メジャーバージョン:8.0で固定)


まとめ

  • DBパラメータグループでMySQL8.0を性能、ロギング、タイムゾーン設定などの面で最適化
  • オプショングループで監査ログ準備を行い、セキュリティ安全性を小さい手間で向上させる

以上を個人的備忘録としてテンプレートおよび記事にまとめています。

おまけ:実際のコード

test.yaml
AWSTemplateFormatVersion: "2010-09-09"
Description: CloudFormation template to create RDS MySQL 8.0 Parameter Group and Option Group

Parameters:
  DBFamily:
    Description: MySQL DB Parameter Group Family
    Type: String
    Default: mysql8.0

  OptionGroupName:
    Description: The name of the Option Group
    Type: String
    Default: my-mysql-option-group

Resources:
  MyDBParameterGroup:
    Type: AWS::RDS::DBParameterGroup
    Properties:
      Description: MySQL 8.0 Parameter Group
      Family: !Ref DBFamily
      Parameters:
        max_connections: "100"
        innodb_buffer_pool_size: "3221225472"
        innodb_log_file_size: "536870912"
        innodb_flush_log_at_trx_commit: "2"
        table_open_cache: "512"
        tmp_table_size: "67108864"
        max_allowed_packet: "67108864"
        max_execution_time : "30000"
        net_write_timeout: "120"
        net_read_timeout : "120"
        sort_buffer_size: "3145728"
        join_buffer_size: "3145728"
        innodb_io_capacity: "200"
        innodb_read_io_threads: "4"
        innodb_write_io_threads: "4"
        log_bin_trust_function_creators: "1"
        slow_query_log: "1"
        long_query_time: "2"
        character_set_server : "utf8mb4"
        collation_server : "utf8mb4_0900_ai_ci"
        time_zone : "Asia/Tokyo"


  MyDBOptionGroup:
    Type: AWS::RDS::OptionGroup
    Properties:
      EngineName: mysql
      MajorEngineVersion: "8.0"
      OptionGroupDescription: MySQL 8.0 Option Group
      OptionConfigurations:
        - OptionName: MARIADB_AUDIT_PLUGIN

Outputs:
  ParameterGroupName:
    Description: The name of the created MySQL Parameter Group
    Value: !Ref MyDBParameterGroup

  OptionGroupName:
    Description: The name of the created MySQL Option Group
    Value: !Ref MyDBOptionGroup
0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?