GIT(MySQLダンプ管理)のデータベースバージョン管理メカニズム

ハブラ愛好家の皆さん、こんにちは! 今日、MySqlからデータバックアップのバージョンを共有し、Gitでバージョン管理に使用する方法について話し合うことにしました。 また、開発のすべての段階でデータベースの状態を監視する方法、またはプロジェクトデータベースの正しいバックアップを作成していつでも展開する方法を学びたい場合は、それを読んでください!







これは何ですか



これは、BASHで記述されたスクリプトのセットであり、このシェルが動作するほぼすべてのマシンで動作できるようにし、バックアップの作成と展開を容易にするように設計されています。 元のアイデアは、開発者のチームがプロジェクトを作成するときにデータベースブレークポイントを作成し、それをgitaに保存できるというものでした。







誰のため?



たとえば、顧客のホスティングですぐにサイトを開発し、データベースの開発と変更の進捗を監視することを好みます。 優れたデータベースバージョン管理製品に投資するお金がほとんどない(またはヒキガエルが窒息している)場合。 クラウンが使用できる特定のルールのデータバックアップとしてプロジェクトを使用することもできます。 もちろん、初心者の開発者で、開発の基本を学び始めたばかりで、定期的に500番目を獲得し、その理由がわからない場合に役立ちます。 または、製品をチームとして開発しており、顧客を評価するためにマスターにプッシュするときに製品と製品を自動的に同期させたい場合。







ホスト側での標準的なサイト開発の例を考えてみましょう(ほとんどの場合):







  1. プロジェクトがスピンしているサーバーがあり、ほとんどの場合、ローカルマシンまたは現在のプロジェクトをホストしているクライアントのいずれかです。
  2. ローカルコンピューターがあり、従来はそこにファイルと状態のスナップショットを保存していました。
  3. そして、生産、これは最終製品がマージする場所です-しかし、それは最初のアイテム、ちょうど別のフォルダでもありえます。


どのように作業するのですか?



gitを使用してデータベースのバージョン管理に準拠するためには、明らかに、いくつかの段階でダンプを取得し、どこかに保存し、ブランチを切り替えるときにこの点を考慮する必要があります。 このために、対応するスクリプトのファイルであるgitフックを使用しました(これらはgitが使用されているローカルコンピューターにインストールする必要があります)。 構成ファイルの設定に応じて、ワークプロセス次のようになります。







ブランチを作成し(バックアップは自動的に行われます)、切り替え、作業、ファイルの追加、コミットの作成(バックアップは自動的に行われます)...

マスター検証に切り替え、データベースは前の状態に切り替えました...

開発に戻り、ブランチをマージして開始しました。 つまり コミット中にバックアップが自動的に作成され、

チェックアウト前に強制されるか、動作は構成で構成されます。 適切なスクリプトを実行することにより、ローカルコンピューターからサーバー上のデータベースを手動でエクスポートまたはインポートできます。







各スクリプトについて、-hまたは--help引数を使用して、古典的な方法でヘルプを取得できます。







データベース全体をバックアップすることはお勧めしません。gitは大きなファイルを好みません。ほとんどの場合、これは必要ありません。 したがって、 config.ini



を使用して簡単に構成できますconfig.ini



設定はサーバー側(mySqlが発生する側)とクライアント側(開発者のコ​​ンピューター)の両方で使用されるため、同じファイルが構成を担当します。 もちろん、ローカルで開発している場合は同じコンピューターでもかまいません。







ダンプを作成するために構成できるもの





ダンプを作成するプロセスを容易にするため。 ファイルプロバイダーを使用しました。 そして、CMS MODX革命のための設定(これまでのところ唯一)。 それに基づいて、CMSに同じプロバイダーを作成できます。







