2016-12-11 8 views
0

gitでMySQLスキーマを維持するための小さなシェルスクリプトのセットを書きたいと思います。自動インクリメント列の gitでスキーマを追跡するためにmysqldumpをクリーンアップ

  • -- Dump completed on [date and time]を持つ任意のテーブルの定義の最後に

    • AUTO_INCREMENT=[some number]:しかし、一つ核心はmysqldump -uuser -ppass -d devdb > schema.sqlは何スキーマの変更がない場合でも、時間の経過とともに変化する二つのものが含まれていることですend

    私は、これらのものがなくてもダンプを得る方法についてはウェブを精査していません。アドバイスできますか?あるいは、別のコマンドまたはツールを使用して、バージョンコントロールで使用するためのクリーンなスキーマを取得する必要がありますか?

    編集:私はちょうど--skip-dump-dateオプションを見つけたので、ポイント#2を解決しましたが、私はまだ他のテーブル属性を失うことなく自動インクリメント番号を取り除くことができません。エンジンとデフォルトの文字セット

  • +1

    おそらく、Liquibaseのようなツールを使用します。私が見てきたことから、より良いアプローチは、スキーマの各バージョン間の変更セットを追跡することです。 –

    +0

    私はLiquibaseについて聞いたことがありませんでしたが、一見したところ、それは有用に見えます。どのようにgitリポジトリとスムーズに統合するのかは明確ではありませんが(別のVCSのように思えます)、私はそれをさらに研究しなければなりません。もちろん、変更が非破壊的である可能性があることを知るのに十分なほど精巧なアルゴリズムであれば、変更セットがうまくいくでしょう。mysqldiffは便利なツールですが、カラム名を変更しても他のものが残っていても同じ、その提案された "変更"は、列を削除して再追加することです! :-o – OsakaWebbie

    +0

    ああ、私は見る - あなたがしたいことをLiquibaseは推測しようとしない。自分で変更セットを書き込む必要があります(あらかじめ、dev DBを変更させてください)。それは短期的にはもっと仕事のように感じますが、道のりのメリットが分かります。私はまだワークフロー全体(gitリポジトリへの統合を含む)をカバーするチュートリアルは見つけられませんでしたが、私は勉強し続けます。 – OsakaWebbie

    答えて

    1

    #1をバイパスする方法はありません。https://bugs.mysql.com/bug.php?id=20786を確認してください。

    コメント欄に記載されているように、sedコマンドを使用して(それを使用するCREATE TABLE文を使用していない限り)フィルタリングすることができます。

    +0

    Yikes、10歳のバグ!私は完全にオープンソースのソフトウェアの価値を示していると思う。もしこれがオラクルの赤ちゃんでなければ誰でも修正を書いてプルリクエストを提出できるだろう。 sedコマンドが動作します - ありがとう。 – OsakaWebbie

    +0

    誰でも修正を書いてプルリクエストを送信できます。あなたはただOCAに署名しなければなりません:)それがあなたのために働いたと聞いてうれしい! – Guriandoro

    +0

    "OCA"を検索しなければなりませんでした。もし "Oracle Certified Associate"を意味するのであれば、Javaのスキルでテストを購入して渡す必要があります。とにかく、私はただのユーザーです - とにかくJavaを書いていません。 – OsakaWebbie

    関連する問題