先月末に数学のテストを終えました。
C単位は降ってきてほしいと切に願います。
あと、中間発表を控えてます。

 

背景

ステージング環境のDBをプロダクション環境のDBへインポートする際に
レコードを消すわけには行かず
・プロダクションにないテーブルは作成
・すでに存在するテーブルはステージングとプロダクションの差異のALTER文を作成して実行
ということを実現したいと思っていたところ

・Workbench
Schemea Sync
・手動
のどれかが解決方法らしい。

Workbenchを使うとうまく行かず、Schema Syncは導入が面倒、手動も面倒ということで
シェルスクリプトで作ってみた。

 

schemaSync – シェルスクリプト

https://gist.github.com/rluisr/ace0513d0251d6ceb2a093cf23b6dafb

できること
・宛先DBにないテーブルを作成
・宛先DBに既にあるテーブルはソース元と差異を取得してALTER文を作成、実行
・AUTO_INCREMENTの値は不変

できないこと
・SSL
・テーブルオプション(文字コード等)の変更はされない

必要なコマンド
・mysql
・mysqldump
・mysqldiff

 

前準備


ソースのテーブル構造

 


宛先のテーブル構図 modifyがありません。

 


宛先テーブルにはレコードを追加しておきます。

 


ソースには追加でテーブルを1つ作り、計2つ

 


宛先DBのテーブルはそのまま1つ

 

実行する

./schemaSync.sh --src-host "localhost" --src-user "root" --src-pass "" --src-db "source" --dst-host "localhost" --dst-user "root" --dst-pass "" --dst-db "destination"


最後にALTER文1つずつに確認画面がでるので
確認しながら実行できまできます。

 


宛先DBにソースのテーブルが作成される。

 


どちらにも存在したusersテーブルはレコードが削除されることなく
ソースで追加したmodifyカラムが追加されました。

割りと実現したいことはできたかも。
他のエラー文を残したまま、WARNING文(パスワードをコマンドに書くな)無視はいつかやろうと思う。

本番環境で使ってみようと思います。
あ、これを使って生じた如何なる問題も僕は責任を持ちません。