始めるための簡単な手順



  ,       .git,   ,     git [git clone ](https://github.com/Setest/.git-db-watcher)          chmod +x install.sh;   ./install.sh   ,     ./install.sh -nh
      
      





次に、 config.ini



変更を加える必要があります。 たとえば、次のように:







 ;  [hooks] ; H_CHECK_DB_HASH_BEFORE_CHECKOUT=1 ;      checkout      ;           ;  git checkout -b new_branch_name H_CHECKOUT_FORCE=0 ;        H_CHECKOUT_EVERCOM=1 ;       H_CHECKOUT_CLEARCACHE=1 [common] ;       EXPORT_FILE="db.sql" ;           ;   ./export.sh [develop] ;  db_export.sh   CLI_DB_EXPORT="ssh host '/path/to/project/on/server/.git-db-watcher/db_export.sh'" CLI_DB_IMPORT="ssh host '/path/to/project/on/server/.git-db-watcher/db_import.sh'" ;   [server] PHP_PATH="/usr/local/bin/php" CONFIG_INC_PATH="/path/to/project/on/server/core/config/config.inc.php" PROVIDER=modx DB_TABLES_INCLUDE=site_content DB_TABLES_AUTOPREFIX=1 [server_full_site] PHP_PATH="/usr/local/bin/php" CONFIG_INC_PATH="/path/to/project/on/server/core/config/config.inc.php" ; '' -       DB_CONFIG_     ;  providers PROVIDER=modx ;          DB_CONFIG_HOST= DB_CONFIG_TYPE= DB_CONFIG_USER= DB_CONFIG_PASSWORD= DB_CONFIG_CONNECTION_CHARSET= DB_CONFIG_DBASE= DB_CONFIG_TABLE_PREFIX= DB_CONFIG_DATABASE_DSN= ;        ( ) ;     ; DB_TABLES_INCLUDE=manager_log register_messages user_attributes ; DB_TABLES_INCLUDE=site_content ;    ; DB_TABLES_EXCLUDE=session register_messages mse2_words ec_messages ; ,    ,    DB_TABLES_AUTOPREFIX=1 ;       INSERT DB_TABLES_REMOVE_INSERT="manager_log session register_messages" ; DB_TABLES_REMOVE_INSERT="manager_log" ;        ; DB_TABLES_DEFAULT=user_attributes users DB_TABLES_DEFAULT=user_attributes ;   ,     ;       ,     ;    DB_TABLES_DEFAULT_user_attributes=sessionid logincount lastlogin thislogin ; DB_TABLES_DEFAULT_users=session_stale ;  ,     [only_users] DB_TABLES_INCLUDE=user user_attributes EXPORT_FILE="users.sql" DB_TABLES_DEFAULT=user_attributes user DB_TABLES_DEFAULT_user_attributes=sessionid logincount lastlogin thislogin DB_TABLES_DEFAULT_users=session_stale
      
      





すべてが正しく構成されている場合、。 ./export.sh



を実行できます。

データベースダンプがローカルコンピューターとサーバーに表示されます。







その他の質問



サーバー上の結果を別の場所に保存する必要があります。


  ./db_export.sh --output 1>./xxx.sql
      
      





構成ファイルのセクション内のデータを使用してサーバーにエクスポートしたい:


  ./db_export.sh -=only_users --output 1>./users.sql
      
      





データベースファイルをインポートしたいのですが、GITインターセプターを介してインポートしたくないのですか?


  ./import.sh ./import.sh EXPORT_FILE=site_name.sql ./import.sh DB_BACKUP_FILE=/.../../site_name.sql ./import.sh --config=site DB_BACKUP_FILE=./site_name.sql
      
      





サーバーにいる間にインポートする方法は?


  ./db_import.sh < db_backup/db.sql
      
      





さまざまなプロジェクトで、CMS xxxを使用していますが、毎回データを入力するのにうんざりしています

データベース管理の場合、プロセスをどのように簡素化できますか?

これを行うには、既存のものと同様にプロバイダーファイルを作成する必要があります。







PHPプロバイダーを使用してCRONジョブと構成を作成しましたが、

実行されていない、またはCMSサイトキャッシュがクリアされていない場合、何が問題ですか?

サーバーの設定とジョブ自体に応じて、CRONジョブは完全に異なる環境で実行できます。この環境では、PHPプリプロセッサへのパスが異なり、その結果、CMSが実行されているものと互換性のないまったく異なるバージョンのPHPを実行します。







あとがき



私はBASHでスクリプトを書いたことがないので、おそらく ナゴボコジル 、興味がある場合は編集を追加できる有能な人がいると確信しています。 私はこのプロジェクトを次の関心事として開発し、作品のエラーを特定します。







また、何も機能しないことをすぐに悪口にしないでください。正しく構成およびインストールする方法がわからない可能性があります(特にWindowsで作業している場合でも、BASHはLinux環境です)。







インストールおよび使用手順はREADMEにあります。 私はすぐに英語で書くことを試みましたが、アマチュアのレベルのために、すべてが明確ではないかもしれません。将来はロシア語で書きます。 翻訳またはコードを変更したい場合は、健康のために分岐してください! そして、良いアドバイスがあれば-それを共有してください。







PS:一番下まで読むと、面白くなり、試してみたいと思うようになりました:-)







次に、このリファレンスを大胆に見てください!








All Articles