2012-12-08 87 views
9

手动同步确实使生产和开发数据库处于同步状态。数据库同步或迁移工具

有什么工具可以让两个数据库保持同步吗?有点像惊人的Laravel framework's migrations的事情?

我正在使用MySQL和PHP。我在这里和那里搜索,但无法找到正确的工具。

+0

看一看Liquibase或迁飞。他们在后台使用Java,但都是简单的命令行工具来完成工作。 –

回答

-2

如果您只是希望两个DB相同,那么为什么不使用MySQL作为主服务器与作为从服务器的开发服务器进行MySQL复制。

MySQL Replication Docs

+0

在从机上进行的任何更新都会让地狱混乱和/或中断复制。只读从站不会构建好的开发数据库。 – Charles

+0

是的,我猜想我没有深入了解到他需要开发数据库的工作。 – shannonman

0

目前尚不清楚你想要什么......从PROD

  • 一个办法dev的?
  • data or ddl or both?

看看这个线程:How to synchronize development and production database

+0

同步意味着保持两者同步:)我的意思是两种方式 – Dev01

+0

在更随意的使用,“同步”可以采取意思是镜像......就像单向同步。你仍然没有回答:ddl或数据或两者兼而有之?我会假设ddl ...如果是这样,请参阅提供的链接。 –

1

退房原理,它的设计与YAML或JSON模式文件的工作,它可以在全球安装:

http://andrefigueira.github.io/Schematic/

它的设计与您的VCS一起承诺,让您的d数据库版本与您的项目提交一起存储。

-2

1。使您的远程或生产数据库使用通配符或特殊的IP地址接受远程连接!通过某种类型的cPanel或配置文件!

2。您可以扩展db artisan命令,如“db:sync”。

3。命令代码(未测试过):

$db_local = Config::get('database.'.env('DB_CONNECTION', 'db_local')); 
$dump = "tmp.db"; 
exec("mysqldump --user={$db_local['username']} --password='{$db_local['password']}' --host={$db_local['host']} {$db_local['database']} --ignore-table={$db['database']}.some_table > $dump"); 
$db_remote = Config::get('database.'.env('DB_CONNECTION', 'db_remote')); 
exec("mysql --user={$db_remote['username']} --password='{$db_remote['password']}' --host={$db_remote['host']} {$db_remote['database']} < $dump"); 

我并没有增加任何功能检查,因为通常它是打算工作。

例如,您可以代替命令,使用事件,cron作业,听众添加一些自动化...有很多选择,但主要的逻辑部分的技巧是:定义环境变量名称为您的两个DB连接,并在应用程序配置database.php中定义您的连接凭据等,最后使用exec,mysqldump & mysql。

好运