服务器在客户厂里, 客户没有机房, 就放在厂子机器旁边.
每天下班后, 客户员工从来不会去关闭电脑, 都是直接拉闸整厂断电.
系统稳定运行了大半年后, 从最近开始, 每隔几个月, mysql 就报 redo 日志异常无法启动, 需手动删除日志后才能启动, 这有点恶心了.
有没有在同样场景下, 试过 oracle, sqlserver, postgresql, sqlite 这些的同学, 这些数据库存不存在这个问题?
1
Hookery 36 天前 1
断电影响的是硬盘吧
|
2
iv8d 36 天前
oracle 吧,断电估计也比较好恢复
|
3
ysq 36 天前
加个 UPS,检测到断电后自动关闭
|
4
adoal 36 天前 4
加一个带串口控制的 UPS ,断电时靠 UPS 的电让服务器自主关机
|
5
moefishtang 36 天前 via Android
加装一套 ups ,在外部电源断电后软关机?
|
6
hgert 36 天前
突然掉电次数多了不会坏盘么
|
8
dode 36 天前
或单独线路供电?
|
10
newaccount 36 天前 2
我觉得现在应该查一下硬盘的 SMART
|
11
kzfile 36 天前
曾经用 oracle ,有个机房在新疆,经常断电,需要频繁运维
|
12
hiyyq3372 36 天前
把 innodb_flush_log_at_trx_commit 设成 1 看看,redo log 直接落盘
|
13
Plating 36 天前
研发环境遇见过,一年断了两三次,oracle 也出现了启动问题,pg 倒是正常启动
|
14
Lynntox 36 天前 2
明确发函 之后出问题就不管了 这种业务流上的东西他们不去规范迟早出问题
|
15
jixiangqd 36 天前
打开 double_write 试试
|
16
wanguorui123 36 天前
sqlite 开启 SyncFull
|
17
Vraw5 36 天前 5
这都管嘛,明年合同里加一条,因甲方原因导致服务无法运行,提供恢复服务一次两万
|
18
hiyyq3372 36 天前
其实防不住的,什么地方都有可能出问题,下次可能就不是 mysql 了,还是要从规范操作上解决
|
19
dynastysea 36 天前
很多人对数据库真的是一知半解啊。。。断电恢复不都是数据库的基础能力么(还没听说过哪个数据库不支持断电的。。。),mysql 出问题只能说明你对数据库了解的不够深入。如果懒得了解,就去买厂商提供的数据库服务,出问题直接找赔钱就对了。。。
|
20
EJW 36 天前
直接断电,对硬盘也有影响吧。
|
21
xtreme1 36 天前
除了 ups 还得上企业级 ssd, 带断电保护的
|
22
ShinichiYao 36 天前
硬盘挂了什么数据库都没用
|
23
jonsmith 36 天前 1
这样搞,首先坏的是硬盘,跟数据库无关
|
24
niubee1 36 天前
随便买个 UPS ,假设能在断电后支撑 15 分钟, 然后 crontab 加一个脚本,每分钟执行一次,内容就是 ping 网关,连续 10 次 ping 不通就执行关机指令。
|
25
cheng6563 36 天前
@dynastysea #19 断电恢复指的是手动找回恢复数据...断电都能把文件系统炸了
|
26
la2la 36 天前 3
这种强行断电的跟服务器设计容错理念都不一样
现代机房机房都是追求极致稳定的,虽然工厂环境无法改变,但是还是得明确告知客户这个问题,单拉电线或者是用 ups 这个场景 MySQL 解决不了的,不要指望其他数据库能避免这个问题 |
27
huangsijun17 36 天前
这不是有哪个数据可经得起这么操作,而是没有服务器经得起这么操作。
你这不是技术问题,而是公司的保修政策等等有问题。拉闸断电是错误操作。因为频繁拉闸断电导致的故障应该向公司反馈,让销售之类的和对方沟通。 |
28
Felldeadbird 36 天前
mysql 崩溃后,恢复确实容易出问题。
楼主现在阶段不应该上 UPS 最划算吗?换数据库你也得重构业务代码。 |
29
flmn 36 天前
我猜 sqlite 可以,而且就你描述那个环境,sqlite 很适合啊。
|
30
dynastysea 36 天前
@cheng6563 所以我说很多人是外行啊,你认为会炸是因为你的数据不值钱,为了性能忽略了一些参数配置,对各方面的系统设计也不了解。。就这么说吧,市面上你见到的数据库厂商,断电恢复都是基础能力,你可以让他和你说他是怎么保证的,如果他说保证不了,直接让他滚,数据库不具备断电保护能力那也不叫数据库了
|
31
shylockhg 36 天前 1
@dynastysea 硬盘都不行了,什么备份恢复都 g
|
32
Karte 36 天前
UPS 断电通知, 然后实现软关机. 在关机过程中会将数据库在内存的所有数据回写硬盘.
只要你的数据量不大, 且主机功耗不高, 只要能撑住 3 分钟的都可以了. 3 分钟数据库的所有修改无论怎么样都落盘了, 除非你的 InnoDB (MySQL) 中的 BUFFER POOL 设置的特别大, 而且有程序在 3 分钟内持续回写而没有退出时, 就可能会出现数据丢失在应用程序, 而非数据库中. |
33
zhhbstudio 36 天前
数据库是用来存数据的,不是用来抗断电的!
不想加钱加 UPS 就工人下班点前 5-10 分钟定时关机,通电自动开机 |
34
QlanQ 36 天前
和数据库没关系,加 UPS
|
35
shyangs 36 天前 1
|
36
webszy 36 天前
这不是一个纯软件能解决的问题,还是要搭配 UPS ,甚至外部供电系统的支持
|
37
goodryb 36 天前
这么强制断电,可能不是数据库出问题,反而硬盘出问题,丢数据的概率更大,加 ups 或者定时提前关机
|
38
bthulu OP @Felldeadbird 重构业务代码几秒钟就行了. 全程都是 efcore 操作数据库的.
|
39
jay_chiu 36 天前
ups 几个钱,直接能干倒闭?别管几个厂,每个厂的利润是一定的。你给报价的时候加上去就行了,或者让厂家出钱买。
|
40
aiqinxuancai 36 天前
UPS 才几个钱,几百块搞定了
|
41
datocp 36 天前
你不要自己先做判断,为什么客户不能加 ups
客户购买软件肯定是为提高生产效率,他们这种断电的行为肯定会影响它们的生产任务,停它个 2-3 小时试试。 当然连机房都没有就。。。只要它们可以停得起。 你要做的是言明可能造成的风险,无非就是无法查询影响业务开展甚至停工停产业务混乱,是 2 千块的 ups 重要,还是当天业务无法开展重要。 以前用的一家 web erp ,财务每星期准备 5 千块,时刻等待业务被卡继费继续开展业务。员工不关闭电脑拉闸导致服务器挂掉该告知的是他们老板,或者收笔上门维护费吧,有些业务叫上了贼船下不来。 |
42
joh 36 天前 via Android 3
设个定时关机,下班断电前几分钟自动关机
|
43
bthulu OP @datocp 因为业务大头在硬件上面, 软件是附带的. 我们软件起不来的情况下, 客户还有其他解决方案, 虽然会麻烦很多.
几百块的 UPS, 倒也不是用不起, 但是多了个设备, 采购发货接线配置断电重启, 都是麻烦事. 如果是核心业务, 这么做无可厚非, 但是边缘业务, 给客户锦上添花的, 肯定不能这么玩. |
44
datocp 36 天前
公司 2010 年的一套 web 查询系统,是使用 freebsd zfs ,用的 postgresql ,确实强断电没问题,但是那个希捷的企业级硬盘坏道也非常厉害。目前还在一套不重要的系统上当系统盘。。。
日期 SMART 10 SMART 12 SMART 5 SMART 187 SMART 188 SMART 197 SMART 198 20210827 0 200 25769803783 0 0 0 0 20210901 0 200 25769803783 0 0 0 0 20211006 0 201 25769803783 0 0 0 0 20211109 0 203 30064771080 0 0 0 0 20211221 0 203 30064771080 0 0 0 0 20220126 0 204 30064771080 0 0 0 0 20231125 0 228 90194313238 5 0 0 0 20240322 0 228 90194313238 5 0 0 0 |
46
fuis 36 天前
SQLite 或者 Postgre
|
47
yangxiaopeipei 36 天前
到点执行关机。
|
48
whathappen 36 天前
3 条路:
培训员工。 加 UPS 并设置联动。 改一下厂房的电路。 改独立 24 小时供电的电路应该是最优选。 |
49
8355 36 天前 1
|
50
cheng6563 36 天前
@dynastysea #30 你怎么配置能解决 SSD 断电掉盘的问题?
|
51
BeforeTooLate 36 天前
这是啥系统,要给每个客户整个服务器放他们厂里,当时不应该统一上云或者自管机房还是说是完全内部系统不能放在厂房以外的地方?
|
52
dzdh 36 天前
postgres
|
53
lloovve 36 天前 via iPhone
联网到无法断电的地方,这么折腾先坏的是硬盘,或者直接 4g 联网上云
|
54
llxvs 36 天前 via iPhone
加一個在數據庫啟動前的腳本,刪除你說的那個日誌
|
55
ccc008 36 天前 11
其实也简单。楼主说“数据丢失部分是无关紧要的”,那么楼主就在开机的时候做个脚本,自动检查并清除 redo 日志
|
56
yufeng0681 36 天前 2
1 、工厂里加一根电线,单独供电
2 、工厂侧放笔记本电脑,服务器放办公室 |
57
joh 36 天前 via Android
@bthulu 软件层面怎么解决硬件问题…加个检测系统,到点且没有新单子就把核心业务系统关了等断电,有单子就启动系统读写数据库…不过这样硬件迟早要出问题
|
58
tpopen 36 天前
实时备份算了
|
59
MoYi123 36 天前
@cheng6563 这个是指不管在哪个瞬间断电, 数据库只要对 insert 返回了成功, 就一定不丢数据, 如果中间出现了异常就返回失败, 由应用程序来决定之后的处理.
|
60
cuicuiv5 36 天前
写一个程序, 检测到你说的错误时就删除日志
|
61
iPisces77 36 天前
直接提多种解决方案,让领导做决策
|
62
mosfet 36 天前
这啥草台工厂
老这么直接断电,硬盘也抗不住 |
63
raptor 36 天前
钱能解决的问题都不是问题,不知道你们服务器是多大的,看上去你们这也不是什么大系统,如果是 PC 做服务器的话,搞个民用 UPS 也就几百块,加到软件价格里作为标配就好了。
非要软件弄的话,ZFS 加 PGSQL 可能可以,ZFS 定时快照,每次生成新快照后就删除旧快照,PGSQL 启用 WAL ,重启时用一个脚本检测一下数据库是否正常,如果数据库失败就回滚到最新的 ZFS 快照,然后恢复 PGSQL 的 WAL 。 |
64
hahahasnoopy 36 天前
能远程为什么不用在线数据库
|
65
xdeng 36 天前
坚持到关完机的 ups 不贵吧,都开厂了。
|
66
q958951326 36 天前
上班开机,下班关机。
|
67
kemistep 36 天前 1
数据不重要,那就写个脚本程序呗,定时检测 mysql 有无启动,无启动,删日志,再拉起 mysql ,尝试个 3 次,再失败,发预警通知
|
68
ily433664 36 天前
不如买个 ups ,几百块的事
|
69
ala2008 36 天前
工厂的数据不应该要求更严格吗
|
70
ellermister 36 天前 via Android
全楼都在指责楼主方案业务存在问题,劝人修改方案,没人来思考如何来解决技术问题。
|
71
realpg 36 天前
楼上没一个说的在点子上的
整理几种常见故障,写个脚本智能判断,对应执行 如果不是常规的,起不来就上报 逐渐增加这个脚本池子能处理的异常 |
72
shyangs 36 天前
|
73
cJ8SxGOWRH0LSelC 36 天前 1
不就是写个检测脚本的事情, 删日志, 重启 mysql , 这不是很好解决么。
|
74
wx5923 36 天前
或者用笔记本做服务器?设置低电量自动关机
|
75
bluearc 36 天前
写个开机运行的脚本吧,开机 5 分钟后检测 mysql 有没有运行,没有就先尝试拉起,拉起失败就去删日志,还失败就警告,可以多加一些情况判断,毕竟你这个问题是很固定的;当然最好还是不断电 24h 运行好
|
76
RightHand 36 天前 via Android
SQLite 吧,文件存储,随时 copy
|
77
xixiv5 36 天前
来电自启 定时关机
|
78
busier 36 天前 via iPhone
不要数据很简单啊。
只要将系统固化就可以了。 linux 用 overlayroot win 用 uwf 硬盘底层不再有写入,系统工作时的硬盘写入全部由内存接着。 |
79
fangpeishi 36 天前
1. 可以查下目前在用的 ssd 是否带断电保护。
“进一步了解 SSD 断电保护 (PLP)” https://www.kingston.com/cn/blog/servers-and-data-centers/ssd-power-loss-protection 2. 便宜 UPS ,大家都说了; 3. 电箱单独拉一路电,或者和监控设备用同一路,厂子监控是不是一般不会断的吧; 4. 看起来场景负载也不高,数据库换成 sqilite ,其实断电这个场景,在嵌入式领域是老问题,除了 sqlite ,还有特殊只读文件系统,例如 squashfs erofs ,我可能会想是否可以将 mysql 和系统等安装在单独的这些文件格式上,再对于数据分区叠加自动备份策略,当数据区出现异常的时候能让客户自助(或者自动)按照最近快照快速回滚。 |
80
dynastysea 36 天前
@shyangs 你这种连中文都看不懂的,来这瞎杠干啥? lz 说的是掉电安全问题,说是硬盘问题了吗?硬盘坏和掉电有啥关系?掉电硬盘就坏,连基本的题意都看不懂, 我真怀疑你的智商
|
81
dynastysea 36 天前
@cheng6563 哪家企业级的 ssd 掉电会丢数据?
|
82
wuhunyu 36 天前 1
不在乎数据丢失的话,就写一个脚本,开机之后一段时间(比如 3 分钟内)监听 mysql 服务是否正常运行,如果未运行,就删除 redo log ,然后重启 mysql 服务,已运行就不管。话说工厂也不至于全厂都停电吧,像是一些监控设备,难道人走了也断电吗?要工厂单独拉一条不断电的线就行了,每天强制断电这不是折磨服务器吗,硬盘的寿命肯定长不了
|
83
wuhunyu 36 天前
还有一个问题是,如果要切换数据库引擎,不知道题主的系统做新数据库的适配有多大的成本,这也是要考虑的,而且迁移到新的数据库引擎,旧数据是不是也要迁移过去,也是一个问题。所以我认为,换数据库引擎应该是最后应该考虑的,因为迁移的成本可能并不小
|
85
villivateur 36 天前
换企业级 SSD 即可,加个带恢复的文件系统,跟数据库没关系
|
86
shampoo 36 天前
不要多想抗震抗火灾抗断电啥的,多备份就完事了。
|
87
netnr 36 天前
支持 SQLite +1
|
88
importmeta 36 天前
让工厂改电路, 确保机器永不断电, 加防灾装置.
|
89
234ygg 36 天前
既然日志删掉就能启动,那就启动不起来的时候自动备份日志到别的地方,然后删了原来的日志不就完事儿了 ???
|
90
lenmore 36 天前
在不增加硬件的情况下似乎无解,硬盘挂掉迟早的事。。记得做好备份。
那么,有没有可能把这个服务部署到云上或者你们自己得机房? |
91
markgor 36 天前
企业级 SSD 也不一定多能抗吧,只是相对消费级别的好点。
我之前也有类似的场景,最终我们直接找一台云主机存数据,本地当代理转发,后来直接把本地的也干掉了 |
92
yidev 36 天前
对待这种原始的场景, 要用粗暴的解决方式, 让他们安排个人开关机
|
93
loginv2 36 天前
上云,数据库放远程
|
94
SimonOne 36 天前
配个开机脚本把 redo 删了呗。
|
95
fanersai 36 天前
ups+正常关机脚本
|
96
mark2025 36 天前
如果没有 ups ,那么就用 pgsql ,并且把数据安全相关设置全部打开,比如 同步写入,页面全写入,降低检查点时间。
|
98
mark2025 36 天前
pg , 然后磁盘分区建议 xfs 或者 zfs 。
|
99
diagnostics 36 天前
软件层面上,lightbend akka 搞的 akka edge 好像想解决工厂这种恶劣环境下的问题
|
100
Karte 36 天前 1
那干脆直接上影子系统算了, 这样怎么样都没问题.
影子系统可以将系统在每次启动时恢复到预先设置的环境. 所有在系统的修改都会在第二次开机时删除. |