MySQL使用Federated引擎追加本地的数据至服务器

无名氏 工具杂烩, 系统技巧, 网站开发, 网站运维 3,103 次浏览 , , 1条评论

需求:
服务器与本地同时存在两个结构一模一样的网站,而服务器端的数据要比本地数据多一些。
新项目前期便于操作,直接在本地添加信息至数据库,而在本地添加数据期间,服务器端数据也在不断增加。
现在需要把本地新添加的数据追加至服务器上。也即把本地数据库的新添加的资料直接复制到服务器端,服务器端原来数据不变。

下面开始实操 :-D前提是一定要备份好两个环境的数据库!ok,Let’s go!

1、先检测本地MySQL是否支持Federated。
cmd命令行进入MySQL,输入”show engines;“,出现以下图中所示说明MySQL支持Federated。如果MySQL尚未支持Federated,请猛戳这里:3步开启Windows下MySQL的Federated Engine

2、从服务器端下载最新的数据至本地,其实就是把服务器端的数据镜像到本地。
服务器端、本地两者保持同步,任何一方数据发生变化,另一方也会发生同样的变化。

这里有一个前提就是服务器端的数据库一定要开启远程IP权限,否则会提示没有权限。修改数据库主机权限为任意主机”%“而不是”localhost“。

直接执行SQL语句。

以下是SQL语句:

CREATE TABLE `news_data_FEDERATED` (
  `id` mediumint(8) UNSIGNED DEFAULT '0',
  `content` mediumtext NOT NULL,
  `readpoint` SMALLINT(5) UNSIGNED NOT NULL DEFAULT '0',
  `groupids_view` VARCHAR(100) NOT NULL,
  `paginationtype` tinyint(1) NOT NULL,
  `maxcharperpage` mediumint(6) NOT NULL,
  `template` VARCHAR(30) NOT NULL,
  `paytype` tinyint(1) UNSIGNED NOT NULL DEFAULT '0',
  `relation` VARCHAR(255) NOT NULL DEFAULT '',
  `voteid` mediumint(8) UNSIGNED NOT NULL DEFAULT '0',
  `allow_comment` tinyint(1) UNSIGNED NOT NULL DEFAULT '1',
  `copyfrom` VARCHAR(100) NOT NULL DEFAULT '',
  KEY `id` (`id`)
) ENGINE=FEDERATED CONNECTION='mysql://user:password@xxx.xxx.xxx.xxx:3306/zzw/news_data';

Ok,至此服务器端的数据就同步到本地。

3、下面就是追加本地数据,使用的是INSERT INTO `table` (filed1,filed2,filed3…) SELECT filed1,filed2,filed3 WHERE …来追加。

这里考虑到一个情况就是:服务器端的数据在本地数据更新期间可能会有相同的ID,因此在执行插入SQL语句的时候,ID为空,自动追加,所以在下面的语句中找不到ID字段。

INSERT INTO `news_data_FEDERATED`( `content` , `readpoint`, `groupids_view`, `paginationtype`, `maxcharperpage`, `template`, `paytype`, `relation`, `voteid`, `allow_comment`, `copyfrom`) SELECT `content` , `readpoint`, `groupids_view`, `paginationtype`, `maxcharperpage`, `template`, `paytype`, `relation`, `voteid`, `allow_comment`, `copyfrom` FROM `news_data` WHERE id > 7630;

ok,执行SQL语句这样就成功同步本地的数据到服务器端。

最后,恢复服务器端数据库的主机为“localhost”以保证数据安全。

欢迎转载,请注明出处,谢谢!

一条评论

  1. 百赖小生 2013年11月27日 下午6:55

    好高端!!小白路过!! :wink:

Go