这个错误是因为直接在命令行中使用 mysql -e
执行时,MySQL客户端将整个命令当作标准SQL语句处理,而 REGISTER STORAGE UNIT
是ShardingSphere特有的DistSQL语法。
解决方案:
方案1:使用ShardingSphere-Proxysql命令行
mysql -uuniemm -D emm_manager -pEmm@2020 -h 127.0.0.1 -P3307 --prompt="ShardingSphere> "
然后在进入的交互式界面中执行:
REGISTER STORAGE UNIT ds_0(HOST="127.0.0.1",PORT=9906,DB="db_0",USER="uniemm",PASSWORD="Emm@2020");
方案2:通过文件方式执行
创建SQL文件(如register.sql):
REGISTER STORAGE UNIT ds_0(HOST="127.0.0.1",PORT=9906,DB="db_0",USER="uniemm",PASSWORD="Emm@2020");
然后执行:
mysql -uuniemm -D emm_manager -pEmm@2020 -h 127.0.0.1 -P3307 < register.sql
方案3:使用here document方式
mysql -uuniemm -D emm_manager -pEmm@2020 -h 127.0.0.1 -P3307 << EOF
REGISTER STORAGE UNIT ds_0(HOST="127.0.0.1",PORT=9906,DB="db_0",USER="uniemm",PASSWORD="Emm@2020");
EOF
原因说明:
- ShardingSphere Proxy作为一个数据库中间件,支持DistSQL扩展语法
- 直接使用
mysql -e
时,MySQL客户端无法识别非标准SQL语法 - 需要通过交互式会话或文件输入的方式让Proxy正确解析DistSQL
推荐使用方案2的文件方式,便于脚本化和重复执行。
内容由零声教学AI助手提供,问题来源于学员提问