V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
MySQL 5.5 Community Server
MySQL 5.6 Community Server
Percona Configuration Wizard
XtraBackup 搭建主从复制
Great Sites on MySQL
Percona
MySQL Performance Blog
Severalnines
推荐管理工具
Sequel Pro
phpMyAdmin
推荐书目
MySQL Cookbook
MySQL 相关项目
MariaDB
Drizzle
参考文档
http://mysql-python.sourceforge.net/MySQLdb.html
ZeekChatCom
V2EX  ›  MySQL

各位大佬,有个奇葩的技术问题

  •  1
     
  •   ZeekChatCom · 1 天前 · 5072 次点击

    客户买了一套闭源的程序用于运营。MySQL 数据库用的是 CDB ,但是现在遇到一个问题:

    因为那套程序对于数据库的优化明显不足,有一些很要命的慢查询拖慢整个库。于是,我们加了 2 个索引。性能问题暂时是解决了。

    但是奇葩的是,这套程序会主动检测索引,然后给 DROP 掉。频繁的掉索引,我们就写了个定时任务去加索引。于是这套程序就是在不断的 add index 和 drop index, 因为刚开始频率不是很高,所以勉强能用。

    但是最近每天的频率越来越高,导致不可用时间占比越来越多。到了无法忍受的地步。

    我想的解决办法:给 CDB 这个用户去除索引的权限。但是程序会报错,无法运行。

    现在想求教,有没有类似的中间件,可以在不修改代码的情况下,欺骗客户端,丢弃掉 drop index 的操作而不会报错?

    第 1 条附言  ·  14 小时 59 分钟前
    已经通过 ProxySQL 的 Query Rewrite 功能实现了。感谢各位大佬的帮助。

    INSERT INTO mysql_query_rules (rule_id, active, match_pattern, replace_pattern) VALUES (1, 1, '^DROP INDEX .* ON .*$', 'select 1');
    74 条回复    2025-02-19 05:06:16 +08:00
    37Y37
        1
    37Y37  
       1 天前 via Android   ❤️ 6
    卧槽!这真他么的是个人才
    evan9527
        2
    evan9527  
       1 天前   ❤️ 15
    天才,是不是提速要加钱。
    lwldcr
        3
    lwldcr  
       1 天前 via iPhone
    第一反应跟 2 楼一样 是不是等着别人跟他付费提速呢
    cvbnt
        4
    cvbnt  
       1 天前 via Android   ❤️ 1
    查了下 ProxySql 和 MaxScale 可以主动拦截掉指定语句
    lidlesseye11
        5
    lidlesseye11  
       1 天前   ❤️ 2
    hhhhh 神奇
    不太懂但是可以搜索关键字 mysql proxy ,感觉应该可以解决你的问题
    wunonglin
        6
    wunonglin  
       1 天前
    不得不说,很牛逼
    Erroad
        7
    Erroad  
       1 天前   ❤️ 1
    同意楼上,套层 mysql proxy ,在这层 proxy 里面过滤掉 drop 索引的 SQL
    googlefans
        8
    googlefans  
       1 天前   ❤️ 1
    使用 SQL 代理中间件(如 ProxySQL )拦截并忽略 DROP INDEX 语句
    pagxir
        9
    pagxir  
       1 天前 via Android
    mysql 不是开源,直接改源码
    8eacekeep
        10
    8eacekeep  
       1 天前
    哈哈哈哈哈哈哈哈哈哈哈哈哈
    ocsp
        11
    ocsp  
       1 天前
    开眼了!
    kenvix
        12
    kenvix  
       1 天前   ❤️ 1
    明显是要你们加钱。推荐 ProxySQL
    my3157
        13
    my3157  
       1 天前
    说一个另类的方案, 类似破解软件的思路, 比如 java 写的可以用 JByteMod hook 掉判断
    spiffing
        14
    spiffing  
       1 天前
    开眼界了
    Int100
        15
    Int100  
       1 天前
    ??? 开拓眼界了
    y1y1
        16
    y1y1  
       1 天前
    频率越来越高??
    viking602
        17
    viking602  
       21 小时 1 分钟前
    无敌 哈哈哈哈哈 这是等着付费优化的
    layxy
        18
    layxy  
       20 小时 53 分钟前
    这不是很明显的付费优化点吗
    dododada
        19
    dododada  
       20 小时 42 分钟前
    命令触发器试试呢; plugin 是做 binlong 前后处理的,应该不行
    dumbbell5kg
        20
    dumbbell5kg  
       20 小时 41 分钟前
    写个 javaagent 改字节码
    dddd1919
        21
    dddd1919  
       20 小时 34 分钟前
    防御式编程大佬,膜拜一下
    shangfabao
        22
    shangfabao  
       20 小时 0 分钟前
    简单粗暴,把这个用户的相关权限去掉,他要是用的 root ,当我没说
    xclimbing
        23
    xclimbing  
       19 小时 53 分钟前
    断人财路如杀人父母,让客户继续花钱优化呗。
    wheat0r
        24
    wheat0r  
       19 小时 49 分钟前
    以前做手游的
    tars13344
        25
    tars13344  
       19 小时 31 分钟前
    还特么有这种玩法
    pkoukk
        26
    pkoukk  
       19 小时 29 分钟前
    还真有这么干的啊
    Eathein
        27
    Eathein  
       19 小时 25 分钟前
    单走一个 6
    li746224
        28
    li746224  
       19 小时 18 分钟前
    每天学到一个赚钱小知识
    ZeekChatCom
        29
    ZeekChatCom  
    OP
       19 小时 17 分钟前
    @shangfabao 我说了权限去掉了,程序会报错。
    xmumiffy
        30
    xmumiffy  
       19 小时 17 分钟前 via Android
    @shangfabao 没权限就给你报错
    ZeekChatCom
        31
    ZeekChatCom  
    OP
       19 小时 17 分钟前
    对方不承认有这个问题。其实我在 sql 审计中看到了相关的 sql ,由于无法看到源代码,所以没办法修改
    HojiOShi
        32
    HojiOShi  
       19 小时 16 分钟前
    drop 的频率越来越高?搞出这种操作就算了,难不成这个程序还加了这种云控?
    ZeekChatCom
        33
    ZeekChatCom  
    OP
       19 小时 15 分钟前
    mysql proxy 我看看,不知道有过滤 sql 的功能。
    ProxySql 和 MaxScale 我也看看,谢谢大家。
    ZeekChatCom
        34
    ZeekChatCom  
    OP
       19 小时 14 分钟前
    @HojiOShi 未必需要云控。也许可以根据你部署时间或者数据量来:数据量越大,频率越高;运行时间越长,频率越高
    ZeekChatCom
        35
    ZeekChatCom  
    OP
       19 小时 13 分钟前   ❤️ 1
    @evan9527 我和客户说了这些可能性,但是供应商不承认。
    guanzhangzhang
        36
    guanzhangzhang  
       19 小时 13 分钟前
    如果闭源程序是 java 看看怎么 hook 掉那个 drop index ,否则就中间件代理了,把 drop index 虚假返回
    ZeekChatCom
        37
    ZeekChatCom  
    OP
       19 小时 12 分钟前
    @pagxir 一是暂时没有这个把握修改 MySql 源码;二是我们使用的是云数据库。
    evan1
        38
    evan1  
       19 小时 12 分钟前   ❤️ 1
    楼上 ProxySql 是正解。

    这公司太缺德了,把公司名称爆出来给大家避避雷。
    ZeekChatCom
        39
    ZeekChatCom  
    OP
       19 小时 12 分钟前
    @guanzhangzhang 是的,我目前是想的加一层中间件来搞,最好有提供这个功能的现成的中间件。
    ZeekChatCom
        40
    ZeekChatCom  
    OP
       19 小时 11 分钟前
    @evan1 对方小公司。暂时不报了。能解决就算了。客户不打算继续和他合作,准备换程序了
    caocong
        41
    caocong  
       19 小时 8 分钟前
    云数据库既然有审计,不能从审计规则拒绝掉么
    ZeekChatCom
        42
    ZeekChatCom  
    OP
       19 小时 4 分钟前
    @caocong 那是事后的审计。也就是执行的 sql 记录。直接拿掉权限不给机会执行,会报错,整个程序会挂掉。
    Sakamakiryo
        43
    Sakamakiryo  
       19 小时 4 分钟前
    我一开始以为网上的付费优化是段子,没想到是真的=-= 求爆名字 避雷
    uudaoshi
        44
    uudaoshi  
       19 小时 3 分钟前
    @evan1 不算缺德吧?

    闭源买的是应用程序,有问题让他们改,你去改人家源码是破解行为吧
    evan9527
        45
    evan9527  
       19 小时 3 分钟前
    @ZeekChatCom #35 承不承认不重要,你问问是不是加钱能优化。
    kokutou
        46
    kokutou  
       18 小时 58 分钟前
    @ZeekChatCom #35 我是供应商我也不承认
    evan1
        47
    evan1  
       18 小时 32 分钟前
    @uudaoshi #44 这还不算么,要是你是甲方遇到这种乙方不恶心么。

    技术能力不行导致性能有问题都好说,一分钱一分货,不行加钱找专家买更好的服务。但 op 遇到的这种是偷偷故意搞破坏啊。。

    和 chatgpt 用多了就降智一样。
    gxy2825
        48
    gxy2825  
       18 小时 29 分钟前
    承包今日笑点
    lasuar
        49
    lasuar  
       18 小时 0 分钟前
    @ZeekChatCom #40 这种程度你都不报名字,阁下在某种方面来说也是个‘人才’🙉
    qingbu
        50
    qingbu  
       17 小时 26 分钟前
    可以用 Proxy ,把对应账号的 drop 相关的 SQL 屏蔽掉。也就是假装执行成功,其实并没有。当然如果有 Proxy 的话不用那么麻烦。把可以把主动检测索引的语句返回值,返回它想要到。这样就不会触发删索引了
    guqikang
        51
    guqikang  
       16 小时 39 分钟前
    真是小刀拉屁股了
    Arthit
        52
    Arthit  
       16 小时 25 分钟前
    nb
    kkkbbb
        53
    kkkbbb  
       16 小时 20 分钟前
    客户买了程序,都没有售后维护么?为啥买了别人的程序,你们去维护,我觉得这也挺奇怪的
    binge921
        54
    binge921  
       16 小时 3 分钟前
    太强了 学到了
    xiangbohua
        55
    xiangbohua  
       15 小时 51 分钟前
    添加索引数据量大的时候挺耗时的吧,频繁这么搞,是等着付费优化呢
    ZeekChatCom
        56
    ZeekChatCom  
    OP
       15 小时 16 分钟前
    已经通过 ProxySQL 的 Query Rewrite 功能实现了。感谢各位大佬的帮助。

    INSERT INTO mysql_query_rules (rule_id, active, match_pattern, replace_pattern) VALUES (1, 1, '^DROP INDEX .* ON .*$', 'select 1');
    clifftts
        57
    clifftts  
       15 小时 4 分钟前
    国内代码都这样写,何愁赚不到钱,35 被优化
    defunct9
        58
    defunct9  
       14 小时 55 分钟前
    有始有终,好同志。
    lambdaq
        59
    lambdaq  
       14 小时 46 分钟前
    xhs 说大概率 用友

    搜 技术源 ORG 搬运的。
    llsquaer
        60
    llsquaer  
       14 小时 34 分钟前
    思路清晰,执行可靠,他们遇到和他较真的了。没较真的那不得收一笔
    kepenj
        61
    kepenj  
       13 小时 57 分钟前
    哪家产品的付费优化,op 放出些关键字吧,大伙也好避避雷。
    yiqiao
        62
    yiqiao  
       13 小时 51 分钟前
    @lambdaq 用友不算小公司吧
    这设计天秀,OP 定位这问题也花不少时间吧
    risan
        63
    risan  
       13 小时 45 分钟前
    6
    tairan2006
        64
    tairan2006  
       13 小时 32 分钟前
    笑死
    cando
        65
    cando  
       13 小时 20 分钟前
    6
    Torpedo
        66
    Torpedo  
       13 小时 12 分钟前
    还有自动 去索引的功能
    prosgtsr
        67
    prosgtsr  
       13 小时 2 分钟前 via iPhone
    天秀
    billbob
        68
    billbob  
       12 小时 58 分钟前
    用的是 JPA 吧,ONDROP,类映射,只有在实体声明了才给你创建不然会还原的.

    c#里面 EN.net 也有类映射
    phinex
        69
    phinex  
       12 小时 52 分钟前 via Android
    钱原来是这么挣得
    ZeekChatCom
        70
    ZeekChatCom  
    OP
       12 小时 51 分钟前
    @yiqiao 不是用友,是陕西的一家小公司。

    @yiqiao 其实没花多少时间,有 sql 审计,搜索到了相关的语句。

    @billbob 不是 jpa
    TimPeake
        71
    TimPeake  
       12 小时 43 分钟前
    太有趣了,还以为这种事儿只有段子才能看到
    seansong
        72
    seansong  
       10 小时 33 分钟前
    没付尾款?
    ajax10086
        73
    ajax10086  
       10 小时 30 分钟前
    商业鬼才,公司名首字母曝一下也行
    xuanbg
        74
    xuanbg  
       39 分钟前
    正常运维谁给程序 DROP 权限啊,所以 OP 可以直接去掉 DROP INDEX 的权限,然后让供应商解决报错导致程序挂掉的问题。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   965 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 28ms · UTC 21:45 · PVG 05:45 · LAX 13:45 · JFK 16:45
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.