はじめに
MySQL HeatWave Service いわゆるMHS(MDS またはHeatWave)のレプリカでトランザクションをスキップする場合、MySQLのドキュメントにある方法だと全てが使えるわけじゃないので書いておきます。
特にソースがGTID無効(非GTID)にしたレプリケーションの場合が分かりづらかったので参考にしてください。
MHSで非GTIDレプリにてトランザクションをスキップするには
MHSがレプリカかつソースがGTIDが無効な場合、ここにあるいくつかの方法が使えません。
使えるのは
mysql>CHANGE MASTER TO MASTER_LOG_FILE='source_log_name', MASTER_LOG_POS=source_log_pos;
またはMySQL 8.0.24以降なら
mysql>CHANGE REPLICATION SOURCE TO SOURCE_LOG_FILE='source_log_name', SOURCE_LOG_POS=source_log_pos;
のいずれかです。
スキップ作業の流れ
作業の流れとしては
1.mysqlbinlogコマンドでソースのバイナリログを確認
2.スキップしていいクエリ・ポジションを確認
3.STOP REPLICA;
4.CHANGE MASTER またはCHANGE REPLICATION SOURCEでスキップ
5.START REPLICA;
となります。
MHSで使えない方法
その1 SET GLOBALが使えない
MHSでは残念ながらSET GLOBALが使えない。つまり
mysql>SET GLOBAL sql_slave_skip_counter = N;
や
mysql>SET GLOBAL sql_replica_skip_counter = N;
でトランザクションをスキップすることができない。(実行すると以下のエラーが出る)
ERROR: 1227 (42000): Access denied; you need (at least one of) the SUPER or SYSTEM_VARIABLES_ADMIN privilege(s) for this operation
では、Configuration(MySQLで言うmy.cnf|my.iniのようなもの)で設定すればいいじゃないかと思うだろうが、sql_slave_skip_counter やsql_replica_skip_counter は変更できる変数ではない。
ここにあるものだけが変更できる。
その2 CHANGE REPLICATION SOURCE TO SOURCE_AUTO_POSITION=1;も使えない
CHANGE MASTER TO MASTER_AUTO_POSITION=1; やCHANGE REPLICATION SOURCE TO SOURCE_AUTO_POSITION=1;を使った場合もエラーが出る
ERROR 1227 (42000): Access denied; you need (at least one of) the SUPER or REPLICATION_SLAVE_ADMIN privilege(s) for this operation
そのため、トランザクションをスキップしたい場合、最初に書いた方法となる。
MHSでGTIDレプリにてトランザクションをスキップするには
ここに書かれている以下の方法でスキップする。
SET GTID_NEXT='aaa-bbb-ccc-ddd:N'; BEGIN; COMMIT; SET GTID_NEXT='AUTOMATIC';
ただし
GTID版もドキュメントにある方法全部が使えるわけではなく、以下のコマンドは実行できないので注意が必要。
FLUSH LOGS; PURGE BINARY LOGS TO 'binlog.000xxx';
原因としてはこちらも実行するための権限が無いためです。
おまけ
OCI MHS APIを使うと同じようなことができるっぽいが、それは試してない。
AssignTargetUuidHandling — oci 2.119.1 documentation
バイナリログファイル名をlast_configured_log_filenameに、ポジションをlast_configured_log_offsetに設定するようだ。
OCI MHS API、今度試してみるか。
さいごに
こういうこと書くとMHS不便やなー、使いづらそうだなーとか思うかもしれませんが、ゴリッゴリにいじらなくて済むようになってると考えたら逆にスッキリしてますよね。
DBAが余計なことを考えなくて済むようにしてるので、実際には移行してしまえば何かしらやりようはあるので慣れます。
問題はドキュメントが分かりづらかったり、記載が足りなかったりすることなので、それは内部でプッシュし続けていきます。