使用FEDERATED引擎可以实现MySQL数据库跨服务器、跨实例访问,FEDERATED引擎是一种分布式引擎,可以在一个MySQL服务器中访问另一个MySQL服务器上的表。下面是实现跨数据库服务器、跨实例访问的攻略:
- 创建FEDERATED表
在本地服务器上创建一个FEDERATED表,使用的表结构和数据都是来源于另外一个MySQL服务器上的一个表,语法如下:
CREATE TABLE federated_table (
id INT(11) NOT NULL AUTO_INCREMENT,
name VARCHAR(50) DEFAULT NULL,
PRIMARY KEY (id)
)
ENGINE=FEDERATED
DEFAULT CHARSET=utf8
CONNECTION='mysql://username:password@hostname:port/database/tablename';
其中,ENGINE必须指定为FEDERATED类型,连接字符串CONNECTION中需要填写远程MySQL服务器的连接信息,包括用户名、密码、主机名、端口和数据库名称和表名称。
- 访问FEDERATED表
成功创建FEDERATED表后,即可通过正常的SQL语句来访问这个表,与本地服务器上的表一样。比如查询FEDERATED表中的所有记录,可以使用如下命令:
SELECT * FROM federated_table;
示例1:在本地服务器上创建一个FEDERATED表,连接到另一个MySQL服务器上的表orders,获取一段时间内的全部订单记录。
CREATE TABLE orders_federated (
order_id int(11) NOT NULL,
order_date date NOT NULL,
total_amount decimal(10,2) NOT NULL,
PRIMARY KEY (order_id)
)
ENGINE=FEDERATED
DEFAULT CHARSET=utf8
CONNECTION='mysql://remote_username:remote_password@remote_hostname:remote_port/remote_database/orders';
SELECT * FROM orders_federated WHERE order_date BETWEEN '2022-07-01' AND '2022-07-31';
示例2:在本地服务器上创建一个FEDERATED表,连接到另一个MySQL服务器上的表users,获取所有注册时间在某个月份之后的用户信息。
CREATE TABLE users_federated (
user_id int(11) NOT NULL,
user_name varchar(50) NOT NULL,
register_date date NOT NULL,
PRIMARY KEY (user_id)
)
ENGINE=FEDERATED
DEFAULT CHARSET=utf8
CONNECTION='mysql://remote_username:remote_password@remote_hostname:remote_port/remote_database/users';
SELECT * FROM users_federated WHERE register_date >= '2022-07-01';
以上示例演示了如何通过FEDERATED引擎跨服务器,跨实例访问MySQL数据库中的表。在使用FEDERATED引擎时需要注意,要保证本地服务器和远程服务器都已开启FEDERATED引擎。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:MySQL中使用FREDATED引擎实现跨数据库服务器、跨实例访问 - Python技术站