使用MySQL联合存储引擎(FEDERATED),实现对远程服务器的表进行操作,或者实现数据库数据的分布式存储
Posted 时栈
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使用MySQL联合存储引擎(FEDERATED),实现对远程服务器的表进行操作,或者实现数据库数据的分布式存储相关的知识,希望对你有一定的参考价值。
一、概述
使用标准存储引擎创建表时,该表由表定义和关联的数据组成。在创建表时使用联合存储引擎,本地数据库和远程数据库的表定义是相同的,但数据的物理存储是在远程服务器上处理的。这实现了从远程 mysql 数据库访问数据,而无需使用复制或群集技术。查询本地表会自动从远程(联合)表中提取数据。本地表上不存储任何数据。 通过使用MySQL联合存储引擎,可以实现对远程服务器的表进行操作,或实现数据库数据的分布式存储。联合表结构如下:
二、联合存储引擎的启用
1.查看引擎是否被启用
在MySQL命令行使用以下命令查看引擎状态:
SHOW ENGINES
如果 FEDERATED 的支持为: NO ,则需要启用该引擎。
若该值为YES,则引擎已启用。
2.启用引擎
具体做法为:
在MySQL的配置文件my.cnf(或者my.ini)中的[mysqld]下面增添一行:
[mysqld]
federated
点击保存。
3.重新启动MySQL服务
service mysql restart #在linux服务器
三、创建联合表的一种方式
1.在远程服务器上创建表
以下为创建语句示例:
CREATE TABLE `tablename` (
......(此处填写对应创建语句)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3;
2.在本地服务器上创建表
以下为创建语句示例:
CREATE TABLE `tablename` (
......(此处填写对应创建语句)
)
ENGINE=FEDERATED
DEFAULT CHARSET=utf8mb3
CONNECTION='mysql://用户名:密码@你的IP:端口/数据库名/数据表名';
上面创建语句的最后一行 连接字符串的格式为:
scheme://user_name[:password]@host_name[:port_num]/db_name/tb_name
scheme:公认的连接协议。此时仅支持将其作为scheme值 mysql
user_name:连接的用户名。此用户必须是在远程服务器上创建的,并且必须具有适当的权限才能对远程表执行所需的操作(SELECT、INSERT、UPDATE 等)
password:(可选)user_name的相应密码。
host_name:远程服务器的主机名或 IP 地址
port_num:(可选)远程服务器的端口号,默认值为 3306
db_name:保存远程表的数据库的名称
tb_name:远程表的名称。本地表和远程表的名称不必匹配
以下为示例连接字符串:
CONNECTION='mysql://username:password@hostname:port/database/tablename'
CONNECTION='mysql://username@hostname/database/tablename'
CONNECTION='mysql://username:password@hostname/database/tablename'
四、测试
在本地对表进行操作,然后在远程数据库中对 对应的表进行查询,若其数据一致,则创建成功。
更多信息和注意事项,请参考:
以上是关于使用MySQL联合存储引擎(FEDERATED),实现对远程服务器的表进行操作,或者实现数据库数据的分布式存储的主要内容,如果未能解决你的问题,请参考以下文章