如何在GitHub上包含MySQL数据库模式?

如何在GitHub上包含MySQL数据库模式?,mysql,github,mysqldump,database-schema,dump,Mysql,Github,Mysqldump,Database Schema,Dump,Stackoverflow和MySQL通过命令行n00b在这里,请温柔!我一直在寻找我问题的答案,但只能找到关于Githubing MySQL转储(如:数据转储)的主题,用于协作或通过GitHub的MySQL“版本控制”,这两个主题都没有告诉我我想知道什么: 如何在GitHub上包含包含PHP项目的表上的MySQL数据库模式/信息? 我想在GitHub上共享一个PHP项目,该项目依赖于MySQL数据库和某些表的存在。如果有人想要复制/使用这个项目,他们需要准备好这些特定的表,以使脚本工作(除了一

Stackoverflow和MySQL通过命令行n00b在这里,请温柔!我一直在寻找我问题的答案,但只能找到关于Githubing MySQL转储(如:数据转储)的主题,用于协作或通过GitHub的MySQL“版本控制”,这两个主题都没有告诉我我想知道什么:

如何在GitHub上包含包含PHP项目的表上的MySQL数据库模式/信息?

我想在GitHub上共享一个PHP项目,该项目依赖于MySQL数据库和某些表的存在。如果有人想要复制/使用这个项目,他们需要准备好这些特定的表,以使脚本工作(除了一个表之外,所有表在开始时都是空的,并且随着时间的推移,只有用户通过脚本才能填充;非空表从一开始就保存三个值)。如何做到这一点,通常的做法是什么

  • 那么,我会得到一个我自己的db/表的(完整的)转储文件吗 删除所有数据部分(非空数据部分除外 表),将所有自动增量设置为零,然后上载该.sql文件 将GitHub与项目的其余部分一起使用? 或
  • 编写一个(PHP)脚本以使 (可能不是很有经验)用户可以创建这些表,而无需 必须使用mysqldump/命令行魔法
如果解决方案#1是一条可行之路,我是否会进一步说明如何使用这样的.sql文件


很抱歉,如果我的问题听起来很傻,但正如我上面所说的,我自己对使用MySQL相关的命令行是新手,直到昨天(当我用mysqldump-yay创建第一个转储文件时)才使用过phpMyAdmin。

常见做法是包含一个创建必要表的安装脚本,因此,解决方案2将是一条可行之路

[编辑]该脚本可能只是重播转储。;)


您可能还对迁移感兴趣:

如果您还想跟踪数据库架构更改

您可以使用git挂钩。
在目录
[your_project\u dir]/.git/hooks
添加/编辑脚本
预提交

#!/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    
更改
[用户],[密码],[端口],[数据库名称],[版本表名称]

git在每次提交时自动执行该脚本。如果提交标记,则按标记名将新版本保存到表转储。如果数据库中没有更改,则不会提交任何内容。确保脚本是否可执行:)
您的安装脚本可以从这个转储中获取sql查询,开发人员可以轻松跟踪数据库更改。

Ha,我真的认为这将是一个便宜、简单(而且对于不那么精明的用户来说也不太好)的解决方案#1!意味着我必须在项目中投入更多的工作。:)谢谢你的帮助+1用于迁移。允许您将更改与初始数据库架构分开。我一直在使用Phinx,从Laravel的背景来看,它相对容易。