跑偏了跑偏了,我不是在吐槽为什么不用8,而是真心在问切换版本过程中有哪些坑,我好留意一下。
1
JinTianYi456 2023-12-22 01:04:40 +08:00 3
java8 都没说话,[狗头]
|
2
paradox8599 2023-12-22 01:09:42 +08:00 via Android
我新项目都用 postgres 了
|
3
wangkun025 2023-12-22 01:12:34 +08:00
操作系统没跟上。
|
4
adoal 2023-12-22 01:13:25 +08:00 via iPhone 5
比如那些把聚合查询里 select 非聚合值这种不规范特性当宝又连 only full group by = false 选项都懒得设置的阿狗阿猫…
|
5
NewYear 2023-12-22 01:13:37 +08:00 5
为什么要放弃一个运行得好好的项目呢……
对于破坏性升级,除了要代码做兼容,意味着会有新的 bug ,数据库就更麻烦,未必能及时发现,何苦呢…… |
6
NewYear 2023-12-22 01:15:10 +08:00
另外就是一些新特性用不上,老的语言和版本还是用着很舒服的。
|
7
unt OP @NewYear 主要是不肯学吧,老项目肯定没话讲啊,谁会干这种吃力不讨好的事儿。
我是说现在从 0 开始的项目。 |
8
adoal 2023-12-22 01:17:59 +08:00 via iPhone 4
跟你说个真事,上个月我评审了一个服务类项目验收,其中派工单用的平台是 2021 年交付的,竟然用的是 CentOS 6 + Java 6 + Tomcat 6 这个三兄弟全都 EoL 很多年的老六组合。
|
9
unt OP @JinTianYi456 java8 不是挺好的吗
|
11
mobbdeep 2023-12-22 01:24:05 +08:00 1
新项目说不定就是老项目魔改一下呢,用老技术快速交付,省时省力同时满足用户需求的情况下,没什么问题吧
|
12
webshe11 2023-12-22 01:28:09 +08:00 5
什么时候出 5.7 了?我还在用 5.5 ( doge
|
13
unt OP 开这个标题主要是最近遇到两个事儿:
1. 有一个设备通信业务场景需要 json 数据,这个 json 逻辑很复杂,嵌套了 6 层应该,错任何一个参数设备都无法识别。我说你们就建张表,id,name,json 三个字段足以,所有数据前端往 json 字段里传。可是后端居然说 mysql 处理 json 很麻烦,不干,非要把所有字段拆散,然后返回的时候拼接。我真的会谢。然后我们说那我们把 json 转成字符串存总可以了吧。还是不干………… 2. 还有一件事是万级数据联合查询一次性返回,我在 mysql8 上用 json_ARRAYAGG 秒查,在 5.7 上花了 18s 多,他们在优化速度,速度极限是在 6s 多,始终提不上去,很浪费工作时间 |
14
zealic 2023-12-22 01:43:14 +08:00
COBOL 表示还能战到 2038 年
|
16
Donaldo 2023-12-22 01:48:24 +08:00
@unt #15 程序员是老的,或者程序员看的教程是老的,想想看也挺正常,人肯定优先用自己最熟悉的版本来做产出。特别:学习新版本的特性很可能没有什么回报,还会引入不可知的问题。。
|
17
unt OP @Donaldo 话确实如此,没毛病的,比如 centos 我用 7.9 ,node 用 16 ,等等。一个道理。但是 8 应该是趋势吧,早晚要用的,而且某些方面确实优化了一些,代码方面和设计方面能精简不少。我总感觉有些人不肯学。
|
18
Donaldo 2023-12-22 01:55:50 +08:00 1
@unt #17 就我个人而言,如果涉及到合作或者工作的项目,那就听领导的/听大伙的,绝不自己多说一句用什么新的好的,确实有这种“谨言慎行,少说少错”的心态。如果是我自己的项目,那我愿意去尝试一下新鲜事物。我估计有一部分人是我这样的心态
|
19
yumizhao888 2023-12-22 06:32:37 +08:00 via iPhone 1
一看就是学生。
运行正常的项目傻逼才乱折腾。 |
20
laozhoubuluo 2023-12-22 08:06:37 +08:00
坑的话肯定是要对着实现和 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 事情少的多。 |
21
k9982874 2023-12-22 08:17:39 +08:00
升级到 8 能多赚钱吗?不能何必要动一个稳定的项目
|
22
keymao 2023-12-22 08:41:16 +08:00
多出来的成本谁来付? 提到付钱了就都安静了是吧? 😂
|
23
Muyiafan 2023-12-22 08:54:24 +08:00
系统稳定在跑就别乱动了。
新开的项目可以按照最新的 LTS 版本来。 |
24
xuanbg 2023-12-22 08:59:10 +08:00
5.7 升 8 是毫无障碍的。但是,系统运行的好好的,啥毛病没有,升级到 8 做什么?
|
25
1QwQ1 2023-12-22 09:03:44 +08:00
存 json 为啥不用 mongo ?
|
26
ZXiangQAQ 2023-12-22 09:05:33 +08:00
因为公司没有 mysql8 。。。
|
27
wanguorui123 2023-12-22 09:12:16 +08:00
在生产环境兼容性才是王道,自己玩无所谓
|
28
NoobNoob030 2023-12-22 09:12:42 +08:00
因为开发不懂或者用不上 8 的新特新,技术是服务于业务的,业务简单技术玩出花能给项目赚几个钱?
|
29
Deshun 2023-12-22 09:13:07 +08:00
版本不兼容,占用变高了。
|
30
Felldeadbird 2023-12-22 09:13:19 +08:00
首先升级 8 会遇到登录密码问题。
然后数据库很少是直接升级吧。生产服务器我没升级过 Mysql 版本。 |
31
wxw752 2023-12-22 09:16:59 +08:00
做自研项目的一般才会考虑升级吧,我们升级了,但是用的是全量+增量同步数据的方法升级的。没有在原来基础升级。
|
33
nothingistrue 2023-12-22 09:18:27 +08:00
你这话,换个场景可能更容易理解。公司为什么不愿意一直保持员工年龄年轻化。
|
34
8355 2023-12-22 09:19:21 +08:00
因为 5.7 还能用,没有任何刚需,如果数据量大了,加字段不升级也不行。
|
35
layxy 2023-12-22 09:22:50 +08:00
5.7 用的好好地为啥要升级,除非有足够大的性能提供或者有用的新特性,否则根本没办法说服领导升级,就像老生常谈的 jdk 版本升级问题一样,你不升级没啥事,升级除了问题你要负责任的
|
36
gongxuanzhang 2023-12-22 09:25:38 +08:00
@unt 你甚至不肯提一句 MongoDB
|
37
1QwQ1 2023-12-22 09:26:15 +08:00
@me1onsoda 哈?用了该用的就是提高系统复杂度?这是什么逻辑,那为啥全公司不用一套系统,一个开发,要那么多开发还不方便管理还提高了成本。
|
38
weeei 2023-12-22 09:27:10 +08:00
不升级的原因一般不是不想用新的,现实原因:
1. 项目迭代快,需求都做不完还搞升级的 bug ? 2. 大版本升级可能会带来隐形的 Bug 会把自己坑死,典型的出了问题就是你的问题 |
39
weeei 2023-12-22 09:28:08 +08:00
从非技术角度考虑才能想明白。
|
40
opengps 2023-12-22 09:28:30 +08:00
只要能用,我宁愿一直用下去
|
41
CodeCodeStudy 2023-12-22 09:28:30 +08:00
@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 年中结束支持 |
42
jjianwen68 2023-12-22 09:28:40 +08:00
还在用 5.6 ,每次提一句准备更新到 5.7 ,然后就不了了之
|
43
AlexHsu 2023-12-22 09:29:19 +08:00
因为国产化套壳 5.7 啊
|
44
killva4624 2023-12-22 09:29:55 +08:00
借楼问一句 mysql 里的 json 性能如何?
我们有个内部系统,这两天发现是通过一张 id\k\v 列的表实现 json 读写,单个 id 的 kv 对无数量上限;有通过 id 读所有 kv 和根据 id 增写 kv 的场景;这种情况直接用原生的 json 会有什么收益吗? |
45
CodeCodeStudy 2023-12-22 09:30:50 +08:00
@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. |
46
CodeCodeStudy 2023-12-22 09:32:53 +08:00
查询缓存没有了
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. |
47
aLazarus 2023-12-22 09:33:57 +08:00
所以如果是自己的独立项目,大家建议用那种数据库?(在并发极低,数据量少的前提下)
|
48
bthulu 2023-12-22 09:35:29 +08:00 5
看看楼上这些人, 你应该知道为什么了吧?
你们公司招的员工年龄太大了, 他们毕业的时候用的还是 mysql5.5 甚至更低, 工作几年了好不容易习惯了 5.7, 你说换 8.0? 对不起, 有这折腾的时候, 还不如回家陪老婆孩子. 你换个思路, 把非关键岗位的全辞掉, 换 985 刚毕业的大学生来, 保管统统给你换成 mysql8. |
49
cndenis 2023-12-22 09:35:37 +08:00
@unt 5.7 已经支持 JSON 了, 但 JSON 性能很差,而且无法索引。如果后端需要在数据库中用 SQL 搜索或是 JOIN 的话,全部数据塞一个字段确实不太好,至少也要加些列做索引用
“万级数据”啥概念,MySQL 的表不到 100 万都不算大吧。就算一条数据 1KB ,一万条才 10MB ,能全内存操作的量出瓶颈是不应该的 |
50
EricXuu 2023-12-22 09:36:38 +08:00 via Android
我们公司升了,收益巨大。比如大表秒加字段,就是爽,感谢腾讯游戏 dba 的 commit 。
|
51
cnoder 2023-12-22 09:36:44 +08:00 1
aws 要强制升级 mysql8 了
|
52
lujiaxing 2023-12-22 09:41:46 +08:00
@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 的特性也只能用其他办法解决. |
53
imkku 2023-12-22 09:45:34 +08:00
看到说复杂 json 的时候,我第一反应也是咋没提 MongoDB ?
|
54
coderzhangsan 2023-12-22 09:46:00 +08:00
老项目运行好好的数据库,为什么要换呢?从成本、性能、项目稳定角度全面分析下换的好处,不然的话,只能把你换了😄(开个玩笑)。
如果是新项目,自由选择;有人说老人技术栈旧什么的,都是些诡辩之词,根本就不懂项目管理,脑子装的全是唯技术论的调子,其他专业学和理论估计毛都不会看的,这类人说实话都不适合做项目管理,所以职业规划最好不要走技术管理岗。 |
55
aLazarus 2023-12-22 09:46:05 +08:00
@lujiaxing #52 感谢回复。因为是我自己的娱乐项目,所以技术选型上自由度比较高,在语言和框架上 spring boot 3 和 jdk17 (写一半的时候才出的 jdk21 )
|
56
paopjian 2023-12-22 09:48:32 +08:00
路径依赖
|
57
oneisall8955 2023-12-22 09:50:37 +08:00 via Android
@aLazarus sqlite 等文件数据库
|
59
aLazarus 2023-12-22 09:53:15 +08:00
@oneisall8955 #57 额这个我倒没调研过,只知道在一些客户端上会用到这个
|
60
lambdaq 2023-12-22 10:20:25 +08:00
❎ 为什么还有很多人不愿意放弃 mysql5.7
✅ 为什么还有很多人不愿意放弃 mysql |
61
lujiaxing 2023-12-22 10:20:40 +08:00
@BBCCBB 我又不是做 Java 的. 我也不懂这些... 反正技术老大说不行就不行呗... 估计是支持 mysql 8 的驱动跟那个版本的 springboot 不兼容吧.
|
62
NoKey 2023-12-22 10:21:26 +08:00 1
之前遇到一个情况,centos7.9+jdk17.0.9 ,某个加密算法会触发一个 bug ,回退到 centos7.7+jdk17.0.2 就没问题,一天到晚项目紧张的要死,谁有空去研究到底为什么,干脆就拿稳定环境到处装完事,又没啥要求强制的需要啥版本
|
63
tyzrj766 2023-12-22 10:27:15 +08:00 via Android
非必要不升级,不然堆的屎山容易翻车😁
|
65
boboaiya3 2023-12-22 10:32:34 +08:00
我刚刚查了我们的 mysql 版本 ,是 8 ,我好像对 mysql 版本无感,好像都差不多,基本开发都单表查询,加加索引,可能我太菜了
|
66
cenbiq 2023-12-22 10:37:45 +08:00
居然还有限制数据库版本的,那像我这种连数据库都不能限定(运行在什么数据库上必须由客户提供的数据库决定)的项目岂不是...
|
67
roundgis 2023-12-22 10:40:27 +08:00 via Android
github 從 5.7 換 8 花了一年
|
68
xiangyuecn 2023-12-22 10:41:58 +08:00
前几天不是说 github 花了几年时间才完成升级的吗,关键基础设施不是苹果家的 macos ios 不升不让用 强女干用户
|
69
zzzmh 2023-12-22 10:42:36 +08:00
因为 5.5 和 5.6 有些语法和功能不一样,要不然我更喜欢 5.5 ,服务器内存太金贵了,虽然没具体测过,但是肉眼感觉是版本越低越省内存,java 同理。1c2g1m 的服务器跑 docker tomcat 8 jdk8 openj9 redis mysql5.7 可以流畅运行 负载个几百人同时不炸 换高版本怕是启动就一大半内存没了
|
70
ZhLTE 2023-12-22 10:46:07 +08:00
xxx 的网闸同步只支持到 mysql5.7 用 8 就报错 报错就 gg
|
71
aino 2023-12-22 10:47:36 +08:00
就一个工具罢了
|
72
dif 2023-12-22 10:47:43 +08:00
看团队氛围吧,爱折腾的,基本上都是最新得。我一直跟着安全版本升级的。要说有没有坑,肯定有。遇到了再说,大不了回滚。再说了,谁家核心业务直接搞大版本升级?不都是边缘业务开搞,没问题了才尝试得么?
|
73
Narcissu5 2023-12-22 10:49:49 +08:00
老项目不升级版本我感觉更多是对个人有利,毕竟只要我负责期间不出问题就好,改出问题反而影响绩效
但是对于公司来说,EOL 的项目非常危险,一旦遇到漏洞被攻击连办法都没有(可能很多人负责的项目不够引人注目,没有遇到过这种问题 还有就是万一项目有新需求,连招人可能都困难(比如现在招个 dephi 试试? |
74
sadfQED2 2023-12-22 10:50:34 +08:00 via Android
@adoal 你这算啥,我 21 年从百度离职的时候,线上用的还是 centos4+php5.5 ,而且还是几乎每个人都用过的核心业务
|
75
lstz 2023-12-22 10:52:52 +08:00 via iPhone
mysql5.7 能用,历史踩坑的人多
|
78
tiedan 2023-12-22 10:56:23 +08:00
想换 8.0 但是用的内部 mysql 连接库是一个 10 年前的库,不支持 8.0 ,连接的时候会报错
|
79
unt OP 😅留言好多。请注意第二条附言。
|
81
unt OP @cndenis #49
1. 这个 json 不需要搜索,它就是一个文本概念,没有任何逻辑意义,为什么不用 mongo ,因为只有这一个表用到了 json; 2. 是一次性返回处理完的数万条记录,不是分页查询。 |
82
sadfQED2 2023-12-22 11:31:48 +08:00 via Android
@adoal 确实存量,用了十多年了。我当年在职的时候曾经想推动升级,结果推不动,然后就不管了,目测现在也还是 centos4+php5.5
|
83
unt OP |
84
zengzizhao 2023-12-22 11:41:04 +08:00
@1QwQ1 #25 应该是根据 mongo 和 mysql 各自特点决定业务用什么,而不是因为存 json 而用 mongo 吧
|
85
unt OP @CodeCodeStudy #41 嗯,这个我知道,但是我们不用 8 的原因是因为怕配置和环境出问题
|
86
unt OP @zengzizhao #84 bingo
|
87
unt OP 总结:
1. 其实也看程序员能力,不能怪版本。只是现在有些人数据查得慢,处理得慢,怪数据库性能不行,不懂怎么去优化。厉害的程序员用 5.7 以下应该也能优化得极好,只不过是达到同样效果代码和逻辑上多走了点路而已,那确实是完全不用升级。 2. 楼上老哥找出原因了,哈哈,年龄都太大了。 |
88
pkoukk 2023-12-22 13:46:18 +08:00
关程序员啥事,用什么版本的 Mysql 不是运维说了算么?
就是程序员只会用 mysql 5.5 的语法,你给他装个 8.0 ,他还能不会用了? |
89
ttvast 2023-12-22 13:51:31 +08:00
我连 innodb 都不想用,myisam 最高。
|
91
dorothyREN 2023-12-22 13:59:37 +08:00
@killva4624 json 直接上 pg ,用什么 mysql ,拉垮的不行
|
92
romisanic 2023-12-22 14:01:26 +08:00
看出来了,在玩具上用个新版本就觉得领先了,甚至能获得技术优越感的也大有人在
|
95
yvescheung 2023-12-22 14:13:48 +08:00 3
|
96
zx9481 2023-12-22 14:59:19 +08:00
当然可以换,前一段时间,GitHub 将内部 1200 多个 MySQL 实例组成的数据库集群组( fleet )升级到了 MySQL 8.0 版本
https://github.blog/2023-12-07-upgrading-github-com-to-mysql-8-0/ |
97
SWALLOWW 2023-12-22 15:11:22 +08:00
我一般用 sqlite ,mysql 都懒得用
|
98
DeWjjj 2023-12-22 15:22:50 +08:00
因为升级是一个很麻烦的事情,要一点一点逐步去替代。
比如最简单的方式是,先把数据同步到 mysql8 ,然后接口上在做负载均衡,然后试运行。 最后,再切换到新的技术栈上面,但是这样是很费力的。 如果是突发奇想想直接换,大概率面临就是宕机。 |
99
salparadise 2023-12-22 15:25:02 +08:00
@JinTianYi456 哈哈哈,的确
|
100
Features 2023-12-22 15:45:44 +08:00
mysql8 性能有没有明显提升啊?
像 PHP5 到 php7 的性能提升幅度舒适惊讶到我了 其他倒是无所谓了 |