Memo/AmazonWebServices/RDS

http://dexlab.net/pukiwiki/index.php?Memo/AmazonWebServices/RDS
 

RDS


監査ログ


ストレージタイプの変更


ClassicからVPCへ以降


VPC上のRDSにElasticIPを付与

VPC上のRDSは名前解決すると、プライベートIPになるため、VPC以外からアクセスできない。
ElasticIPをVPC上に取得し、それをRDSに付与する事で外部からでもアクセスできる。


DBエンジンのアップグレード

  • MySQL 5.5から5.6へのアップグレード
    • ダウンタイムはMultiAZ:falseで約6時間。trueで約35分。read replicaを使えばよりダウンタイムを短く出来る
    • Instance type: m3.medium / DB size: 50GB
    • mysql5.5のread replicaの作成:約10分
    • storage typeをstandardからgp2へ変更:約2時間
    • mysql5.6から5.6へのアップグレード:約3時間 (m3.largeだと約35分)
    • read replicaをmasterへ昇格:1分
    • 古いRDS IDを適当に変更。新しいRDS IDを古いRDSと同じにする

タイムゾーンの変更

  • パラメータグループの「time_zone」に「Asia/Tokyo」を入れる事ができるようになっている。2016-01-26現在
  • init_connectを変更していた場合、空にはできないのでダミーの値をいれる

レストア


オンプレミスのMySQLからRDSへの移行

  • MySQL replicationが以下で失敗する場合
    1.  Slave_IO_Running: Connecting
    2. Slave_SQL_Running: Yes
    • VPCの場合、セキュリティグループで、Outboundが「all traffic, all, all, 0.0.0.0/0」になっている事を確認する。terraformでやると記述が無ければ消してしまう。

サービス停止する変更

  • MultiAZが前提だが、サービス停止する場合としない場合がある
  • サービス停止する
    • インスタンスタイプの変更。5分程度のサービス断が起こる
    • ストレージタイプの変更(standard => gp2等)。2分程度のサービス断が起こる
  • サービス停止しない
    • ストレージ容量の拡大。1時間30分程度かかる。

Automated Snapshotが出来ない

  • AWS supportの回答では、「日時バックアップ(Backup Window)の開始前の直近にバックアップが行われた場合、通常行われる日時バックアップがスキップされることがある」
    • 緊急のminor version upgradeされたときに、Automated Snapshotがスキップされた。

デフォルトのmax_connectionsはメモリサイズによって変わる

Management Consoleで任意の値に変更可能

  • max_connections:{DBInstanceClassMemory?/12582880}
    1. t1.micro: 34 connections ($0.035)
    2. m1.small: 150 connections ($0.115)
    3. m1.large: 640 connections ($0.455)
    4. m1.xlarge: 1263 connections ($0.920)
    5. m2.xlarge: 1441 connections ($0.655)
    6. m2.2xlarge: 2900 connections ($1.315)
    7. m2.4xlarge: 5816 connections ($2.630)

mysqldump --all-databasesでAccess Deniedになる場合

  • --all-databasesオプション付きでダンプしようとすると、「Access Denied」になる。これはRDSのユーザが全ての権限を持っておらず、アクセスできないDBがあるため。
  • --skip-lock-tables を付けると良い
    1. /usr/bin/mysqldump -uUSER -pPASS \
    2.  --single-transaction --default-character-set=utf8 --hex-blob \
    3.  --all-databases --skip-lock-tables \
    4.  -h localhost > /path/to/mysql.`date +%Y%m%d`.sql

RDS起動直後は status=available になっても接続できない場合がある

  • スクリプト等で status=available に変わるのをチェックして、接続しに行くもエラーになる事がある。AWSプレミアムサポートの回答は"仕様"との事。3分以上かかるのは希だと。mysqlコマンドで接続チェックしたほうが良さそうだ
  • しばらく待機するbashスクリプト
    1. wait_connection() {
    2. local db_host=${1:-"127.0.0.1"}
    3. local db_user='root'
    4. local max_wait_sec=180 # AWS premium support answers
    5. local wait_sec=10
    6. local mysqladmin=/usr/bin/mysqladmin
    7. local start_sec=$SECONDS
    8. local end_sec=$SECONDS
    9.  
    10. if [ -f "$mysqladmin" ]; then
    11. while [ $(( $end_sec - $start_sec )) -le $max_wait_sec ]; do
    12. $mysqladmin ping -u $db_user -h $db_host > /dev/null 2>&1
    13. if [ $? == 0 ]; then
    14. break
    15. fi
    16. sleep $wait_sec
    17. end_sec=$SECONDS
    18. done
    19. else
    20. sleep $max_wait_sec
    21. fi
    22. return 0
    23. }

