Oracle MySQL Cloud ServiceでMySQLインスタンスのPoint In Time Recoveryを実行
MySQLCS (MySQL Cloud Service)
ダッシュボードから時間指定でのリストアを実行した時に、バックグラウンドで動いているプロセスの確認になります。
STEP1) 既存データをフルバックアップ
STEP2) 差分データのINSERT
STEP3) 差分バックアップ
STEP4) データの削除
STEP5) STEP3の直前まで時間指定でリストア
STEP6) データの確認
■ FULL BACKUP実行時のデータ
mysql> show tables; +--------------+ | Tables_in_SC | +--------------+ | T_POT_TEST | +--------------+ 1 row in set (0.00 sec) mysql> select * from T_POT_TEST; +----+-----------+---------+ | id | body | type | +----+-----------+---------+ | 1 | 123456789 | INTEGER | | 2 | "abcde" | STRING | +----+-----------+---------+ 2 rows in set (0.00 sec) mysql> select now(); +---------------------+ | now() | +---------------------+ | 2017-01-27 14:20:56 | +---------------------+ 1 row in set (0.00 sec)
■ FULLバックアップ
mysql> select * from backup_history order by backup_id desc limit 1\G *************************** 1. row *************************** backup_id: 14855264590951390 tool_name: /u01/bin/meb/bin/mysqlbackup --user=oracle --backup-dir=/u01/backup/MySQLCS/OPC-MYSQL01/scheduledFull/e27856f6-25d7-45d8-9214-a8a3eb899d0d --backup-image=backufull.mbi --compress backup-to-image start_time: 2017-01-27 14:14:19 end_time: 2017-01-27 14:14:28 binlog_pos: 154 binlog_file: opc-mysql01-mysql-1.000001 compression_level: 1 engines: CSV:InnoDB:MyISAM:PERFORMANCE_SCHEMA innodb_data_file_path: ibdata1:12M:autoextend innodb_file_format: Barracuda start_lsn: 6623068672 end_lsn: 6623068712 incremental_base_lsn: 0 backup_type: FULL backup_format: IMAGE mysql_data_dir: /u01/data/mysql/ innodb_data_home_dir: innodb_log_group_home_dir: /u01/translog/inno-bin-logs innodb_log_files_in_group: 6 innodb_log_file_size: 1073741824 backup_destination: /u01/backup/MySQLCS/OPC-MYSQL01/scheduledFull/e27856f6-25d7-45d8-9214-a8a3eb899d0d lock_time: 0.809 exit_state: SUCCESS last_error: NO_ERROR last_error_code: 0 1 row in set (0.01 sec)
■ FULL BACKUP後にデータをINSERT
mysql> insert into T_POT_TEST(body) values('"PITR TEST"'); Query OK, 1 row affected (0.11 sec) mysql> select * from T_POT_TEST; +----+-------------+---------+ | id | body | type | +----+-------------+---------+ | 1 | 123456789 | INTEGER | | 2 | "abcde" | STRING | | 3 | "PITR TEST" | STRING | +----+-------------+---------+ 3 rows in set (0.00 sec) mysql> select now(); +---------------------+ | now() | +---------------------+ | 2017-01-27 14:21:46 | +---------------------+ 1 row in set (0.00 sec) mysql>
■ ここで差分を取得してみる。
mysql> select * from backup_history order by backup_id desc limit 1\G *************************** 1. row *************************** backup_id: 14855271179669251 tool_name: /u01/bin/meb/bin/mysqlbackup --user=oracle --backup-dir=/u01/backup/MySQLCS/OPC-MYSQL01/scheduledIncremental/63412628-3fcd-4b60-9e9d-ef1bacc15032 --backup-image=backup_incremental.mbi --incremental_base=dir:/u01/backup/MySQLCS/OPC-MYSQL01/scheduledFull/e27856f6-25d7-45d8-9214-a8a3eb899d0d --incremental backup-to-image start_time: 2017-01-27 14:25:17 end_time: 2017-01-27 14:25:21 binlog_pos: 19807766 binlog_file: opc-mysql01-mysql-1.000002 compression_level: 0 engines: CSV:InnoDB:MyISAM:PERFORMANCE_SCHEMA innodb_data_file_path: ibdata1:12M:autoextend innodb_file_format: Barracuda start_lsn: 6623068713 end_lsn: 6633728074 incremental_base_lsn: 0 backup_type: INCREMENTAL backup_format: IMAGE mysql_data_dir: /u01/data/mysql/ innodb_data_home_dir: innodb_log_group_home_dir: /u01/translog/inno-bin-logs innodb_log_files_in_group: 6 innodb_log_file_size: 1073741824 backup_destination: /u01/backup/MySQLCS/OPC-MYSQL01/scheduledIncremental/63412628-3fcd-4b60-9e9d-ef1bacc15032 lock_time: 0.684 exit_state: SUCCESS last_error: NO_ERROR last_error_code: 0 1 row in set (0.00 sec) mysql>
■テーブルからデータを削除します。
mysql> truncate table T_POT_TEST;select * from T_POT_TEST;select now(); Query OK, 0 rows affected (0.02 sec) Empty set (0.00 sec) +---------------------+ | now() | +---------------------+ | 2017-01-27 14:28:32 | +---------------------+ 1 row in set (0.00 sec) mysql>
■ 目標リストア時間を指定してリストア
2017-01-27 14:21:45
※こちらの画像はサンプルですので、時間は上記の時間を指定しました。
■ダッシュボードから時間指定でリストア開始
STEP1) フルリストアが実行されている
[oracle@opc-mysql01-mysql-1 ~]$ ps -ef | grep mysql oracle 14423 14348 20 14:31 ? 00:00:05 /u01/bin/meb/bin/mysqlbackup --user=oracle --cloud-service=openstack --cloud-user-id=Storage-xxxxxxx:xxxxx.xxxxx@oracle.com --cloud-password=xxxxxxxxxx --cloud-tempauth-url=https://xxxxxxx.storage.oraclecloud.com --cloud-container=mysqlstorage --cloud-object=MySQLCS/OPC-MYSQL01/scheduledFull/e27856f6-25d7-45d8-9214-a8a3eb899d0d/backup_full.mbi --backup-dir=/u01/backup/MySQLCS/OPC-MYSQL01/scheduledFull/e27856f6-25d7-45d8-9214-a8a3eb899d0d --cloud-ca-info=/etc/ssl/certs/ca-bundle.crt --datadir=/u01/data/mysql-14348 --innodb_log_group_home_dir=/u01/translog/inno-bin-logs-14348 --backup-image=- --uncompress --force copy-back-and-apply-log oracle 14459 10312 0 14:32 pts/0 00:00:00 grep mysql [oracle@opc-mysql01-mysql-1 ~]$
STEP2) 差分リストアが実行されている
[oracle@opc-mysql01-mysql-1 ~]$ ps -ef | grep mysql oracle 14509 1 0 14:33 ? 00:00:00 /bin/sh ./bin/mysqld_safe --skip-networking oracle 15593 14509 25 14:33 ? 00:00:06 /u01/bin/mysql/bin/mysqld --basedir=/u01/bin/mysql --datadir=/u01/data/mysql --plugin-dir=/u01/bin/mysql/lib/plugin --skip-networking --log-error=/u01/data/mysql/opc-mysql01-mysql-1.err --open-files-limit=20000 --pid-file=/u01/data/mysql/opc-mysql01-mysql-1.pid oracle 15721 14348 0 14:33 ? 00:00:00 /bin/sh -c /u01/bin/mysql/bin/mysqlbinlog --skip-gtids --start-position=154 --stop-datetime="2017-01-27 14:21:45" /u01/backup/temp/datadir/opc-mysql01-mysql-1.000001 /u01/backup/temp/datadir/opc-mysql01-mysql-1.000002|/u01/bin/mysql/bin/mysql -uoracle oracle 15722 15721 1 14:33 ? 00:00:00 /u01/bin/mysql/bin/mysqlbinlog --skip-gtids --start-position=154 --stop-datetime=2017-01-27 14:21:45 /u01/backup/temp/datadir/opc-mysql01-mysql-1.000001 /u01/backup/temp/datadir/opc-mysql01-mysql-1.000002 oracle 15723 15721 3 14:33 ? 00:00:00 /u01/bin/mysql/bin/mysql -uoracle oracle 15729 10312 0 14:34 pts/0 00:00:00 grep mysql [oracle@opc-mysql01-mysql-1 ~]$
STEP3) MySQLの起動
[oracle@opc-mysql01-mysql-1 ~]$ ps -ef | grep mysql oracle 15811 1 1 14:35 ? 00:00:00 /bin/sh ./bin/mysqld_safe oracle 16875 15811 28 14:35 ? 00:00:00 /u01/bin/mysql/bin/mysqld --basedir=/u01/bin/mysql --datadir=/u01/data/mysql --plugin-dir=/u01/bin/mysql/lib/plugin --log-error=/u01/data/mysql/opc-mysql01-mysql-1.err --open-files-limit=20000 --pid-file=/u01/data/mysql/opc-mysql01-mysql-1.pid oracle 16974 10312 0 14:35 pts/0 00:00:00 grep mysql [oracle@opc-mysql01-mysql-1 ~]$
※ リストアが問題無く終わると自動的にFULLバックアップの取得が開始されます。
■リストア後のデータ確認
mysql> select * from T_POT_TEST;select now(); +----+-------------+---------+ | id | body | type | +----+-------------+---------+ | 1 | 123456789 | INTEGER | | 2 | "abcde" | STRING | | 3 | "PITR TEST" | STRING | +----+-------------+---------+ 3 rows in set (0.00 sec) +---------------------+ | now() | +---------------------+ | 2017-01-27 14:36:26 | +---------------------+ 1 row in set (0.00 sec) mysql>