MariaDB 10.2.4の –flashback を触ってみる

ドキュメントはこちら。
Flashback – MariaDB Knowledge Base

“Common use case” をとっても雑に説明すると、
--flashback をつけたmysqldが吐いたバイナリーログに対して
mysqlbinlog --flashback でデコードすると、フラッシュバックっぽいことができる
という感じ。

まず、サーバー側の --flashback について。

https://github.com/MariaDB/server/blob/mariadb-10.2.4/sql/mysqld.cc#L9541-L9551

binlog_format= ROWにセットしてくれるだけぽい。 --flashback じゃなくても --log-bin --binlog_format=ROW --binlog-row-format=FULL で吐かせたバイナリーログでも大丈夫だった。ので、特に気にしなくて良さそう。

mysqlbinlog側の --flashback が肝。

https://github.com/MariaDB/server/blob/mariadb-10.2.4/client/mysqlbinlog.cc#L1455-L1468

↑で順番にイベントを読み込んでバッファに入れておいたものを(この時点でchange_to_flashback_eventを呼んでフラッシュバック用にクエリーを書き換えているぽい)
↓で後ろから順番に取り出す。

https://github.com/MariaDB/server/blob/mariadb-10.2.4/client/mysqlbinlog.cc#L3019-L3034

バイナリーログのイベントを逆転させてるのは↓のあたり。

https://github.com/MariaDB/server/blob/mariadb-10.2.4/sql/log_event.cc#L3417-L3460

というわけで、

なんてことをやったbinlogを見ると、

これが、 --flashback をつけるとこうなる。

--flashback の方は時間降順に並んでいるのがちょっと面白い。
これで、--start-datetime で時間を指定してやれば、それ以降のDMLをフラッシュバック(個人的にはリバートと呼びたい)するためのDMLが手に入って、それを適用すればフラッシュバック(個人的には略)完了。

RBRだからそれなりには時間がかかるはず。やっぱリバートで良いじゃん。。

めいじさんエスパー! 🙂

この辺( --review みたいなのがある)は後々なのかな(このマクロが有効化されてる箇所は見当たらなかった)

https://github.com/MariaDB/server/blob/mariadb-10.2.4/client/mysqlbinlog.cc#L1587-L1599

投稿日:February 20th 2017

元記事:http://yoku0825.blogspot.com/2017/02/mariadb-1024-flashback.html

– PR –
– PR –