ARN

  • Amazon Relational Database Service - Amazon Web Services(PDF)
    arn:aws:rds:<region>:<account number>:<resoucetype>:<name>
    • リージョン:オレゴン、アカウント:001234567890、 DB Instance Name:mysql-db だけ操作可能なARN
      arn:aws:rds:us-west-2:001234567890:db:mysql-db
    • リージョン:バージニア、アカウント:001234567890、DB Snapshot Name:my-snapshot2 だけ操作可能なARN
      arn:aws:rds:us-east-1:001234567890:snapshot:my-snapshot2
    • リージョン:東京、アカウント:001234567890、DB Instance Name:example_YYYYMMDD, だけ操作可能なARN。(ドキュメントの通りにやってもうまく制限できなかった)
      arn:aws:rds:ap-northeast-1:001234567890:db:example_*

テーブル圧縮


Zabbixで監視


RDS slow log/クエリログの有効化

RDSはsshで接続できないのでログを直接みる事ができない。~AWS Management ConsoleおよびAmazon RDS APIを使うとできるようになった。オプションを有効にするとテーブルに出力される

  • mysql.general_log : 全てのクエリを記録
    • test_param_group に対して、「general_log:ON」
      1. rds-modify-db-parameter-group test_param_group -p "name=general_log, value=1, method=immediate"
    • 直近10件の取り出し
      1. echo "select * from mysql.general_log order by event_time desc limit 10;" \
      2.  | mysql --default-character-set=utf8 -u root -p -h mydb.xxxxx.ap-northeast-1.rds.amazonaws.com mysql
  • mysql.slow_log : スロークエリのみ記録
    • ManegementConsole?からはslow_query_logは数分後に変更されたが、long_query_timeはすぐには変更されなかった。
    • test_param_group に対して、「スローログの記録:ON」、「3秒以上かかるクエリの記録」、「10000行以上を対象にするクエリを記録」。数分で適用
      1. rds-modify-db-parameter-group test_param_group -p "name=slow_query_log, value=1, method=immediate"
      2. rds-modify-db-parameter-group test_param_group -p "name=long_query_time, value=3, method=immediate"
      3. rds-modify-db-parameter-group test_param_group -p "name=min_examined_row_limit, value=10000, method=immediate"
    • 確認
      1. mysql -uroot -p -h mydb.xxxxx.ap-northeast-1.rds.amazonaws.com mysql
      2. SHOW global VARIABLES LIKE 'slow_query_log';
      3. SHOW global VARIABLES LIKE 'long_query_time';
      4. SHOW global VARIABLES LIKE 'min_examined_row_limit';
    • 直近10件のslow logの取り出し
      1. echo "select * from mysql.slow_log order by start_time desc limit 10;" \
      2.  | mysql --default-character-set=utf8 -u root -p -h mydb.xxxxx.ap-northeast-1.rds.amazonaws.com mysql
  • ログのクリア。deleteでは削除できないため、用意されているプロシージャを使う。「general_log_backup, slow_log_backup」にリネーム、その後Drop tableされる。
    1. CALL mysql.rds_rotate_general_log;
    2. CALL mysql.rds_rotate_slow_log;

タグの取得

  • api-tool
    • REGION:ap-northeast-1
    • ACCOUNT NO:1234567890
    • DBInstanceIdentifier?:sample
      1. rds-list-tags-for-resource "arn:aws:rds:ap-northeast-1:1234567890:db:sample"
      2. TAG  Name  sample
      3. TAG  var1  hoge1

トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2018-08-17 (金) 14:26:05 (4d)