MySQL 学习篇(二)MySQL常用存储引擎——Federated

问:MySQL是否支持像sqlserver连接服务器或者Oracle透明网关这样的功能?

答:从Mysql服务器本身来说,他没有这样的功能,Federated存储引擎却在存储引擎层提供了这样的功能。

  • 特点

Federated主要功能是提供一种可以在不使用复制技术的情况下,就可以在本地访问远程Mysql服务器上的表的功能,由于Federated存储引擎只是在本地建立到远程服务器表的一个连接,所以说呢,我们想要访问所有表数据全部还是放在远程服务器上,在本地的并不存储任何数据,每次访问Federated存储引擎表的时候呢,查询都会被发送到远程服务器上执行,并从远程的服务器上获取相关的数据,所以说这个表的第二个特点是它的本地并不存储数据,数据全部存放到远程服务器上;

虽然它不会在本地存储所访问的数据,但是同样需要在本地需要保存一份远程Mysql数据库表的结构信息的,即frm文件记录了如何连接和远程表的结构信息。

  • 如何使用

Federated存储引擎可以实现这个sqlserve连接服务器的功能,但是由于本身的性能并不太好,而且通常的可以通过复制等方式来实现相同的目的,所以在当前的Mysql版本功能,Federated存储引擎默认的是禁止的。

问:如何启用Federated存储引擎远程连接?

答:在启动时的指定federated参数,我们可以通过show来确认一下钢琴的软件服务器是否支持

问:如何指定要查询的这个远程的这个服务器的相关信息以及相关的数据库表格一些信息?

答:create语句中使用

  • MySQL环境演示Federated存储引擎的使用

  1. 1 查看MySQL中Federated支持状态
mysql> show engines;
+--------------------+---------+----------------------------------------------------------------+--------------+------+------------+
| Engine             | Support | Comment                                                        | Transactions | XA   | Savepoints |
+--------------------+---------+----------------------------------------------------------------+--------------+------+------------+
| FEDERATED          | NO      | Federated MySQL storage engine                                 | NULL         | NULL | NULL       |
| MRG_MYISAM         | YES     | Collection of identical MyISAM tables                          | NO           | NO   | NO         |
| MyISAM             | YES     | MyISAM storage engine                                          | NO           | NO   | NO         |
| BLACKHOLE          | YES     | /dev/null storage engine (anything you write to it disappears) | NO           | NO   | NO         |
| CSV                | YES     | CSV storage engine                                             | NO           | NO   | NO         |
| MEMORY             | YES     | Hash based, stored in memory, useful for temporary tables      | NO           | NO   | NO         |
| ARCHIVE            | YES     | Archive storage engine                                         | NO           | NO   | NO         |
| InnoDB             | DEFAULT | Supports transactions, row-level locking, and foreign keys     | YES          | YES  | YES        |
| PERFORMANCE_SCHEMA | YES     | Performance Schema                                             | NO           | NO   | NO         |
+--------------------+---------+----------------------------------------------------------------+--------------+------+------------+
9 rows in set (0.00 sec)


# FEDERATED 引擎状态为NO
  1. 2 修改MySQL启动文件
# 开启Federated存储引擎,添加参数” federated=1 注意不要加到[mysqld_safe]末尾不然会启动失败“
[root@localhost ~]# vi /etc/my.cnf


# 重启MySQL服务器
[root@localhost ~]# mysqladmin shutdown
[root@localhost ~]#  service mysqld restart


# 查看状态  support 变成 yes
mysql> show engines;
+--------------------+---------+----------------------------------------------------------------+--------------+------+------------+
| Engine             | Support | Comment                                                        | Transactions | XA   | Savepoints |
+--------------------+---------+----------------------------------------------------------------+--------------+------+------------+
| FEDERATED          | YES     | Federated MySQL storage engine                                 | NO           | NO   | NO         |
| MRG_MYISAM         | YES     | Collection of identical MyISAM tables                          | NO           | NO   | NO         |
| MyISAM             | YES     | MyISAM storage engine                                          | NO           | NO   | NO         |
| BLACKHOLE          | YES     | /dev/null storage engine (anything you write to it disappears) | NO           | NO   | NO         |
| CSV                | YES     | CSV storage engine                                             | NO           | NO   | NO         |
| MEMORY             | YES     | Hash based, stored in memory, useful for temporary tables      | NO           | NO   | NO         |
| ARCHIVE            | YES     | Archive storage engine                                         | NO           | NO   | NO         |
| InnoDB             | DEFAULT | Supports transactions, row-level locking, and foreign keys     | YES          | YES  | YES        |
| PERFORMANCE_SCHEMA | YES     | Performance Schema                                             | NO           | NO   | NO         |
+--------------------+---------+----------------------------------------------------------------+--------------+------+------------+
9 rows in set (0.02 sec)
  1. 3 创建数据库表
