在 ShardingSphere-Proxy 中,SHOW READWRITE_SPLITTING RULES 命令本身不支持直接的字段过滤,但可以通过以下几种方式实现类似效果:
1. 使用系统视图查询(推荐)
-- 查询读写分离规则的基本信息
SELECT rule_name, write_data_source_name
FROM information_schema.readwrite_splitting_rules;
-- 查询特定规则的详细配置
SELECT * FROM information_schema.readwrite_splitting_rules
WHERE rule_name = 'your_rule_name';
-- 只显示规则名称和读写数据源
SELECT rule_name, write_data_source_name, read_data_source_names
FROM information_schema.readwrite_splitting_rules;
2. 使用 FORMAT 参数结合外部处理
-- JSON格式输出后使用jq工具过滤(Linux/Mac)
SHOW READWRITE_SPLITTING RULES FORMAT JSON | jq '.rules[].name'
-- YAML格式输出后使用yq工具过滤
SHOW READWRITE_SPLITTING RULES FORMAT YAML | yq '.rules[].name'
3. MySQL客户端字段过滤
-- 使用\G垂直显示(适合查看单个规则)
SHOW READWRITE_SPLITTING RULES LIKE '%rule_name%'\G
-- 使用LIMIT限制返回行数
SHOW READWRITE_SPLITTING RULES LIMIT 1;
📊 information_schema 视图可用字段
DESC information_schema.readwrite_splitting_rules;
-- 常见字段包括:
-- rule_name 规则名称
-- write_data_source_name 写数据源名称
-- read_data_source_names 读数据源名称列表
-- load_balancer_type 负载均衡器类型
-- load_balancer_props 负载均衡器属性
-- algorithm_type 算法类型
-- algorithm_props 算法属性
🔧 实用查询示例
查看所有规则名称
SELECT rule_name FROM information_schema.readwrite_splitting_rules;
查看特定规则的写数据源
SELECT rule_name, write_data_source_name
FROM information_schema.readwrite_splitting_rules
WHERE rule_name = 'ds_0_rw_rule';
查看负载均衡器配置
SELECT rule_name, load_balancer_type, load_balancer_props
FROM information_schema.readwrite_splitting_rules;
查看读数据源列表
SELECT rule_name, read_data_source_names
FROM information_schema.readwrite_splitting_rules;
💡 Shell脚本自动化处理
#!/bin/bash
# 提取所有规则名称
mysql -h127.0.0.1 -P3307 -uroot -p -e \
"SELECT rule_name FROM information_schema.readwrite_splitting_rules" \
-N -B | tr '\n' ','
# 提取特定规则的写数据源
RULE_NAME="ds_0_rw_rule"
mysql -h127.0.0.1 -P3307 -uroot -p -e \
"SELECT write_data_source_name FROM information_schema.readwrite_splitting_rules WHERE rule_name='$RULE_NAME'" \
-N -B
🛠️ Python程序化处理示例
import pymysql
def get_readwrite_rules(filter_fields=None):
connection = pymysql.connect(host='127.0.0.1',
port=3307,
user='root',
password='password',
database='sharding_db')
try:
with connection.cursor() as cursor:
if filter_fields:
fields = ', '.join(filter_fields)
sql = f"SELECT {fields} FROM information_schema.readwrite_splitting_rules"
else:
sql = "SHOW READWRITE_SPLITTING RULES"
cursor.execute(sql)
return cursor.fetchall()
finally:
connection.close()
# 只获取规则名称和写数据源
rules = get_readwrite_rules(['rule_name', 'write_data_source_name'])
for rule in rules:
print(f"Rule: {rule[0]}, Write DS: {rule[1]}")
总结建议:
- 简单查看:直接使用
SHOW命令配合LIKE/LIMIT - 字段过滤:使用
information_schema.readwrite_splitting_rules视图 +SELECT - 程序处理:通过JDBC/编程接口获取ResultSet后手动过滤字段
内容由零声教学AI助手提供,问题来源于学员提问




