MySQL, AWS

AWS RDS PITR+ロールフォワードによるリカバリ 【下準備編】

AWS

 

関連

 

RDS側作業

 

 

binlog保存期限設定

 

24時間の保持に設定

mysql > call mysql.rds_set_configuration('binlog retention hours', 24);

MySQL [testdb]> call mysql.rds_show_configuration;
+------------------------+-------+-----------------------------------------------------------------------------------------------------------+
| name                   | value | description                                                                                               |
+------------------------+-------+-----------------------------------------------------------------------------------------------------------+
| binlog retention hours | 24    | binlog retention hours specifies the duration in hours before binary logs are automatically deleted.      |
| source delay           | 0     | source delay specifies replication delay in seconds between current instance and its master.              |
| target delay           | 0     | target delay specifies replication delay in seconds between current instance and its future read-replica. |
+------------------------+-------+-----------------------------------------------------------------------------------------------------------+
3 rows in set (0.00 sec)

 

タイムゾーン設定

 

RDSのコンソールでパラメータグループから設定

 

キー: time_zone
値: Asia/Tokyo

これをやらないとbinlogの時間がUTCになって、リストアする時の時間指定の考慮が発生してしまう^^;

 

これも変更する

キー: log_bin_trust_function_creators
値: 1

 

binlogのリストア時のエラーを回避する為

設定反映の確認

mysql> SELECT CURTIME();
+-----------+
| CURTIME() |
+-----------+
| 12:27:58  |
+-----------+
1 row in set (0.01 sec)

 

 

binlogバックアップ側サーバ側作業

S3へのFullAccessな IAMがEC2に付与されていること

EC2にあらかじめロールを付与しておいてください

RDSの種類とメジャーバージョンとクライアントの種類とメジャーバージョンは合わせましょう

Amazon Linux2 MySQL5.7 clientのインストール

 

タイムゾーン変更

# sudo cp -p /usr/share/zoneinfo/Japan /etc/localtime

 

 

# sudo vi /etc/sysconfig/clock

- ZONE="UTC"
- UTC=true
+ ZONE="Asia/Tokyo"
+ UTC=False

 

設定反映の確認

# date
Mon Nov 15 12:27:24 JST 2021

 

 

binlogバックアップサーバでのアプリによるRDS to S3へのbinlogのバックアップ

 

 

 

# aws configure list

      Name                    Value             Type    Location
      ----                    -----             ----    --------
   profile                <not set>             None    None
access_key     ****************HRPZ shared-credentials-file
secret_key     ****************RQS/ shared-credentials-file
    region                <not set>             None    None

 

 

 

# export AWS_DEFAULT_REGION='ap-northeast-1'

 

 

# aws configure

IAMの設定してください

EC2にロール設定してたらいらないかも^^;

# aws configure list
      Name                    Value             Type    Location
      ----                    -----             ----    --------
   profile                <not set>             None    None
access_key     ****************HRPZ shared-credentials-file
secret_key     ****************RQS/ shared-credentials-file
    region           ap-northeast-1              env    AWS_DEFAULT_REGION

 

アカウントidの取得

$ AWS_ID=$( \
        aws sts get-caller-identity \
          --query 'Account' \
          --output text \
) && echo ${AWS_ID}

 

 

 

$ S3_BUCKET_PREFIX='sample-db-binlog'

 

バケット名の決定

$ S3_BUCKET_NAME="${S3_BUCKET_PREFIX}-${AWS_ID}" \
        && echo ${S3_BUCKET_NAME}

バケット「binlog-bucket1」の作成 // 任意で変更してください。

$ aws s3api create-bucket \
        --bucket ${S3_BUCKET_NAME} \
        --create-bucket-configuration "LocationConstraint=${AWS_DEFAULT_REGION}"

 

アプリをクローン

$ git clone https://github.com/yuukanehiro/ManageBinlog.git
$ cd ManageBinlog

 

バケットにライフサイクル設定

ManageBinlog $ aws s3api put-bucket-lifecycle-configuration \
--bucket ${S3_BUCKET_NAME} \
--lifecycle-configuration file://binlog_expiration_lifecycle_rules.json

ex. binlog_expiration_lifecycle_rules.json