mysql> CREATE TABLE remote_fed (id int NOT NULL AUTO_INCREMENT,c1 varchar(10) NOT NULL DEFAULT '',c2 char(10) NOT NULL DEFAULT '',PRIMARY KEY (id)) ENGINE = innodb;
Query OK, 0 rows affected (0.03 sec)
  1. 4 查看远程表结构
mysql> show create table remote_fed\G
*************************** 1. row ***************************
       Table: remote_fed
Create Table: CREATE TABLE `remote_fed` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `c1` varchar(10) NOT NULL DEFAULT '',
  `c2` char(10) NOT NULL DEFAULT '',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1
1 row in set (0.01 sec)
  1. 5 创建表数据
mysql> insert into remote_fed(c1,c2) values('aaa','bbb'),('ccc','ddd'),('eee','fff');
Query OK, 3 rows affected (0.00 sec)
Records: 3  Duplicates: 0  Warnings: 0

  1. 6 使用Federated引擎,需要远程建立权限【select update insert delete】,把用户的名字叫做 fred_like
mysql> grant select,update,insert,delete on remote.remote_fed to fred_like@'127.0.0.1' identified by '123456';
Query OK, 0 rows affected (0.00 sec)
  1. 6 切换成本地服务器,模拟本地服务器读取远程服务器
# 切换数据库
mysql> use local
Database changed


# 查询当前数据库所有表
mysql> show tables;
Empty set (0.00 sec)


# 在local中创建于远程一样的结构的表(否则会创建失败)
mysql> CREATE TABLE `remote_fed` (
    ->   `id` int(11) NOT NULL AUTO_INCREMENT,
    ->   `c1` varchar(10) NOT NULL DEFAULT '',
    ->   `c2` char(10) NOT NULL DEFAULT '',
    ->   PRIMARY KEY (`id`)
    -> ) ENGINE=federated connection='mysql://fred_like:[email protected]:3306/remote/remote_fed';
Query OK, 0 rows affected (0.00 sec)


# 修改local数据库中表名称,以便于区分
mysql> rename remote_fed to local_fed;
Query OK, 0 rows affected (0.00 sec)


# 本地库中查询远程数据
mysql> select * from local.local_fed;
+----+-----+-----+
| id | c1  | c2  |
+----+-----+-----+
|  1 | aaa | bbb |
|  2 | ccc | ddd |
|  3 | eee | fff |
+----+-----+-----+
3 rows in set (0.01 sec)


# 本地库中删除远程数据
mysql> delete from local.local_fed where id=2;
Query OK, 1 row affected (0.00 sec)


# 本地库中查询删除远程数据结果
mysql> select * from local.local_fed;
+----+-----+-----+
| id | c1  | c2  |
+----+-----+-----+
|  1 | aaa | bbb |
|  3 | eee | fff |
+----+-----+-----+
2 rows in set (0.01 sec)


# 结论:可以在本地数据库中操作远程数据库的表
  • 拷贝表结构 有问题  怎么也开启不成功
  1. 7 在本地数据库中是否存储了Federated表数据
[root@localhost mysql]# cd /var/lib/mysql/local
[root@localhost local]# ll
总用量 16
-rw-rw----. 1 mysql mysql   65 2月  20 15:57 db.opt
-rw-rw----. 1 mysql mysql 8608 2月  20 19:57 local_fed.frm # 仅存储远程数据库表结构以及如何连接远程数据库表
  • 使用场景

  • 注意事项

  1. 1 修改my.conf【问题:Federated存储引擎开启不成功】

  1. 2 s

猜你喜欢

转载自blog.csdn.net/Sicily_winner/article/details/87746731
今日推荐