ZBLOG

sharing-proxy 执行 SHOW READWRITE_SPLITTING RULES; 只能获取到读库和写库的逻辑名称,无法获取到读库和写库的IP地址

您说得对!SHOW READWRITE_SPLITTING RULES 只能显示逻辑名称。要获取实际的 IP 地址,需要通过其他方式查询。以下是几种解决方案:


方法一:查询资源信息表(推荐)

-- 查看所有数据源的详细连接信息
SELECT * FROM information_schema.resources;

示例输出:

+----------------+-----------+----------------+-------+------+-------+
| name           | type      | host           | port  | ...  | props |
+----------------+-----------+----------------+-------+------+-------+
| primary-ds     | MySQL     | 192.168.1.100  | 3306  | ...  | {...} |
| replica0       | MySQL     | 192.168.1.101  | 3306  | ...  | {...} |
| replica1       | MySQL     | 192.168.1.102  | 3306  | ...  | {...} |
+----------------+-----------+----------------+-------+------+-------+

方法二:结合读写分离规则和资源表查询

-- 先查看读写分离规则
SHOW READWRITE_SPLITTING RULES;

-- 然后根据规则中的名称查询具体资源
SELECT name, host, port, schema 
FROM information_schema.resources 
WHERE name IN ('primary-ds', 'replica0', 'replica1');

方法三:使用系统函数查询当前连接

-- Hint强制路由到读库后查询实际连接信息
SET readwrite_splitting hint source = 'replica0';
SELECT @@hostname as host_ip, USER() as connection_user;

-- Hint强制路由到写库
SET readwrite_splitting hint source = 'primary-ds';
SELECT @@hostname as host_ip, USER() as connection_user;

方法四:通过JDBC URL解析(如果配置在props中)

-- 查看资源的完整配置(包含JDBC URL)
SELECT name, props FROM information_schema.resources;

-- JDBC URL通常格式为:jdbc:mysql://192.168.1.101:3306/db_name

完整的查询示例:

-- Step 1: 查看读写分离规则中的逻辑名称
SHOW READWRITE_SPLITTING RULES;

-- Step 2: 根据逻辑名称查询实际IP地址
SELECT 
    r.name as resource_name,
    r.host as ip_address,
    r.port as port,
    CASE 
        WHEN r.name = (SELECT write_data_source FROM readwrite_splitting_rules LIMIT 1) 
        THEN 'WRITE'
        ELSE 'READ' 
    END as role
FROM information_schema.resources r
WHERE r.name IN (
    SELECT write_data_source FROM readwrite_splitting_rules
    UNION ALL
    SELECT read_data_sources FROM readwrite_splitting_rules
);

注意事项:

  1. 权限要求:需要 SELECT权限访问 information_schema.resources
  2. 版本兼容:适用于 ShardingSphere-Proxy 5.x版本
  3. 结果解读
    • host字段即为IP地址或主机名
    • port字段为数据库端口号

这样就能准确获取到读写分离环境中各个数据库实例的实际IP地址了!


内容由零声教学AI助手提供,问题来源于学员提问

本站部分文章来源于网络,版权归原作者所有,如有侵权请联系站长删除。
转载请注明出处:https://golang.0voice.com/?id=24217

分享:
扫描分享到社交APP
上一篇
下一篇
发表列表
游客 游客
此处应有掌声~
评论列表

还没有评论,快来说点什么吧~

联系我们

在线咨询: 点击这里给我发消息

微信号:3007537140

上班时间: 10:30-22:30

关注我们
x

注册

已经有帐号?