🦁

MySQLでデータの差分を取りたい その2

2023/09/20に公開

実現したいこと

何らかの処理で、変更されたテーブルは判明している
テーブルの中のどのデータが、どのように書き換わったか確認したい

課題

selectの結果をファイルに書き出してdiffを取っても、テーブルの属性が多いとどこが変更されたのか探し出すのが大変

方法

MySQLの場合\Gをselect文の末尾につければ結果が縦に表示されるので、この結果に対して差分を取ればよい

おまけ

dockerコンテナにある2つのDBインスタンス間のテーブルを突合するスクリプトの例
(以前書いたMySQLでデータの差分を取りたい その1のような環境を想定)

TABLE_NAME=$1
DOCKER_CONTAINER=比較用dockerコンテナのID

cd ./dump/table

docker exec -it $DOCKER_CONTAINER mysql -u root db_1 -e"select * from ${TABLE_NAME}\G" > ${TABLE_NAME}1
docker exec -it $DOCKER_CONTAINER mysql -u root db_2 -e"select * from ${TABLE_NAME}\G" > ${TABLE_NAME}2

diff ${TABLE_NAME}1 ${TABLE_NAME}2

スクリプト実行結果 (テーブル名table01を引数で渡している)

コミューン株式会社

Discussion