🦁
MySQLでデータの差分を取りたい その2
実現したいこと
何らかの処理で、変更されたテーブルは判明している
テーブルの中のどのデータが、どのように書き換わったか確認したい
課題
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