MySQL, AWS

AWS RDS PITR+ロールフォワードによるリカバリ 【汎用 RDSのディスク障害からの復旧】

AWS

 

 

 

前提条件

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

RDS MySQL DBダンプコマンドのコツ

 

 

関連

 

メンテナンスモード

書き込みが発生するEC2サーバを全台停止させます!
PITR(特定時点による復元)を行います

2021年11月15日11時35分00秒で復元しました。

 

 

クライアント EC2側作業

S3に退避しているbinlogをダウンロードする

$ cd /ManageBinlog/
$ sh ./downloadBinlogFromS3.sh

 

binlogを確認する

# ls -laht /ManageBinlog/download

total 40K
drwxrwxrwx  2 root root 4.0K Nov 12 04:55 .
-rw-r-----  1 root root  511 Nov 12 04:55 mysql-bin-changelog.001150
・・・
-rw-r-----  1 root root  511 Nov 12 04:55 mysql-bin-changelog.001107
-rw-r-----  1 root root 2.0K Nov 12 04:53 mysql-bin-changelog.001106
-rw-r--r--  1 root root  679 Nov 12 04:47 mysql-bin-changelog.001105

 

# mysqlbinlog --base64-output=DECODE-ROWS -vv mysql-bin-changelog.001106

BEGIN
/*!*/;
# at 295
#211115 11:31:43 server id 312454088  end_log_pos 480 CRC32 0x205c6269 	Query	thread_id=4	exec_time=0	error_code=0
SET TIMESTAMP=1636943503/*!*/;
INSERT INTO mysql.rds_heartbeat2(id, value) values (1,1636943503261) ON DUPLICATE KEY UPDATE value = 1636943503261
/*!*/;
# at 480
#211115 11:31:43 server id 312454088  end_log_pos 511 CRC32 0x20684def 	Xid = 9537
COMMIT/*!*/;
# at 511
#211115 11:35:00 server id 312454088  end_log_pos 568 CRC32 0xf17bbd59 	Rotate to mysql-bin-changelog.001107  pos: 4
SET @@SESSION.GTID_NEXT= 'AUTOMATIC' /* added by mysqlbinlog */ /*!*/;
DELIMITER ;
# End of log file
/*!50003 SET COMPLETION_TYPE=@OLD_COMPLETION_TYPE*/;
/*!50530 SET @@SESSION.PSEUDO_SLAVE_MODE=0*/;

 

 

# mysqlbinlog --base64-output=DECODE-ROWS -vv mysql-bin-changelog.001107

/*!50530 SET @@SESSION.PSEUDO_SLAVE_MODE=1*/;
/*!50003 SET @OLD_COMPLETION_TYPE=@@COMPLETION_TYPE,COMPLETION_TYPE=0*/;
DELIMITER /*!*/;
# at 4
#211115 11:35:00 server id 312454088  end_log_pos 123 CRC32 0x26386e0a 	Start: binlog v 4, server v 5.7.33-log created 211115 11:35:00
# at 123
#211115 11:35:00 server id 312454088  end_log_pos 154 CRC32 0xeaaf167b 	Previous-GTIDs
# [empty]
# at 154
#211115 11:36:58 server id 312454088  end_log_pos 219 CRC32 0xef812253 	Anonymous_GTID	last_committed=0	sequence_number=1	rbr_only=no
SET @@SESSION.GTID_NEXT= 'ANONYMOUS'/*!*/;
# at 219
#211115 11:36:58 server id 312454088  end_log_pos 295 CRC32 0x4d94bf7b 	Query	thread_id=4	exec_time=0	error_code=0
SET TIMESTAMP=1636943818/*!*/;
SET @@session.pseudo_thread_id=4/*!*/;
SET @@session.foreign_key_checks=1, @@session.sql_auto_is_null=0, @@session.unique_checks=1, @@session.autocommit=1/*!*/;
SET @@session.sql_mode=1075838976/*!*/;
SET @@session.auto_increment_increment=1, @@session.auto_increment_offset=1/*!*/;
/*!\C utf8mb4 *//*!*/;
SET @@session.character_set_client=45,@@session.collation_connection=45,@@session.collation_server=8/*!*/;
SET @@session.lc_time_names=0/*!*/;
SET @@session.collation_database=DEFAULT/*!*/;
BEGIN
/*!*/;
# at 295
#211115 11:36:58 server id 312454088  end_log_pos 480 CRC32 0x194ea58a 	Query	thread_id=4	exec_time=0	error_code=0
SET TIMESTAMP=1636943818/*!*/;
INSERT INTO mysql.rds_heartbeat2(id, value) values (1,1636943818262) ON DUPLICATE KEY UPDATE value = 1636943818262
/*!*/;
# at 480
#211115 11:36:58 server id 312454088  end_log_pos 511 CRC32 0x0f5284b5 	Xid = 9765
COMMIT/*!*/;
# at 511
#211115 11:40:00 server id 312454088  end_log_pos 568 CRC32 0x4afbe7a4 	Rotate to mysql-bin-changelog.001108  pos: 4
SET @@SESSION.GTID_NEXT= 'AUTOMATIC' /* added by mysqlbinlog */ /*!*/;
DELIMITER ;
# End of log file
/*!50003 SET COMPLETION_TYPE=@OLD_COMPLETION_TYPE*/;
/*!50530 SET @@SESSION.PSEUDO_SLAVE_MODE=0*/;

 

mysql-bin-changelog.001107のat154から最新のバイナリファイルまでのファイルを入れ込めばリストアできることがわかりました。

 

リストア

復旧クエリの作成

$ mysqlbinlog --skip-gtids -vv --base64-output=DECODE-ROWS \
--start-position=812 --stop-datetime='2021-11-15 16:50:00' \
mysql-bin-changelog.001107 \
mysql-bin-changelog.001108 \
mysql-bin-changelog.001109 \
(略)
mysql-bin-changelog.001150 > /tmp/recovery.sql

 

整形

$ sed -i -e '/DEFINER/d' /tmp/recovery.sql
$ sed -i -e '/session.pseudo_thread_id/d' /tmp/recovery.sql
$ sed -i -e '/PSEUDO/d' /tmp/recovery.sql
$ sed -i -e '/GTID/d' /tmp/recovery.sql

リストアに不必要な記述を削ぎ落とします

 

リストア

 

$ mysql -u admin -h  {リカバリ用新RDSホスト名} -p < /tmp/recovery.sql

必ずリカバリ用の新RDSに対してロールフォワードを行なってください。

 

EC2との連携

EC2の.envを新RDSに連携させます。

 

動作確認

アプリサーバを起動し、新しいRDSに書き込みができることを確認してください。

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Amazonおすすめ

iPad 9世代 2021年最新作

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

コメントを残す

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

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