sql >> データベース >  >> RDS >> Mysql

Gitを使用してmysqlスキーマを追跡する-いくつかの質問

    すでにgitリポジトリがあると仮定して、シェルスクリプトなどで次のことを行います。

    #!/bin/bash -e
    # -e means exit if any command fails
    DBHOST=dbhost.yourdomain.com
    DBUSER=dbuser
    DBPASS=dbpass # do this in a more secure fashion
    DBNAME=dbname
    GITREPO=/path/to/git/repo
    cd $GITREPO
    mysqldump -h $DBHOST -u $DBUSER -p$DBPASS -d $DBNAME > $GITREPO/schema.sql # the -d flag means "no data"
    git add schema.sql
    git commit -m "$DBNAME schema version $(`date`)"
    git push # assuming you have a remote to push to
    

    次に、このスクリプトをcronジョブまたは何を持っているかから毎日開始します。

    編集:スクリプトを$ gitdir / hooks / preに配置します -commit(名前は重要です)。スクリプトはすべてのコミットの前に実行されます。このようにして、コミットごとにDBスキーマの状態がキャプチャされます。これは理にかなっています。コミットするたびにこのSQLスクリプトを自動的に実行すると、データベースが吹き飛ばされてしまいますが、これは意味がありません。

    #!/bin/sh
    

    この行は、それがシェルスクリプトであることを示しています。

    mysqldump -u DBUSER -pDBPASSWORD  DATABASE --no-data=true> SQLVersionControl/vc.sql
    

    これは上記の私の答えと同じです。データベースからのみDDLを取得し、ファイルに保存します。

    git add SQLVersionControl/vc.sql
    

    これにより、リポジトリに対して行われるすべてのコミットにSQLファイルが追加されます。

    exit 0
    

    これにより、スクリプトが正常に終了します。これはおそらく危険です。 mysqldumpの場合 またはgit add 失敗した場合、保持したいものを吹き飛ばす可能性があります。



    1. Hekatonのネイティブにコンパイルされたストアドプロシージャを呼び出さない方法

    2. PHPおよびMySQLのオプションのWHERE条件

    3. ClusterControlを使用してMySQLとMariaDBのPCIコンプライアンスを実現する方法-リプレイ

    4. MySQLユーザー定義変数のストレージ制限