{
    "Rules": [
        {
            "Filter": {
                "Prefix": "testdb/binlog/"
            },
            "Status": "Enabled",
            "Transitions": [
                {
                    "Days": 3,
                    "StorageClass": "GLACIER"
                }
            ],
            "Expiration": {
                "Days": 7
            },
            "ID": "testdb"
        }
    ]
}

・GLACIERに3日経過したbinlogを送信

・30日後に削除

設定したルールの確認

ManageBinlog # aws s3api get-bucket-lifecycle-configuration --bucket ${S3_BUCKET_NAME}
{
    "Rules": [
        {
            "Filter": {
                "Prefix": "testdb/binlog/"
            },
            "Status": "Enabled",
            "Transitions": [
                {
                    "Days": 3,
                    "StorageClass": "GLACIER"
                }
            ],
            "Expiration": {
                "Days": 7
            },
            "ID": "testdb"
        }
    ]
}

 

$ vi /ManageBinlog/backupBinlogFromRdsToS3.sh

・・・

# ----------------------------------------------------------------------
S3_BUCKET_NAME={S3バケット名}
DB_HOST={RDS ホスト名}
DB_PASSWORD={RDS パスワード}
DB_USER={RDS ユーザ}
DB_NAME={RDS DB名}

MAX_DOWNLOAD_BINLOG_COUNT=5 ... binlogファイル取得
TEMP_DIR=./tmp_binlog/${DB_NAME}/ ... 一時的に保存するbinlog
S3_DIR=s3://${S3_BUCKET_NAME}/${DB_NAME}/ ... binlogの保存場所
# ----------------------------------------------------------------------

・・・

 

 

$ chmod +x /ManageBinlog/backupBinlogFromRdsToS3.sh
$ sh /ManageBinlog/backupBinlogFromRdsToS3.sh

 

Cron設定

# vi /etc/crontab

SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root

# For details see man 4 crontabs

# Example of job definition:
# .---------------- minute (0 - 59)
# |  .------------- hour (0 - 23)
# |  |  .---------- day of month (1 - 31)
# |  |  |  .------- month (1 - 12) OR jan,feb,mar,apr ...
# |  |  |  |  .---- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat
# |  |  |  |  |
# *  *  *  *  * user-name  command to be executed

* * * * * root sh /ManageBinlog/backupBinlogFromRdsToS3.sh

反映

 $ sudo systemctl restart crond

S3のバケットにファイルがアップロードされることを確認してください。

$ vi /ManageBinlog/downloadBinlogFromS3.sh

・・・

# ----------------------------------------------
S3_BUCKET_NAME={S3バケット名} 
DB_NAME={DB名}
STORAGE_DIR=./download/${DB_NAME}/
S3_DIR=s3://${S3_BUCKET_NAME}/${DB_NAME}/
# ---------------------------------------------

・・・

 

$ chmod +x /downloadBinlogFromS3.sh
$ sh /downloadBinlogFromS3.sh


ダウンロードできるか確認
# ls -laht /ManageBinlog/download/{DB名}/
total 48K

drwxr-xr-x 2 root root 4.0K Nov 15 19:27 .
-rw-r--r-- 1 root root  568 Nov 15 19:27 mysql-bin-changelog.001197
-rw-r--r-- 1 root root  568 Nov 15 19:27 mysql-bin-changelog.001198
-rw-r--r-- 1 root root  568 Nov 15 19:27 mysql-bin-changelog.001199
-rw-r--r-- 1 root root  568 Nov 15 19:27 mysql-bin-changelog.001200
-rw-r--r-- 1 root root  511 Nov 15 19:27 mysql-bin-changelog.001201
-rw-r--r-- 1 root root  568 Nov 15 19:24 mysql-bin-changelog.001196
-rw-r--r-- 1 root root  211 Nov 15 19:19 mysql-bin-changelog.001195
-rw-r--r-- 1 root root  568 Nov 15 19:14 mysql-bin-changelog.001194
-rw-r--r-- 1 root root  568 Nov 15 19:09 mysql-bin-changelog.001193
-rw-r--r-- 1 root root  568 Nov 15 19:04 mysql-bin-changelog.001192
-rw-r--r-- 1 root root  568 Nov 15 18:59 mysql-bin-changelog.001191

 

 

 

 

 

Amazonおすすめ

iPad 9世代 2021年最新作

iPad 9世代出たから買い替え。安いぞ!🐱 初めてならiPad。Kindleを外で見るならiPad mini。ほとんどの人には通常のiPadをおすすめします><

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)