标题:mysql federated 引擎变相跨服务器使用实例 出处:沧海一粟 时间:Sat, 28 Jul 2012 14:37:23 +0000 作者:jed 地址:http://www.dzhope.com/post/924/ 内容: 大家都知道mysql目前(5.1.x是现行用的最多的版本,至于最新版5.5.x有什么新的强大功能,就不得而知了)还是不支持sql语句直接跨服务器查询数据和操作数据的。但是我们要的数据在两个不同的服务器上数据库上,该怎么办?其实办法还是有的,谁叫网络上的牛人多啊。我这里就讲一下通过mysql federated 引擎 变相实现跨服务器的效果。废话少说,直接上操作步骤! 1.root登录mysql,输入show engines 结果如下(如果不尽相同纯属版本问题): +------------+----------+----------------------------------------------------------------+ | Engine | Support | Comment | +------------+----------+----------------------------------------------------------------+ | MyISAM | DEFAULT | Default engine as of MySQL 3.23 with great performance | | MEMORY | YES | Hash based, stored in memory, useful for temporary tables | | InnoDB | YES | Supports transactions, row-level locking, and foreign keys | | BerkeleyDB | NO | Supports transactions and page-level locking | | BLACKHOLE | YES | /dev/null storage engine (anything you write to it disappears) | | EXAMPLE | YES | Example storage engine | | ARCHIVE | YES | Archive storage engine | | CSV | YES | CSV storage engine | | ndbcluster | DISABLED | Clustered, fault-tolerant, memory-based tables | | FEDERATED | YES | Federated MySQL storage engine | | MRG_MYISAM | YES | Collection of identical MyISAM tables | | ISAM | NO | Obsolete storage engine | +------------+----------+----------------------------------------------------------------+ 如果 federated 显示不为 yes,也不用紧张,速度找到my.cnf文件,改配置文件一般在/etc/my.cnf 这里指linux服务器上的路径。打开编辑,找到[mysqld] 并在下面添加一行 federated 然后保存退出,重启服务,再进mysql,输入show engines 看看是不是 federated 为yes了。 如果一开始就没有federated这个项,就麻烦了。这里不多说了。 2.假设我有两个服务器A(192.168.0.10:3306) 和 B(192.168.0.11:3306) 在A上建数据库DB_A,DB_A上建表TB_A,TB_A上建字段id,name,sex....随意,然后添加一些测试数据。 在B上建数据库DB_B,DB_B上建表TB_A(不过这里的表不要工具建,直接上代码、、) CREATE TABLE `TB_B` ( `id` int(11) NOT NULL AUTO_INCREMENT, `name` varchar(20) DEFAULT NULL, `sex` varchar(4) DEFAULT NULL, PRIMARY KEY (`id`) ) ENGINE=federated connection ='mysql://root:123456@192.168.0.10:3306/DB_A/TB_A' DEFAULT CHARSET=utf8; 注意:新建表的结构要和A服DB_A库TB_A表上的一致哦。。。 3.一切搞定后,在B服DB_B库上输入 select * from DB_B.TB_B 看看什么结果。是不是A服DB_A库TB_A表上的数据都可以在B服务器上显示了!其实原理和同步差不多,然而如果TB_A表上数据有变动的话,TB_B表也会时时跟进的,达到让数据保持一致的效果。既然数据都在一个服务器能显示了。接下来改怎么做,就不用多说了吧。 Generated by Bo-blog 2.1.1 Release