tidb-v2.0.8升级至tidb-4.0.9 multi-sql应该怎么处理?

为提高效率,提问时请提供以下信息,问题描述清晰可优先响应。

  • 【TiDB 版本】:v4.0.9
  • 【问题描述】:

    tidb-v2.0.8中支持multi-sql,tidb-v4.0.9不支持,升级集群时,除了业务侧做配合,是否还有其他解决方案 ?

若提问为性能优化、故障排查类问题,请下载脚本运行。终端输出打印结果,请务必全选并复制粘贴上传。

上面是v2.0.8执行结果,下面是v4.0.9执行结果

麻烦看下下面这个文档对你是否有帮助:
https://docs.pingcap.com/zh/tidb/stable/tidb-faq#319-error-1105-hy000-client-has-multi-statement-capability-disabled

只能业务侧进行sql拆分嘛?还有什么方法可以fix?

我用 MySQL Client 链接 TiDB 后执行 multi statement 不会报错:

TiDB(root@127.0.0.1:test) > select count(*) from t; select count(*) from t;
+----------+
| count(*) |
+----------+
|        0 |
+----------+
1 row in set (0.00 sec)

+----------+
| count(*) |
+----------+
|        0 |
+----------+
1 row in set (0.00 sec)

mysql -e 的结果也类似:

➜ mysql -h 127.0.0.1 -P 4000 -u root -e "select count(*) from mysql.user; select count(*) from mysql.user;"
+----------+
| count(*) |
+----------+
|        1 |
+----------+
+----------+
| count(*) |
+----------+
|        1 |
+----------+

版本是 v4.0.9:

TiDB(root@127.0.0.1:test) > select tidb_version()\G
*************************** 1. row ***************************
tidb_version(): Release Version: v4.0.9
Edition: Community
Git Commit Hash: 8af4c308d54cd3555e784b6fdd95b8d2c098fa84
Git Branch: HEAD
UTC Build Time: 2021-01-09 03:41:09
GoVersion: go1.15.6
Race Enabled: false
TiKV Min Version: v3.0.0-60965b006877ca7234adaced7890d7b029ed1306
Check Table Before Drop: false
1 row in set (0.00 sec)

你是如何链接 TiDB 的,试试在链接的时候把 CLIENT_MULTI_STATEMENTS 加上呢

重新确认了下:

  1. 上图在tidb-v4.0.9中multi-sql执行失败,测试当天测试环境刚好做做过网络隔离,应该是这个原因导致的;

  2. 我们这边遇到的的确是 https://docs.pingcap.com/zh/tidb/stable/tidb-faq#319-error-1105-hy000-client-has-multi-statement-capability-disabled 这个问题,是我测试手法不对,之前对业务侧情况了解不够清楚。

  3. 我们会有这个问题的集群接入的业务比较多也比较杂,不好进行梳理,所以从客户端进行梳理和修复的话,代价会比较大

@zz-jason-PingCAP

感谢反馈,如果是业务接入方式比较复杂,建议还是做一些梳理,看看哪些 client 方式兼容性不好,TiDB 社区可以做进一步优化。你也可以尝试一些确认是 bug 的问题,提交的 Github 的 TiDB repo 下面。

好的,thx

感谢反馈 :pray: