大家都知道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表也会时时跟进的,达到让数据保持一致的效果。既然数据都在一个服务器能显示了。接下来改怎么做,就不用多说了吧。
Tags: ,
网上有诸多介绍源码安装Mysql时开启Federated引擎的方法,诸如:

./confiure --with-plugin-federated
./confiure --with-federated-storage-engine

但本人试验统统报unrecognized options错误,google了半天,居然是Mysql的bug ,至今未修复。

经测试(version:5.1.52)只有--with-plugins=federated能用:

./confiure --with-plugins=federated


安装完成后show engines查看:

+------------+--------+
| Engine | Support |
+------------+--------+
...
| FEDERATED | NO |
...
+------------+--------+

Federated引擎安装成功。

接着将其开启,修改my.cnf,在 [mysqld] 下添加一行:

federated

重启Mysql,完成。
Tags: ,
分页: 1/1 第一页 1 最后页 [ 显示模式: 摘要 | 列表 ]