MySQLのデータベースをインポートする際に存在するテーブルのレコードを削除せずにALTER文を作成、実行するスクリプトを作った
先月末に数学のテストを終えました。 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
前準備
宛先テーブルにはレコードを追加しておきます。
実行する
./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つずつに確認画面がでるので
確認しながら実行できまできます。
どちらにも存在したusers
テーブルはレコードが削除されることなく
ソースで追加したmodify
カラムが追加されました。
割りと実現したいことはできたかも。 他のエラー文を残したまま、WARNING文(パスワードをコマンドに書くな)無視はいつかやろうと思う。
本番環境で使ってみようと思います。 あ、これを使って生じた如何なる問題も僕は責任を持ちません。