【问题标题】:How to include MySQL database schema on GitHub?如何在 GitHub 上包含 MySQL 数据库模式?
【发布时间】:2013-04-29 21:31:00
【问题描述】:

这里是 Stackoverflow 和 MySQL-via-command-line n00b,请轻点!我一直在寻找我的问题的答案,但只能通过 GitHub 找到处理 GitHubbing MySQL 转储(如:数据转储)以进行协作或 MySQL“版本控制”的主题,这两者都没有告诉我我想知道什么:

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

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

  • 我是否会获得我自己的 db/tables 的(完整)转储文件,然后 删除所有数据部分(除了那个非空的 表),将所有自动增量设置为零,然后上传该 .sql 文件 与项目的其余部分一起到 GitHub?
  • 最好/更好的做法是编写一个 (PHP) 脚本 (也许不是那么有经验)用户可以创建这些表而无需 必须使用 mysqldump/命令行魔法?

如果解决方案 #1 是可行的方法,我是否会提供有关如何使用此类 .sql 文件的进一步说明?

对不起,如果我的问题听起来很愚蠢,但正如我上面所说,我自己是使用命令行处理 MySQL 相关内容的新手,并且直到昨天才使用过 phpMyAdmin(当我使用 mysqldump 创建我的第一个转储文件时 -耶!)。

【问题讨论】:

    标签: mysql github mysqldump database-schema dump


    【解决方案1】:

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

    [edit] 该脚本可以只重放转储。 ;)

    您可能也对迁移感兴趣:How to automate migration (schema and data) for PHP/MySQL application

    【讨论】:

    • 哈,我真的认为这将是一种便宜又简单的解决方案(对于不那么精明的用户来说不太好)#1!意味着我必须在项目中投入更多的工作。 :) 感谢您的帮助!
    • +1 用于迁移。允许您将更改与初始数据库模式分开。来自 Laravel 背景,我一直在相对轻松地使用 Phinx。
    【解决方案2】:

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

    你可以使用 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 查询,开发人员可以轻松跟踪数据库更改。

    【讨论】:

      猜你喜欢
      • 2016-08-02
      • 2016-12-20
      • 2023-03-11
      • 1970-01-01
      • 1970-01-01
      • 2016-04-26
      • 2016-12-03
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多