2011-07-09 103 views
2

我正在寻找一种解决方案,根据请求,我可以根据请求同步活动mysql数据库与本地数据库之间的表。如果没有具体的解决方案,那么同步本地数据库和实时数据库有什么好的解决方案?(部分)与mysql的数据库同步

+0

要澄清这一点,是否要将liveDB中的表中的新数据复制到localDB中的表中?你打算改变你的localDB的模式吗? – 2011-07-09 12:40:24

+0

@ Cshift3iLike这个想法是主要同步已添加到选定表格中的任一数据库的数据。 – Argoron 2011-07-09 12:42:58

回答

0

总是有phpmyadmin,您可以在其中导出所选表格并再次导入它们。

这是一个实用的解决方案,如果您有一个实时数据库,您需要在开发系统上使用它。您可以获取数据库的副本,对其进行处理,例如客户表,然后将实时脱机,备份,除客户表以外的任何东西,并导入更新的数据库。

phpmyadmin的优点是它向您显示查询,然后您可以将这些脚本放在一起并在下次更新时使用它们。

+0

@ʍǝɥʇɐɯMathew,我一直在寻找的是更自动化或自动化的东西(选择表进行同步,然后根据需要或每x天自动同步)。虽然我在技能规模的初级阶段更多,但我确实知道phpmyadmin,对我来说,它似乎是它可以获得的最多的手册,除非我还有一些功能尚未完成。 – Argoron 2011-07-14 12:37:50

+0

...是的,但它吐出可以可靠使用的SQL语句。然后可以将这些文件放入一个文本文件中,然后运行'mysql -u user -pPASSWORD database 2011-07-14 12:59:40

0

如果您具备以下条件

  • 直播DB可以通过公网IP访问
  • 所有需要的表是InnoDB的

可以进行单独的表

的mysqldump的以下是使用shell脚本在本地机器上运行时如何实现此功能的示例:

LIVEDB_IP=192.168.1.10 
MYSQL_SRCUSER=whateverusername 
MYSQL_SRCPASS=whateverpassword 
MYSQL_SRCCONN="-h${LIVEDB_IP} -u${MYSQL_SRCUSER} -p${MYSQL_SRCPASS}" 
SOURCE_DB=mydb_source 

MYSQL_TGTUSER=whateverusername2 
MYSQL_TGTPASS=whateverpassword2 
MYSQL_TGTCONN="-h127.0.0.1 -u${MYSQL_TGTUSER} -p${MYSQL_TGTPASS}" 
TARGET_DB=mydb_target 

TBLLIST="tb1 tb2 tb3" 
for TB in `echo "${TBLLIST}"` 
do 
    mysqldump ${MYSQL_SRCCONN} --single-transaction ${SOURCE_DB} ${TB} | mysql ${MYSQL_TGTCONN} -A -D${TARGET_DB} & 
done 
wait 

--single-transaction选项会导致表的时间点快照发生,同时仍允许源数据库中的INSERT,UPDATE和DELETE返回。

如果表格比较大,可能会出现超时问题。试试这个脚本:

LIVEDB_IP=192.168.1.10 
MYSQL_SRCUSER=whateverusername 
MYSQL_SRCPASS=whateverpassword 
MYSQL_SRCCONN="-h${LIVEDB_IP} -u${MYSQL_SRCUSER} -p${MYSQL_SRCPASS}" 
SOURCE_DB=mydb_source 

MYSQL_TGTUSER=whateverusername2 
MYSQL_TGTPASS=whateverpassword2 
MYSQL_TGTCONN="-h127.0.0.1 -u${MYSQL_TGTUSER} -p${MYSQL_TGTPASS}" 
TARGET_DB=mydb_target 

TBLLIST="tb1 tb2 tb3" 
for TB in `echo "${TBLLIST}"` 
do 
    mysqldump ${MYSQL_SRCCONN} --single-transaction ${SOURCE_DB} ${TB} | gzip > ${TB}.sql.gz & 
done 
wait 

for TB in `echo "${TBLLIST}"` 
do 
    gzip -d < ${TB}.sql.gz | mysql ${MYSQL_TGTCONN} -A -D${TARGET_DB} & 
done 
wait 

试试吧!

CAVEAT

如果需要的表是MyISAM的,只是从mysqldump的删除--single-transaction。这可能会导致源数据库中的查询冻结,直到mysqldump完成查询所需的表。在这种情况下,只需在低通话时间内执行此脚本。

0

桌面数据库管理器SQLYog有一个“Job Scheduler”工具来设置这样的事情。它需要专业或企业许可证(比声音便宜),但如果您只想先查看,则30天试用版功能全面。