web-dev-qa-db-ja.com

MySQLデータベーススキーマをGitHubに含める方法は?

StackoverflowとMySQL-via-command-linen00bはこちら、優しくしてください!私は自分の質問に対する答えを探していましたが、コラボレーションのためのGitHubbing MySQLダンプ(データダンプなど)またはGitHubを介したMySQL「バージョン管理」を扱っているトピックしか見つかりませんでした。どちらも私が知りたいことを教えてくれません。

GitHub上のPHPプロジェクト)のテーブルにMySQLデータベーススキーマ/情報を含めるにはどうすればよいですか?

特定のテーブルを持つMySQLデータベースの存在に依存するGitHub上のPHPプロジェクトを共有したい。誰かがこのプロジェクトをコピー/利用したい場合は、これらの特定のものが必要になりますスクリプトを機能させるためのテーブル(1つを除くすべてのテーブルは最初は空であり、スクリプトを介して時間の経過とともにユーザーによってのみ入力されます。空でないテーブルは最初から3つの値を保持します)。これ、一般的な方法は何ですか

  • 自分のdb /テーブルの(完全な)ダンプファイルを取得し、すべてのデータ部分(空でないテーブルを除く)をすべて削除し、すべての自動インクリメントをゼロに設定してから、その.sqlファイルをGitHubにアップロードしますか?プロジェクトの残りの部分? [〜#〜]または[〜#〜]
  • (おそらくそれほど経験のない)ユーザーがmysqldump /コマンドラインマジックを使用せずにこれらのテーブルを作成できる(PHP)スクリプトを作成するのが最善/より良い方法ですか?

解決策#1が進むべき道である場合、そのような.sqlファイルの使用方法に関する詳細な説明を含めますか?

私の質問がばかげているように聞こえたら申し訳ありませんが、私自身、MySQL関連のものにコマンドラインを使用するのは初めてで、昨日(mysqldumpで最初のダンプファイルを作成したとき)までしかphpMyAdminを使用していませんでした。 。

17
Kay

一般的な方法は、必要なテーブルを作成するインストールスクリプトを含めることです。そのため、解決策2が最適です。

[編集]そのスクリプトは、ダンプを再生するだけでよくあります。 ;)

移行にも興味があるかもしれません: PHP/MySQLアプリケーションの移行(スキーマとデータ)を自動化する方法

7
nietonfir

必要に応じてデータベーススキーマの変更を追跡する

Gitフックを使用できます。
ディレクトリ内[your_project_dir]/.git/hooksスクリプトの追加/編集pre-commit

#!/bin/sh -e
set -o errexit

# -- you can omit next line if not using version table
version=`git log --tags --no-walk --pretty="format:%d" | sed 1q | sed 's/[()]//g' | sed s/,[^,]*$// | sed  's ......  '`

BASEDIR=$(dirname "$0")

# -- set directorey wher schema dump is placed
dumpfile=`realpath "$BASEDIR/../../install/database.sql"`

echo "Dumping database to file: $dumpfile"

# -- dump database schema
mysqldump -u[user] -p[password] --port=[port] [database-name] --protocol=TCP --no-data=true --skip-opt --skip-comments  --routines | \
sed -e 's/DEFINER[ ]*=[ ]*[^*]*\*/\*/' > "$dumpfile"

# -- dump versions table and update core vorsiom according to last git tag
mysqldump -u[user] -p[password] --port=[port] [database-name] [versions-table-name] --protocol=TCP --no-    data=false --skip-opt --skip-comments  --no-create-info  | \
sed -e 's/DEFINER[ ]*=[ ]*[^*]*\*/\*/' | \
sed -e "/INSERT INTO \`versions\` VALUES ('core'/c\\INSERT INTO \`versions\` VALUES ('core','$version');" >> "$dumpfile"

git add "$dumpfile"

# --- Finished
exit 0    

変化する [user], [password], [port], [database-name], [versions-table-name]

このスクリプトは、コミットごとにgitによって自動的に実行されます。タグをコミットすると、新しいバージョンがタグ名でテーブルダンプに保存されます。データベースに変更がない場合、何もコミットされません。スクリプトが実行可能かどうかを確認してください:)インストールスクリプトはこのダンプからSQLクエリを取得でき、開発者はデータベースの変更を簡単に追跡できます。

1
miralong