您好,哈布拉恋人! 今天,我决定与MySql共享我的数据备份版本,并讨论如何将其用于Git中的版本控制。 并且,如果您想知道如何在开发的所有阶段监视数据库的状态,或者只是对项目数据库进行正确的备份并随时进行部署,那么请阅读!
这是什么
这是一组用BASH编写的脚本,该脚本使它们可以在几乎所有可运行此Shell的计算机上工作,旨在促进备份的创建和部署。 最初的想法是,当由一组开发人员编写项目时,您可以创建数据库断点,并将其存储在Gita中,我知道为此目的还有更严重的事情,并且此解决方案并不声称能代替他们。
为谁?
例如,您希望在客户托管时立即开发站点,并监视开发进度和数据库更改。 您可能没有钱(或蟾蜍扼杀)将其花费在好的数据库版本控制产品上。 您也可以将项目用作某些规则的数据备份,供Crown使用。 当然,如果您是新手开发人员并且刚刚开始学习开发基础知识,并且定期拥有第500名,并且您不知道为什么,它将很方便。 或者您正在以团队形式开发产品,并希望在推向主评估客户时自动将其与生产同步。
考虑在主机端进行标准站点开发的示例(大多数情况):
- 有一个正在运行项目的服务器,很可能是本地计算机或当前项目的客户端托管。
- 有一台本地计算机供您工作,并且根据传统,将文件和状态快照存储在该计算机中。
- 和生产,这是最终产品合并的地方-但它也可以是第一项,只是另一个文件夹。
如何使用它?
为了符合使用git进行的数据库版本控制,显然,您需要在某些阶段获取其转储,并将其存储在某个位置,并且在切换分支时,请考虑这一点。 为此,我使用了git钩子,它们是相应脚本的文件(它们必须安装在使用git的本地计算机上)。 根据配置文件设置,工作过程可能如下所示:
我们创建一个分支(自动进行备份)并切换,工作,添加文件,创建提交(自动进行备份)...
切换到主验证,数据库切换到以前的状态...
回到发展,合并分支机构,开始。 即 在提交过程中会自动创建备份,
要么在结帐前强制执行,要么在配置中配置行为。 您可以通过运行适当的脚本从本地计算机手动调用导出或导入服务器上的数据库。
对于每个脚本,您都可以使用-h或--help参数以经典方式获得帮助。
我不建议备份整个数据库,git不喜欢大文件,并且在大多数情况下这不是必需的。 因此,您可以轻松地使用config.ini
配置,因为设置是在服务器端(引发mySql的服务器)和客户端端(开发人员的计算机)都使用的,所以同一文件负责配置。 当然,如果在本地进行开发,则可以是同一台计算机。
可以配置什么来创建转储
- 数据库连接设置和转储存储路径
- 提供者的指示,该提供者不仅将能够获取数据库连接数据,而且能够获得
并在切换分支时正确清除服务器上的缓存。 - 导出整个数据库
- 列表中要排除的表
- 或导出特定表
- 保存结构而不在某些表中插入数据
- 为不应导出值且应导出值的表指定字段
替换为默认值。 - 在一个配置中使用单独的规则集,这将允许您通过CRON进行不同的备份
为了方便创建转储的过程。 我使用了文件提供程序。 并设置了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 provider创建了CRON作业和配置,但是它
没有运行,或者CMS站点缓存未清除,怎么回事?
根据服务器设置和作业本身,CRON作业可以在完全不同的环境中运行,在该环境中php预处理程序的路径可能不同,因此,运行与CMS正在运行的php版本不兼容的完全不同的php版本。
后记
我从未在BASH上编写脚本,因此可能 纳戈沃科迪尔 ,我相信有能力的人,如果有兴趣的话,将能够添加他们的编辑。 我将根据项目的兴趣和发现工作中的错误来开发项目。
并且不要马上就觉得没有任何效果,也许您无法弄清楚如何正确配置和安装(特别是如果您使用Windows,而BASH是Linux环境)。
安装和使用说明在README中。 我试图立即用英语写作,但是由于我的业余水平,也许并不是所有事情都会变得清楚,将来我会用俄语写作。 如果要更改翻译或代码,请注意健康! 如果有好的建议,请分享。
PS:如果您读到最底层,那么它变得很有趣并且渴望尝试:-)
然后大胆参考该参考!