• 问一个数据库相关的问题,求大佬指点
  • 发布于 1个月前
  • 81 热度
    8 评论
客户买了一套闭源的程序用于运营。MySQL 数据库用的是 CDB ,但是现在遇到一个问题:因为那套程序对于数据库的优化明显不足,有一些很要命的慢查询拖慢整个库。于是,我们加了 2 个索引。性能问题暂时是解决了。但是奇葩的是,这套程序会主动检测索引,然后给 DROP 掉。频繁的掉索引,我们就写了个定时任务去加索引。于是这套程序就是在不断的 add index 和 drop index, 因为刚开始频率不是很高,所以勉强能用。但是最近每天的频率越来越高,导致不可用时间占比越来越多。到了无法忍受的地步。

我想的解决办法:给 CDB 这个用户去除索引的权限。但是程序会报错,无法运行。现在想求教,有没有类似的中间件,可以在不修改代码的情况下,欺骗客户端,丢弃掉 drop index 的操作而不会报错?
用户评论
  • Scys
  • 客户买了程序,都没有售后维护么?为啥买了别人的程序,你们去维护,我觉得这也挺奇怪的
  • 2025/2/18 18:37:00 [ 0 ] [ 0 ] 回复
  • DuXing
  • 可以用 Proxy ,把对应账号的 drop 相关的 SQL 屏蔽掉。也就是假装执行成功,其实并没有。当然如果有 Proxy 的话不用那么麻烦。把可以把主动检测索引的语句返回值,返回它想要到。这样就不会触发删索引了
  • 2025/2/18 18:31:00 [ 0 ] [ 0 ] 回复
  • Dock
  • 可以通过 ProxySQL 的 Query Rewrite 功能实现:
    INSERT INTO mysql_query_rules (rule_id, active, match_pattern, replace_pattern) VALUES (1, 1, '^DROP INDEX .* ON .*$', 'select 1');

  • 2025/2/18 18:25:00 [ 0 ] [ 0 ] 回复