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
unt
V2EX  ›  MySQL

为什么还有很多人不愿意放弃 mysql5.7

  •  
  •   unt · 338 天前 via iPhone · 16018 次点击
    这是一个创建于 338 天前的主题,其中的信息可能已经有所发展或是发生改变。
    切换至 8 的过程中究竟有哪些坑
    第 1 条附言  ·  338 天前

    跑偏了跑偏了,我不是在吐槽为什么不用8,而是真心在问切换版本过程中有哪些坑,我好留意一下。

    第 2 条附言  ·  338 天前
    全新项目!全新项目!全新服务器!全新架构代码!纯自研!无交付压力!一切从 0 开始!

    老项目动它是疯了吗。
    120 条回复    2023-12-25 15:28:32 +08:00
    1  2  
    JinTianYi456
        1
    JinTianYi456  
       338 天前   ❤️ 3
    java8 都没说话,[狗头]
    paradox8599
        2
    paradox8599  
       338 天前 via Android
    我新项目都用 postgres 了
    wangkun025
        3
    wangkun025  
       338 天前
    操作系统没跟上。
    adoal
        4
    adoal  
       338 天前 via iPhone   ❤️ 5
    比如那些把聚合查询里 select 非聚合值这种不规范特性当宝又连 only full group by = false 选项都懒得设置的阿狗阿猫…
    NewYear
        5
    NewYear  
       338 天前   ❤️ 5
    为什么要放弃一个运行得好好的项目呢……

    对于破坏性升级,除了要代码做兼容,意味着会有新的 bug ,数据库就更麻烦,未必能及时发现,何苦呢……
    NewYear
        6
    NewYear  
       338 天前
    另外就是一些新特性用不上,老的语言和版本还是用着很舒服的。
    unt
        7
    unt  
    OP
       338 天前 via iPhone
    @NewYear 主要是不肯学吧,老项目肯定没话讲啊,谁会干这种吃力不讨好的事儿。
    我是说现在从 0 开始的项目。
    adoal
        8
    adoal  
       338 天前 via iPhone   ❤️ 4
    跟你说个真事,上个月我评审了一个服务类项目验收,其中派工单用的平台是 2021 年交付的,竟然用的是 CentOS 6 + Java 6 + Tomcat 6 这个三兄弟全都 EoL 很多年的老六组合。
    unt
        9
    unt  
    OP
       338 天前 via iPhone
    @JinTianYi456 java8 不是挺好的吗
    unt
        10
    unt  
    OP
       338 天前 via iPhone
    @adoal 一套代码,卖 10 年
    mobbdeep
        11
    mobbdeep  
       338 天前   ❤️ 1
    新项目说不定就是老项目魔改一下呢,用老技术快速交付,省时省力同时满足用户需求的情况下,没什么问题吧
    webshe11
        12
    webshe11  
       338 天前   ❤️ 5
    什么时候出 5.7 了?我还在用 5.5 ( doge
    unt
        13
    unt  
    OP
       338 天前 via iPhone
    开这个标题主要是最近遇到两个事儿:
    1. 有一个设备通信业务场景需要 json 数据,这个 json 逻辑很复杂,嵌套了 6 层应该,错任何一个参数设备都无法识别。我说你们就建张表,id,name,json 三个字段足以,所有数据前端往 json 字段里传。可是后端居然说 mysql 处理 json 很麻烦,不干,非要把所有字段拆散,然后返回的时候拼接。我真的会谢。然后我们说那我们把 json 转成字符串存总可以了吧。还是不干…………
    2. 还有一件事是万级数据联合查询一次性返回,我在 mysql8 上用 json_ARRAYAGG 秒查,在 5.7 上花了 18s 多,他们在优化速度,速度极限是在 6s 多,始终提不上去,很浪费工作时间
    zealic
        14
    zealic  
       338 天前
    COBOL 表示还能战到 2038 年
    unt
        15
    unt  
    OP
       338 天前 via iPhone
    @mobbdeep 不是,是从 0 开始的,新架构新技术,连服务器都是全新的。而且没有交付压力
    Donaldo
        16
    Donaldo  
       338 天前
    @unt #15 程序员是老的,或者程序员看的教程是老的,想想看也挺正常,人肯定优先用自己最熟悉的版本来做产出。特别:学习新版本的特性很可能没有什么回报,还会引入不可知的问题。。
    unt
        17
    unt  
    OP
       338 天前 via iPhone
    @Donaldo 话确实如此,没毛病的,比如 centos 我用 7.9 ,node 用 16 ,等等。一个道理。但是 8 应该是趋势吧,早晚要用的,而且某些方面确实优化了一些,代码方面和设计方面能精简不少。我总感觉有些人不肯学。
    Donaldo
        18
    Donaldo  
       338 天前   ❤️ 1
    @unt #17 就我个人而言,如果涉及到合作或者工作的项目,那就听领导的/听大伙的,绝不自己多说一句用什么新的好的,确实有这种“谨言慎行,少说少错”的心态。如果是我自己的项目,那我愿意去尝试一下新鲜事物。我估计有一部分人是我这样的心态
    yumizhao888
        19
    yumizhao888  
       338 天前 via iPhone   ❤️ 1
    一看就是学生。
    运行正常的项目傻逼才乱折腾。
    laozhoubuluo
        20
    laozhoubuluo  
       338 天前
    坑的话肯定是要对着实现和 https://dev.mysql.com/doc/refman/8.0/en/upgrading-from-previous-series.html 来做比对的。而且有些坑如果人员流动比较大的项目或者时间比较长的项目确实很难提前发现,比如 GROUP BY 隐式排序在 8.0.13 移除了之类的。
    再比如项目使用的是 MyISAM 引擎,MySQL 5.7 和 8.x 对这个引擎基本没啥优化,没有生命周期限制的部门自然更没有动力去搞升级了。至于从 MySQL 5.6 + MyISAM 切换 MySQL 5.7 + InnoDB 那就又是额外的一堆坑了。

    当然新项目那自然应该直接用新东西,这个倒是没啥疑问。MySQL 升级虽说有坑但也相对平顺了,总比 Java 8 升级 Java 11 事情少的多。
    k9982874
        21
    k9982874  
       338 天前
    升级到 8 能多赚钱吗?不能何必要动一个稳定的项目
    keymao
        22
    keymao  
       338 天前
    多出来的成本谁来付? 提到付钱了就都安静了是吧? 😂
    Muyiafan
        23
    Muyiafan  
       338 天前
    系统稳定在跑就别乱动了。
    新开的项目可以按照最新的 LTS 版本来。
    xuanbg
        24
    xuanbg  
       338 天前
    5.7 升 8 是毫无障碍的。但是,系统运行的好好的,啥毛病没有,升级到 8 做什么?
    1QwQ1
        25
    1QwQ1  
       338 天前
    存 json 为啥不用 mongo ?
    ZXiangQAQ
        26
    ZXiangQAQ  
       338 天前
    因为公司没有 mysql8 。。。
    wanguorui123
        27
    wanguorui123  
       338 天前
    在生产环境兼容性才是王道,自己玩无所谓
    NoobNoob030
        28
    NoobNoob030  
       338 天前
    因为开发不懂或者用不上 8 的新特新,技术是服务于业务的,业务简单技术玩出花能给项目赚几个钱?
    Deshun
        29
    Deshun  
       338 天前
    版本不兼容,占用变高了。
    Felldeadbird
        30
    Felldeadbird  
       338 天前
    首先升级 8 会遇到登录密码问题。
    然后数据库很少是直接升级吧。生产服务器我没升级过 Mysql 版本。
    wxw752
        31
    wxw752  
       338 天前
    做自研项目的一般才会考虑升级吧,我们升级了,但是用的是全量+增量同步数据的方法升级的。没有在原来基础升级。
    me1onsoda
        32
    me1onsoda  
       338 天前
    @1QwQ1 MySQL 能用的情况下为什么要再引入一个中间件,提高系统复杂度?
    nothingistrue
        33
    nothingistrue  
       338 天前
    你这话,换个场景可能更容易理解。公司为什么不愿意一直保持员工年龄年轻化。
    8355
        34
    8355  
       338 天前
    因为 5.7 还能用,没有任何刚需,如果数据量大了,加字段不升级也不行。
    layxy
        35
    layxy  
       338 天前
    5.7 用的好好地为啥要升级,除非有足够大的性能提供或者有用的新特性,否则根本没办法说服领导升级,就像老生常谈的 jdk 版本升级问题一样,你不升级没啥事,升级除了问题你要负责任的
    gongxuanzhang
        36
    gongxuanzhang  
       338 天前
    @unt 你甚至不肯提一句 MongoDB
    1QwQ1
        37
    1QwQ1  
       338 天前
    @me1onsoda 哈?用了该用的就是提高系统复杂度?这是什么逻辑,那为啥全公司不用一套系统,一个开发,要那么多开发还不方便管理还提高了成本。
    weeei
        38
    weeei  
       338 天前
    不升级的原因一般不是不想用新的,现实原因:
    1. 项目迭代快,需求都做不完还搞升级的 bug ?
    2. 大版本升级可能会带来隐形的 Bug 会把自己坑死,典型的出了问题就是你的问题
    weeei
        39
    weeei  
       338 天前
    从非技术角度考虑才能想明白。
    opengps
        40
    opengps  
       338 天前
    只要能用,我宁愿一直用下去
    CodeCodeStudy
        41
    CodeCodeStudy  
       338 天前
    @unt #17 centos 8 EOL 更早
    https://wiki.centos.org/
    The current major version is 7 (2009). 8(2111) went EoL on 2021-12-31. 8-Stream will be supported until May 2024. 9-Stream will be supported until May 2027
    https://www.centos.org/centos-linux/
    Jun 30th, 2024
    也就是 7 和 8 stream (不是 8 )在 24 年中结束支持
    jjianwen68
        42
    jjianwen68  
       338 天前
    还在用 5.6 ,每次提一句准备更新到 5.7 ,然后就不了了之
    AlexHsu
        43
    AlexHsu  
       338 天前
    因为国产化套壳 5.7 啊
    killva4624
        44
    killva4624  
       338 天前
    借楼问一句 mysql 里的 json 性能如何?
    我们有个内部系统,这两天发现是通过一张 id\k\v 列的表实现 json 读写,单个 id 的 kv 对无数量上限;有通过 id 读所有 kv 和根据 id 增写 kv 的场景;这种情况直接用原生的 json 会有什么收益吗?
    CodeCodeStudy
        45
    CodeCodeStudy  
       338 天前
    @unt #17 因为升高版本的话要经过测试的,不然容易踩到坑,比如 nodejs 在 centos7 上只能安装 16 ,安装不了 18

    https://nodejs.org/en/blog/announcements/v18-release-announce/#toolchain-and-compiler-upgrades

    Prebuilt binaries for Linux are now built on Red Hat Enterprise Linux (RHEL) 8 and are compatible with Linux distributions based on glibc 2.28 or later, for example, Debian 10, RHEL 8, Ubuntu 20.04.
    CodeCodeStudy
        46
    CodeCodeStudy  
       338 天前
    查询缓存没有了

    https://dev.mysql.com/doc/refman/5.7/en/query-cache.html

    The query cache is deprecated as of MySQL 5.7.20, and is removed in MySQL 8.0.
    aLazarus
        47
    aLazarus  
       338 天前
    所以如果是自己的独立项目,大家建议用那种数据库?(在并发极低,数据量少的前提下)
    bthulu
        48
    bthulu  
       338 天前   ❤️ 5
    看看楼上这些人, 你应该知道为什么了吧?
    你们公司招的员工年龄太大了, 他们毕业的时候用的还是 mysql5.5 甚至更低, 工作几年了好不容易习惯了 5.7, 你说换 8.0? 对不起, 有这折腾的时候, 还不如回家陪老婆孩子.
    你换个思路, 把非关键岗位的全辞掉, 换 985 刚毕业的大学生来, 保管统统给你换成 mysql8.
    cndenis
        49
    cndenis  
       338 天前
    @unt 5.7 已经支持 JSON 了, 但 JSON 性能很差,而且无法索引。如果后端需要在数据库中用 SQL 搜索或是 JOIN 的话,全部数据塞一个字段确实不太好,至少也要加些列做索引用
    “万级数据”啥概念,MySQL 的表不到 100 万都不算大吧。就算一条数据 1KB ,一万条才 10MB ,能全内存操作的量出瓶颈是不应该的
    EricXuu
        50
    EricXuu  
       338 天前 via Android
    我们公司升了,收益巨大。比如大表秒加字段,就是爽,感谢腾讯游戏 dba 的 commit 。
    cnoder
        51
    cnoder  
       338 天前   ❤️ 1
    aws 要强制升级 mysql8 了
    lujiaxing
        52
    lujiaxing  
       338 天前
    @aLazarus 自己的项目直接用 PostgreSQL 了.... 哪儿还有 MySQL 的事儿啊...

    企业项目用 MySQL 5.7 基本都是因为项目框架比较老导致的. 没办法.
    我之前一家公司就是这样, 公司技术团队有两个, 一个是 S 市的 Java 团队, 另一个我所在 C 市的 .NET 团队. 我就在这个 .NET 团队里... 我们用的技术栈是 .NET 6 + MySQL 8.0, 用到了一部分 MySQL 8 才有的特性 (比如 CTE, 对字段做位运算等). 结果技术总监从 S 市那边过来发现好像不太行. S 市 Java 团队那边用的 Springboot 版本太老了, 不支持 MySQL 8, 最高只能支持到 MySQL 5.7. 没办法还是退回 MySQL 5.7, 原来用到的 MySQL 8 的特性也只能用其他办法解决.
    imkku
        53
    imkku  
       338 天前
    看到说复杂 json 的时候,我第一反应也是咋没提 MongoDB ?
    coderzhangsan
        54
    coderzhangsan  
       338 天前
    老项目运行好好的数据库,为什么要换呢?从成本、性能、项目稳定角度全面分析下换的好处,不然的话,只能把你换了😄(开个玩笑)。

    如果是新项目,自由选择;有人说老人技术栈旧什么的,都是些诡辩之词,根本就不懂项目管理,脑子装的全是唯技术论的调子,其他专业学和理论估计毛都不会看的,这类人说实话都不适合做项目管理,所以职业规划最好不要走技术管理岗。
    aLazarus
        55
    aLazarus  
       338 天前
    @lujiaxing #52 感谢回复。因为是我自己的娱乐项目,所以技术选型上自由度比较高,在语言和框架上 spring boot 3 和 jdk17 (写一半的时候才出的 jdk21 )
    paopjian
        56
    paopjian  
       338 天前
    路径依赖
    oneisall8955
        57
    oneisall8955  
       338 天前 via Android
    @aLazarus sqlite 等文件数据库
    BBCCBB
        58
    BBCCBB  
       338 天前
    @lujiaxing mysql 和 springboot 没关系呀, 和对应的 mysql 驱动有关系.
    aLazarus
        59
    aLazarus  
       338 天前
    @oneisall8955 #57 额这个我倒没调研过,只知道在一些客户端上会用到这个
    lambdaq
        60
    lambdaq  
       338 天前
    ❎ 为什么还有很多人不愿意放弃 mysql5.7
    ✅ 为什么还有很多人不愿意放弃 mysql
    lujiaxing
        61
    lujiaxing  
       338 天前
    @BBCCBB 我又不是做 Java 的. 我也不懂这些... 反正技术老大说不行就不行呗... 估计是支持 mysql 8 的驱动跟那个版本的 springboot 不兼容吧.
    NoKey
        62
    NoKey  
       338 天前   ❤️ 1
    之前遇到一个情况,centos7.9+jdk17.0.9 ,某个加密算法会触发一个 bug ,回退到 centos7.7+jdk17.0.2 就没问题,一天到晚项目紧张的要死,谁有空去研究到底为什么,干脆就拿稳定环境到处装完事,又没啥要求强制的需要啥版本
    tyzrj766
        63
    tyzrj766  
       338 天前 via Android
    非必要不升级,不然堆的屎山容易翻车😁
    xingguang
        64
    xingguang  
       338 天前
    @unt java8 挺好,mysql5.7 就不好,多少有点双标了
    boboaiya3
        65
    boboaiya3  
       338 天前
    我刚刚查了我们的 mysql 版本 ,是 8 ,我好像对 mysql 版本无感,好像都差不多,基本开发都单表查询,加加索引,可能我太菜了
    cenbiq
        66
    cenbiq  
       338 天前
    居然还有限制数据库版本的,那像我这种连数据库都不能限定(运行在什么数据库上必须由客户提供的数据库决定)的项目岂不是...
    roundgis
        67
    roundgis  
       338 天前 via Android
    github 從 5.7 換 8 花了一年
    xiangyuecn
        68
    xiangyuecn  
       338 天前
    前几天不是说 github 花了几年时间才完成升级的吗,关键基础设施不是苹果家的 macos ios 不升不让用 强女干用户
    zzzmh
        69
    zzzmh  
       338 天前
    因为 5.5 和 5.6 有些语法和功能不一样,要不然我更喜欢 5.5 ,服务器内存太金贵了,虽然没具体测过,但是肉眼感觉是版本越低越省内存,java 同理。1c2g1m 的服务器跑 docker tomcat 8 jdk8 openj9 redis mysql5.7 可以流畅运行 负载个几百人同时不炸 换高版本怕是启动就一大半内存没了
    ZhLTE
        70
    ZhLTE  
       338 天前
    xxx 的网闸同步只支持到 mysql5.7 用 8 就报错 报错就 gg
    aino
        71
    aino  
       338 天前
    就一个工具罢了
    dif
        72
    dif  
       338 天前
    看团队氛围吧,爱折腾的,基本上都是最新得。我一直跟着安全版本升级的。要说有没有坑,肯定有。遇到了再说,大不了回滚。再说了,谁家核心业务直接搞大版本升级?不都是边缘业务开搞,没问题了才尝试得么?
    Narcissu5
        73
    Narcissu5  
       338 天前
    老项目不升级版本我感觉更多是对个人有利,毕竟只要我负责期间不出问题就好,改出问题反而影响绩效
    但是对于公司来说,EOL 的项目非常危险,一旦遇到漏洞被攻击连办法都没有(可能很多人负责的项目不够引人注目,没有遇到过这种问题
    还有就是万一项目有新需求,连招人可能都困难(比如现在招个 dephi 试试?
    sadfQED2
        74
    sadfQED2  
       338 天前 via Android
    @adoal 你这算啥,我 21 年从百度离职的时候,线上用的还是 centos4+php5.5 ,而且还是几乎每个人都用过的核心业务
    lstz
        75
    lstz  
       338 天前 via iPhone
    mysql5.7 能用,历史踩坑的人多
    adoal
        76
    adoal  
       338 天前
    @sadfQED2 你的“线上用的还是”是新上项目还是存量系统继续用?我的是 21 年新上项目😭
    adoal
        77
    adoal  
       338 天前
    @zealic 正在在用一个核心是 COBOL 开发的系统(非银行)
    tiedan
        78
    tiedan  
       338 天前
    想换 8.0 但是用的内部 mysql 连接库是一个 10 年前的库,不支持 8.0 ,连接的时候会报错
    unt
        79
    unt  
    OP
       338 天前
    😅留言好多。请注意第二条附言。
    unt
        80
    unt  
    OP
       338 天前
    @zzzmh #69 这个确实是的,很多东西都类似,比如 win7 最流畅。
    unt
        81
    unt  
    OP
       338 天前
    @cndenis #49
    1. 这个 json 不需要搜索,它就是一个文本概念,没有任何逻辑意义,为什么不用 mongo ,因为只有这一个表用到了 json;
    2. 是一次性返回处理完的数万条记录,不是分页查询。
    sadfQED2
        82
    sadfQED2  
       338 天前 via Android
    @adoal 确实存量,用了十多年了。我当年在职的时候曾经想推动升级,结果推不动,然后就不管了,目测现在也还是 centos4+php5.5
    unt
        83
    unt  
    OP
       338 天前
    @imkku #53
    @gongxuanzhang #36 因为只有这一张表用到了 json,而且数据量不大,极限只有 1W 条数据
    zengzizhao
        84
    zengzizhao  
       338 天前
    @1QwQ1 #25 应该是根据 mongo 和 mysql 各自特点决定业务用什么,而不是因为存 json 而用 mongo 吧
    unt
        85
    unt  
    OP
       338 天前
    @CodeCodeStudy #41 嗯,这个我知道,但是我们不用 8 的原因是因为怕配置和环境出问题
    unt
        86
    unt  
    OP
       338 天前
    @zengzizhao #84 bingo
    unt
        87
    unt  
    OP
       338 天前
    总结:
    1. 其实也看程序员能力,不能怪版本。只是现在有些人数据查得慢,处理得慢,怪数据库性能不行,不懂怎么去优化。厉害的程序员用 5.7 以下应该也能优化得极好,只不过是达到同样效果代码和逻辑上多走了点路而已,那确实是完全不用升级。

    2. 楼上老哥找出原因了,哈哈,年龄都太大了。
    pkoukk
        88
    pkoukk  
       338 天前
    关程序员啥事,用什么版本的 Mysql 不是运维说了算么?
    就是程序员只会用 mysql 5.5 的语法,你给他装个 8.0 ,他还能不会用了?
    ttvast
        89
    ttvast  
       338 天前
    我连 innodb 都不想用,myisam 最高。
    chenqh
        90
    chenqh  
       338 天前
    @sadfQED2 网上不是说百度的 php 都转 golang 了吗?
    dorothyREN
        91
    dorothyREN  
       338 天前
    @killva4624 json 直接上 pg ,用什么 mysql ,拉垮的不行
    romisanic
        92
    romisanic  
       338 天前
    看出来了,在玩具上用个新版本就觉得领先了,甚至能获得技术优越感的也大有人在
    sadfQED2
        93
    sadfQED2  
       338 天前 via Android
    @chenqh 新项目都转了
    chenqh
        94
    chenqh  
       338 天前
    @sadfQED2 好吧,虽然说感觉百度现在也没成功什么新项目了,逃
    yvescheung
        95
    yvescheung  
       338 天前   ❤️ 3
    @bthulu
    阿里云也是你这个想法,辞掉老员工,结果就是不断的 boom
    滴滴程序员心想,不就升级一个 k8s 嘛,然后直接宕机 12 小时
    zx9481
        96
    zx9481  
       338 天前
    当然可以换,前一段时间,GitHub 将内部 1200 多个 MySQL 实例组成的数据库集群组( fleet )升级到了 MySQL 8.0 版本
    https://github.blog/2023-12-07-upgrading-github-com-to-mysql-8-0/
    SWALLOWW
        97
    SWALLOWW  
       338 天前
    我一般用 sqlite ,mysql 都懒得用
    DeWjjj
        98
    DeWjjj  
       338 天前
    因为升级是一个很麻烦的事情,要一点一点逐步去替代。
    比如最简单的方式是,先把数据同步到 mysql8 ,然后接口上在做负载均衡,然后试运行。
    最后,再切换到新的技术栈上面,但是这样是很费力的。
    如果是突发奇想想直接换,大概率面临就是宕机。
    salparadise
        99
    salparadise  
       338 天前
    @JinTianYi456 哈哈哈,的确
    Features
        100
    Features  
       337 天前
    mysql8 性能有没有明显提升啊?
    像 PHP5 到 php7 的性能提升幅度舒适惊讶到我了
    其他倒是无所谓了
    1  2  
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2817 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 36ms · UTC 07:36 · PVG 15:36 · LAX 23:36 · JFK 02:36
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.