我正在开发一个WordPress网站,在我的笔记本电脑上进行开发,然后通过git推送到服务器来部署更改。这适用于文件,我希望对数据库的内容更改做同样的事情。
我解决问题的第一次迭代使用git hooks在提交之前使用mysqldump
转储数据库,然后在签出后恢复转储。这可以工作,但每次都会丢弃并重新创建整个数据库。这不行,因为WordPress也会自动对我想保留的数据库进行更改,比如销售哪些产品的记录,所以我不希望整个事情都被删除并恢复每次结账。
我认为更好的解决方案是在提交期间继续转储数据库,然后对于签出使用读取git diff HEAD^
输出的新工具并将其转换为INSERT和DELETE SQL语句,将其转换为{{ 1}}。这样,数据库将随着我的更改逐步修补,同时保留其他人(例如WordPress)所做的更改。例如:
git diff:
mysql
转换为SQL:
(83,NULL,550,'TI-99/4A','',0,0,0,0,'',0,0,0),
-(85,NULL,2000,'Banana Jr. 6000','',0,0,0,0,'',0,0,0),
+(85,NULL,2000,'Banana Jr. 6000 (now with tint control!)','',0,0,0,0,'',0,0,0),
(88,NULL,150,'Symbolics 3645','',0,0,0,0,'',0,0,0),
我四处搜寻,找不到这样的东西。我正在考虑自己写作。
这样的事情存在吗?这是好主意还是坏主意?
答案 0 :(得分:0)
据我所知,这种工具不存在。我知道产生类似输出的最佳选择是使用Synchronize Model中的“MySQL Workbench”功能。
也就是说,我建议您在SQL文件中跟踪您在开发数据库中所做的更改,检查git,这可以在您的生产服务器上执行。
答案 1 :(得分:0)
我想到了一种可能的方法:
我将数据库转储到每个表的不同文件中:
wp_commentmeta.sql
wp_comments.sql
wp_links.sql
等
也许我可以将表格分成内容与簿记类别,例如usr
and var
directories in Unix之间的区别,并将簿记表添加到我的.gitignore
中,这样当我更新时,它们就不会被破坏内容。