在本地和远程开发环境之间同步数据库

时间:2014-03-16 00:39:25

标签: php mysql sql data-migration

我最近正在开展一个本地项目,并且一直在与在线服务器进行同步。

问题是,现在它涉及数据库功能。这意味着每当我在本地更改数据库时,我必须访问网站的cPanel,输入PHPMyAdmin,删除整个数据库并复制我从本地版本导出的SQL查询。

使用本地远程设计逻辑是不是更容易使用MySQL数据库?

3 个答案:

答案 0 :(得分:2)

这是开发中更具挑战性的方面之一,因为当您拥有多个开发人员以及可能有多个分支和/或服务器时,环境会经常更改。但是,由于我们对具体情况一无所知,因此很难说它会对您产生什么影响。

您当前操作的一个要素可能是不需要登录各种界面并使用脚本来实现您的需要 - 减少手动;更多自动化......最基本的,您可以创建一个PHP脚本:

  • 备份生产数据库并将其另存为唯一备份
  • 应用您的更改(或者,如果需要,还可以进行整个重建)
  • 允许您在出现问题时恢复备份

一般选项:

更新无法重建

除非所有数据发生变化(并且需要),否则无需删除整个数据库并在任何环境中重新构建。从最基本的角度来看,结构/架构的变化需要的不仅仅是完整的重建。

<强>复制

可以使用主 - 主复制或主 - 从复制来同步MySQL数据库,但有时在某些环境中这样做太过分了,并且除非非常谨慎地管理,否则可能会破坏功能。如果您在本地进行了更改(在开发环境中),则可能会破坏您的远程站点功能......

使用框架工具

如果您正在使用现代框架,其中许多都带有便于数据库更新和更新(以及可能回滚)的工具,但通常它们并不完美,因为您可能需要更新特定的无法轻松回滚的数据或表格。

我当前的设置

¬ multiple local developers
  ¬ multiple dev branches 
    ¬ development
      ¬ staging server 
          live

在我们的示例中,我们使用自定义构建的脚本(和链接的SQL文件),允许每个开发人员通过从命令行运行以下命令来应用更改并促进对分支的更改:

php migrate.php server/branch update 

或者:

php migrate.php server/branch rollback

这可以简化为基本设置,但我不知道如何不知道更多。 默认情况下,值得在dba.stackexchange.com上提出这个问题,因为您会得到严格的以数据库为中心的回复。

答案 1 :(得分:0)

我会在遥控器上创建一个带有ALTER语句的文本框的PHP页面,您只需粘贴并单击即可。如果通过端口80,密码和IP验证访问,您希望使用强制https重定向来保护该页面,这样只有您可以运行它 - 只需几行代码。

答案 2 :(得分:-1)

是。但是!

首先,您必须在远程服务器上创建一个允许从本地PC连接的MySQL用户,或者如果您勇敢地使用任何IP。例如think123 @ yourIp或think123 @%带有非常强烈的密码

如果您不能或不允许这样做,那么答案是否定的。有些主机允许其他主机不这样做。查看你的cPanel。

如果他们允许这样做,那么您可以从您在本地计算机上运行的phpMyAdmin访问远程服务器。但您必须对本地phpMyAdmin进行一些配置更改,以通知其他可能的连接。

在\ wamp \ alias \ phpmyadmin.conf中应该有这样的部分: -

$i = 0;

/*
 * First server
 */
$i++;
/* Authentication type */
$cfg['Servers'][$i]['auth_type'] = 'cookie';
/* Server parameters */
$cfg['Servers'][$i]['host'] = 'localhost';
$cfg['Servers'][$i]['connect_type'] = 'tcp';
$cfg['Servers'][$i]['compress'] = false;
/* Select mysql if your server does not have mysqli */
$cfg['Servers'][$i]['extension'] = 'mysqli';
$cfg['Servers'][$i]['AllowNoPassword'] = false;

你需要做的是添加另一个$ cfg ['Servers']来告诉phpMyAdmin有另一个可能的连接。像这样: -

$i = 0;

/*
 * First server
 */
$i++;
/* Authentication type */
$cfg['Servers'][$i]['auth_type'] = 'cookie';
/* Server parameters */
$cfg['Servers'][$i]['host'] = 'localhost';
$cfg['Servers'][$i]['connect_type'] = 'tcp';
$cfg['Servers'][$i]['compress'] = false;
/* Select mysql if your server does not have mysqli */
$cfg['Servers'][$i]['extension'] = 'mysqli';
$cfg['Servers'][$i]['AllowNoPassword'] = false;

/*
 * Second Server
 */
$i++;
/* Authentication type */
$cfg['Servers'][$i]['auth_type'] = 'cookie';
/* Server parameters */
$cfg['Servers'][$i]['host'] = 'REMOTE_SERVERS_IP';
$cfg['Servers'][$i]['connect_type'] = 'tcp';
$cfg['Servers'][$i]['compress'] = false;
/* Select mysql if your server does not have mysqli */
$cfg['Servers'][$i]['extension'] = 'mysqli';
$cfg['Servers'][$i]['AllowNoPassword'] = false;

当您运行phpMyAdmin(本地)时,它应该在登录屏幕上添加另一个字段,一个下拉列表,用于选择您要使用的连接。