没错就是今天 刚才
我正听着bgm进行debug
写一个服务删库恢复的功能
因为之前是手动用备份文件恢复
所以已经有psql语句
我只需要写到服务里
这三个语句是这样的🚬:
- 'SELECT pg_terminate_backend(pid) FROM pg_stat_activity WHERE datname='\'$db_name\'' AND pid<>pg_backend_pid();'
- 'drop database '$db_name
- pg_restore -h $db_host -U postgres -p 5432 -Fc -d xxxxx -C $backup_osm_path
简而言之就是断开数据库连接,删库,pg_restore恢复
饿错了,饿真的错了,在看到删库字眼的时候我的雷达就该瞬间响起,打起十万分精神
刚接到这个任务那天晚上走之前问了下写这个服务的那个大佬,没错就是问那个xxxxx部分(是另一个db的名字)为什么是那个库,大佬说嗷这个是随意的,(就是说和要恢复的db同等级的一个就行)只是为了连上,当时随意搜了下pg_restore的指令 大概也是这么个意思,我 居 然 就这么大意的 继续了。
so我那个xxxxx选的是webapi那个db,因为只有这个在三个环境都有对应的表,(现在回想一下,我 怎 么 敢(裂开
ps:后来大佬为恢复操作写了个脚本,不愧是大佬,神速,(至少在我这个实习生眼里
然后刚才在测自己代码的时候,执行pg_restore后输出了一大堆already exists,我以为有输出就是执行失败,啥操作都没进行,我就搜pg_restore指令后面跟的各个参数,也对应脚本找我的指令哪里没设对,
发现,哦,-c是如果存在啥啥类似的表就drop。用vim打开了备份文件一看,哦里面居然也有drop database的指令,后来。。突然发现。。。
-d后面写的是指定的目标数据库名称
-d后面写的是指定的目标数据库名称。。。
-d后面写的是指定的目标数据库名称。。。。
为什么-d后面写的是指定的目标数据库名称啊😅😅😅救命
靠靠靠我设的那个库还挺重要的(服务里任务的前端显示实时要用到的)
我靠,不会对那个表有什么影响吧
于是我打开pgadmin,发现那个库还在,刚松了半口气,一点开库里的table,好多,靠,靠靠,这不都是osm库才有的table,卧槽
我这一瞬间就傻了,我当时害怕极了
我以为把webapi那个库删了,我当时 真的 要裂开了 特别害怕
然后打开前端想看一眼,(甚至不太敢打开😅😅)
竟然毫无影响,我一边疑惑一边害怕一边感觉自己删库了思考怎么能及时恢复担心不知道哪一刻前端列表就没法展示了
越想越觉得既然前端没影响我是不是错觉,对我是错觉,我肯定没删库😭
于是我又刷新重新打开数据库想看一眼,还是那么多表(裂开)😭我看staging环境的对应db,才有两个table才对😭
不过,这时候,我突然看到里面有之前,的那两张表名,就是我以为被自己删掉的
那一瞬间,当事人就是,惊魂未定, 心惊胆战,绝处逢生,不敢置信,千幸万幸
的后怕
我以后写什么都要自己查文档,看官方文档😭