我在Database 1中有以下1 db表,在Database 2中有1db表,现在两个表的结构完全相同。现在发生的情况是表1(DB1)每天都会添加新行,我需要更新表1(DB 2)中的表1(DB 1)新行,以便这两个表保持不变。 cron将在午夜触发php脚本来执行此任务。这样做的最佳方法是什么以及如何使用PHP / mysql?
答案 0 :(得分:1)
您可能需要关注复制(请参阅http://dev.mysql.com/doc/refman/5.4/en/replication-configuration.html)。这是“正确”的做法;但是,对于小型表格而言,上述解决方案可能更好(当然也更容易)。
答案 1 :(得分:0)
这可能会帮助你,这是我在数据库中为类似的事情做的事情
$dropSQL = "DROP TABLE IF EXISTS `$targetTable`";
$createSQL = "CREATE TABLE `$targetTable` SELECT * FROM `$activeTable`";
$primaryKeySQL = "ALTER TABLE `$targetTable` ADD PRIMARY KEY(`id`)";
$autoIncSQL = "ALTER TABLE `$targetTable` CHANGE `id` `id` INT( 60 ) NOT NULL AUTO_INCREMENT";
mysql_query($dropSQL);
mysql_query($createSQL);
mysql_query($primaryKeySQL);
mysql_query($autoIncSQL);
显然你必须修改taget和活动表变量。当你这样做时,丢弃桌子会丢失主键,哦......很容易添加回来
答案 2 :(得分:0)
我建议按照已经建议进行复制。但是,另一个选择是使用mysqldump
来获取所需的行并将它们发送到另一个表。
mysqldump -uUSER -pPASSWORD -hHOST --compact -t --where="date=\"CURRENT_DATE\"" DB1 TABLE | mysql -uUSER -pPASSWORD -hHOST -D DB2
将USER
,HOST
和PASSWORD
替换为您的数据库的登录信息。如果DB1
和DB2
具有不同的访问信息,则可以对命令的每个部分使用不同的信息。 DB1
和DB2
是数据库的名称,TABLE
是表的名称。
您还可以修改--where
选项以仅获取需要更新的行。希望您有一些可以使用的查询。如前所述,如果表具有主键,则可以使用类似
DB2
所具有的最后一个键。
KEY=`echo "SELECT MAX(KEY_COLUMN) FROM TABLE;" mysql -uUSER -pPASSWORD -hHOST -D DB2`
用于bash shell脚本(然后在上面的WHERE
子句中使用此值)。根据主键的生成方式,这可能是一个坏主意,因为如果存在行,则可以在键空间的孔中添加行。
只要您有一个可以选择这些行的查询,只要更改了行,此解决方案也会起作用。只需将--replace
选项添加到mysqldump
命令即可。在您的情况下,最好添加一些类型的值,例如更新日期,您可以通过它来比较。