数据库有些数据值为: "保密"
前面我在用 regex_replace 函数更新一些不规范数据
我顺手就用 update lawyers set working_years=regexp_replace(working_years, "保密", null); 把 "保密" 更新为 null
结果 working_years 字段全部被更新为 null !!!
有办法恢复吗,大佬救命!!!
1
winterx Jul 11, 2022 手机叫个快车,赶紧收拾东西跑路
|
2
GeorgeGalway Jul 11, 2022
有备份的话回档吧
|
3
hidemyself Jul 11, 2022
DBA 呢,准备背锅吧。。
|
4
jjianwen68 Jul 11, 2022
生产库?
|
5
skies457 Jul 11, 2022
提桶跑路
|
6
lujiaosama Jul 11, 2022
呼叫 dba 恢复数据
|
7
kaiger OP |
8
milkmlik Jul 11, 2022 不要慌不要慌太阳下山有月光。
|
9
quicksand Jul 11, 2022
赶紧找数据库日志,看看能不能恢复
|
10
dem0ns Jul 11, 2022
用不规范的操作更新不规范的数据 =.=
|
11
JsonNode Jul 11, 2022
备份没有,binlog 也没有?
|
12
rapperx2 Jul 11, 2022
赶紧躺进棺材里,盖好!
|
13
iAndychan Jul 11, 2022
op 人还在吗?
|
14
tf2 Jul 11, 2022 mysql 的 update 有一个很强的非标准特性,就是可以加 limit 。初学者请务必每次 update 请务必用 limit 1 。
|
15
muchenlou Jul 11, 2022 从入门到删库,别紧张,要不,先全部修改成保密?
|
16
PMR Jul 11, 2022 via Android
开事务日志 /binlog 没
没就抗拒从严 回家过年 |
17
fy1206 Jul 11, 2022
备份没有的话 就看 binlog 开了没有 开了就可以解决(记好时间点), 没有开的话....
|
18
yyysuo Jul 11, 2022
oracle 的话找 dba 按归档恢复一下应该就可以了,生产库的话,事故是跑不了了,不要拖,赶紧上报吧。
|
19
jackliang007 Jul 11, 2022
联系主管恢复到上一个备份
|
20
dreasky Jul 11, 2022
自首吧
|
21
hs444 Jul 11, 2022
之前在生产环境也干过这种事,但用的不是 mysql ,操作时事务也是手动提交的,一瞬间汗都要下来了,然后回滚了
|
22
ikaros Jul 11, 2022
再把 null 更新成保密啊, 问题不大, 反正应该也没人知道哪些保密 哪些 null
|
23
danhahaha Jul 11, 2022 via iPhone
保密不就是 null 的意思吗
|
24
kaiger OP 解决了,想问一下大佬
update lawyers set working_years=regexp_replace(working_years, "保密", null) 这条命令为什么会把我的全部数据替换为 null ' |
25
F12 Jul 11, 2022
还能上 v2 上找解决方案,应该问题不大
|
26
wzly Jul 11, 2022
先不要操作了,看下 data 目录下的 binlog 日志文件吧,以 utf8 打开,一个一个补数据吧
|
27
geekershared Jul 11, 2022
@kaiger 怎么解决的,目测你是没有加 where working_years = "保密"。
|
29
zzvgtiger Jul 11, 2022 @kaiger #24 REGEXP_REPLACE() 函数在 str 中使用 replacement 替换和正则表达式 regexp 匹配的内容,并返回替换后的结果。
如果 str, regexp 或者 replacement 为 NULL ,REGEXP_REPLACE() 将返回 NULL |
30
zzvgtiger Jul 11, 2022
同问 你是咋把数据找回来的
|
31
RRRoger Jul 11, 2022
@philchang1995 regexp_replace 适用于 select 不适用于 update
|
32
leiuu Jul 11, 2022 https://dev.mysql.com/doc/refman/8.0/en/regexp.html#function_regexp-replace
If expr, pat, or repl is NULL, the return value is NULL. |
33
MarkP Jul 11, 2022 @kaiger #24 把保密更改为 null ,为什么要用 regexp_replace 这个正则函数?
正常思路难道不是这样吗? update lawyers set working_years=null where regexp_replace='保密'; 至于为什么换替换为 null ,根据文档 https://dev.mysql.com/doc/refman/8.0/en/regexp.html Replaces occurrences in the string expr that match the regular expression specified by the pattern pat with the replacement string repl, and returns the resulting string. If expr, pat, or repl is NULL, the return value is NULL. 大概意思正则匹配到了,则返回替换后的结果字符串,如果给定的三个参数里有 null ,则返回 null 。 而你的第三个参数恰好是 null ,所以全被替换成 null 了。 |
35
MoYi123 Jul 11, 2022
下辈子改数据库前记得先打 begin;
|
39
Jooooooooo Jul 11, 2022 都是惨痛教训:
1. 不是迫不得已不要手动改库 2. 真的要手动改库一定先 select 一下看看影响的行数 3. 改之前先改一条试试看, 防止写错了 4. 大规模改库要备份 |
42
aitaii Jul 11, 2022 有一个能跑就行
|
43
kaiger OP |
44
Ufo666 Jul 11, 2022
怎么解决的!哇
|
45
fmumu Jul 11, 2022
生产环境改数据一定要备份再执行,开日志
|
46
cubecube Jul 11, 2022
这种 update 或者 delete 都还好,都有 log ,dba 都能恢复
truncate 或者 drop 那种很难抢救回来(只能依靠之前的备份数据,会有丢失) |
47
neptuno Jul 11, 2022
测试数据库都不测一下的吗?
|
49
james2013 Jul 11, 2022
跑路了?
|
50
vinceall Jul 11, 2022
update 不加 where dba 能让你跑?
|
52
shalk Jul 11, 2022
怎么解决的,提了几个桶
|
54
toneewang Jul 11, 2022
通过 binlog 可以回滚的吧,就是恢复成本的事情
|
55
TAFMT Jul 11, 2022
最后怎么恢复数据的?+1
|
56
book1925 Jul 11, 2022
事情怎么解决的?严重关注
|
57
controller Jul 11, 2022
改错数据库后端程序员必经之路。如果改错的是关键数据,只能停掉相关服务,防止错上加错,然后从备份和 binlog 恢复。如果不是关键数据,还能从业务逻辑里面重新搞到数据
|
58
winglight2016 Jul 11, 2022
如果数据库是云平台上的 rds ,那就简单了。。。自建的就要靠自己定时备份了
|
59
yeyypp92 Jul 11, 2022 一般这种更新,最好还是先 select 出来,确定下,再更新
|
60
sparkssssssss Jul 11, 2022
有 binlog 为啥不能恢复呢,直接 binlong 反向操作下就好了
|
61
WIN2333 Jul 11, 2022
任何数据修复都必须先备份
|
62
wdlth Jul 11, 2022
你这 SQL 在我们 DBA 眼里肯定被打回,没有开事务,连 WHERE 也没有。
我们 UPDATE 生产库都得走 OA ,要两层审核,DBA 复核,并且会在一个部分克隆表中验证。 |
63
potatowish Jul 11, 2022 via iPhone
@yeyypp92 非常同意,我一般都是先写查询语句,确定查询没问题了,再改写成更新语句,现在其他环境执行没问题了,再提交生产
|
64
jack778 Jul 12, 2022
你没有责任,这是公司的责任,因为公司允许你这个菜鸟直接更新生成数据库,狗头
|
65
scanjx Jul 12, 2022
人和数据库有一个能跑就好
|
66
di1012 Jul 12, 2022
不加 where 条件就敢操作数据库
|
67
fiht Jul 12, 2022
我也做过类似的事情 ahh~
不过公司上云之后就很方便了,云上的 MySQL 基本都能通过回滚救过来 |
68
James369 Jul 12, 2022
没啥事发生?看来这些用户数据没什么价值
|
69
funbox Jul 12, 2022
职业生涯终结
|
70
skadi Jul 12, 2022
binlog
|
71
qwerthhusn Jul 12, 2022
缅甸急招工,来吗?
|
72
badmarillo Jul 12, 2022
信女愿一生吃素保佑下辈子不做程序员
|
73
jiazhoulvke Jul 12, 2022
有 binlog 怕啥,只要用的 binlog format 是 row ,改了什么都能看得到,写个脚本都能复原回来
|
74
kaiger OP |
75
bzsh Jul 12, 2022
抓取的数据啊,没所谓
|
76
someonedeng Jul 13, 2022
下次先约好黑车,别订飞机火车票
打开 binlog 先 select 出来看看 update 要带条件 |
77
mrochcnnnnn Aug 31, 2022
哪天在 v2 上看到一个标题:
遇到一个问题,想用 regex 来解决,好了你现在遇到两个问题了 |