Memo/AmazonWebServices/RDS

https://dexlab.net:443/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が以下で失敗する場合
     Slave_IO_Running: Connecting
    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}
    t1.micro: 34 connections ($0.035)
    m1.small: 150 connections ($0.115)
    m1.large: 640 connections ($0.455)
    m1.xlarge: 1263 connections ($0.920)
    m2.xlarge: 1441 connections ($0.655)
    m2.2xlarge: 2900 connections ($1.315)
    m2.4xlarge: 5816 connections ($2.630)

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

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

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

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

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」
      rds-modify-db-parameter-group test_param_group -p "name=general_log, value=1, method=immediate"
    • 直近10件の取り出し
      echo "select * from mysql.general_log order by event_time desc limit 10;" \
       | 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行以上を対象にするクエリを記録」。数分で適用
      rds-modify-db-parameter-group test_param_group -p "name=slow_query_log, value=1, method=immediate"
      rds-modify-db-parameter-group test_param_group -p "name=long_query_time, value=3, method=immediate"
      rds-modify-db-parameter-group test_param_group -p "name=min_examined_row_limit, value=10000, method=immediate"
    • 確認
      mysql -uroot -p -h mydb.xxxxx.ap-northeast-1.rds.amazonaws.com mysql
      SHOW global VARIABLES LIKE 'slow_query_log';
      SHOW global VARIABLES LIKE 'long_query_time';
      SHOW global VARIABLES LIKE 'min_examined_row_limit';
    • 直近10件のslow logの取り出し
      echo "select * from mysql.slow_log order by start_time desc limit 10;" \
       | 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される。
    CALL mysql.rds_rotate_general_log;
    CALL mysql.rds_rotate_slow_log;

タグの取得

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

トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2018-09-15 (土) 07:31:37 (39d)