# 大佬们,请教个问题:
rm -rf 这个命令是用来强制删除 linux 文件的,但是坊间流传的数据库删库命令也是他,然而删除 mysql 数据库命令是 drop database xxx
所以这两个命令是不是被网友混淆了?
而且一般数据库都是云端的,本机远程连接,在 mysql 命令行执行 rm 命令也是无效的啊。。。
所以该怎么解释使用 rm -rf 删库跑路的段子?
难道我的数据库知识白学了?
因为我之前工作的一家公司是多台服务器独立 ip,而且分为生产服务器和测试服务器,数据库也是独立的。总监说买服务器,然后组长马上就买了,几万的样子,在阿里云。
平时我最多也就可以看到 git 仓库里面测试数据库的账号密码,所以说我以为大家都是比较规范的管理数据库(生产数据库服务器和部署代码的生产服务器独立运行 ),rm -rf 删库这种操作得有个前提就是数据库服务器所在的主机已经暴露了ssh 22端口,这个被危险分子拿到之后就比较危险了。
接下来咱们对比一下华住酒店的服务器和大厂服务器规范化:
拿到主服务器ip之后,使用神器 mobaxterm [推荐一波] 扫描开放端口, 发现华住首先作为企业网站都没有使用ssl证书,太落后了;
其次向外网开放了200以内的高危端口号,尤其是风险最高的22ssh 端口 和 3306 mysql 数据库端口。。。
再看看某度,只开放了80 和 443 http + https 端口用于网页访问。这个没有槽点。。。
![]() | 1 429463267 OP 哪位大佬解释下? |
2 zn 2018-09-21 21:02:38 +08:00 drop database 删数据库不能删掉数据库所处文件。 但是 rm -fr 删数据库所处文件一定能删掉数据库。 |
![]() | 3 young6 2018-09-21 21:02:45 +08:00 via Android 数据库也得以一种方式持久化在磁盘上 |
![]() | 4 cnbobolee 2018-09-21 21:05:47 +08:00 直接把数据库存储文件删除了 |
![]() | 6 akira 2018-09-21 21:06:36 +08:00 而且一般数据库都是云端的 -------------------------------------- 这个假设错了哦。rm -rf 删库的,都是自建的数据库 |
![]() | 7 CasualYours 2018-09-21 21:07:03 +08:00 via Android 太天真了,rm -rf 是可以删掉 linux 的 |
8 yingfengi 2018-09-21 21:07:43 +08:00 via Android @429463267 你这样去深究就没意思了,就是个梗。 要这么说,我 ssh 用 3306 端口啊 |
![]() | 9 429463267 OP @young6 也就是说这种情况是: 必须得有数据库所在物理主机的 21 端口权限,使用 shell 命令从物理上删除 mysql 存储文件? 那么使用云数据库的情况只有 3306 端口权限,rm 就不奏效了吧? |
![]() | 11 429463267 OP |
![]() | 12 fy 2018-09-21 21:12:10 +08:00 ![]() ![]() |
14 lihongjie0209 2018-09-21 21:13:34 +08:00 你把系统删了, 数据库还在? |
![]() | 15 musi 2018-09-21 21:16:10 +08:00 via Android 难道不是 rm -rf / 要不你试一下 看看能不能把数据库删掉 |
![]() | 16 429463267 OP @lihongjie0209 我的理解是: 一般企业使用的云端数据库服务器,基本都是只开放相应的端口,比如 3306,这种情况下就无法通过 xshell 之类的远程终端登录 21 端口,所以 mysql 终端里面怎么执行 rm -rf ? |
![]() | 17 changnet 2018-09-21 21:20:58 +08:00 via Android ![]() 楼主没分清楚 shell 指令和 sql 语句,以及他们执行的环境 |
![]() | 18 429463267 OP @musi 我的理解是: 一般企业使用的云端数据库服务器,基本都是只开放相应的端口,比如 3306,这种情况下就无法通过 xshell 之类的远程终端登录 21 端口,所以 mysql 终端里面怎么执行 rm -rf ? |
![]() | 19 429463267 OP |
20 RickyHao 2018-09-21 21:23:17 +08:00 via Android 楼主请去学一下计算机基础知识,用一下 Linux 再来提问吧… |
![]() | 21 zeroDev 2018-09-21 21:24:52 +08:00 via Android 建议题主自己试试 |
![]() | 22 CasualYours 2018-09-21 21:27:40 +08:00 via Android @429463267 这样肯定不会,然而出事的都是远程服务器,而且超级用户权限。这个 var 放在根目录挺碍眼的,rm,然后 gg |
23 mikeguan 2018-09-21 21:28:49 +08:00 via Android ![]() 21 端口一般 FTP 用 22 端口一般 ssh 用 无法连接数据库服务器 如果需要运维操作怎么办?你的服务器只开 3306 端口可以 但是你需要确保你永远不需要登录操作 |
25 zn 2018-09-21 21:44:46 +08:00 via iPhone ![]() @429463267 那是你觉得,你的想法很正确,然而你的想法有个致命缺陷,那就是太理想化了,以为所有企业都很专业很严格地管理、使用数据库。 现实中大部分企业都是自己在服务器上安装一个数据库,然后就这么用下去了。然后总会有手贱的人一不下心在服务器上运行了个 rm -fr /,然后就 gg 了。 |
![]() | 26 izoabr 2018-09-21 21:51:27 +08:00 你可以弄个数据库,然后#rm -rf / 你会发现无忧无虑 |
![]() | 27 429463267 O |
![]() | 28 429463267 OP |
29 celeron533 2018-09-21 21:59:30 +08:00 via Android @429463267 Drop database 实在数据库管理控制台里做的,只能删除数据库,不影响数据库软件自身以及文件系统 rm rf 则是在数据库所在的操作系统做的事情,任何东西都可以一锅端,包括数据文件和数据库软件以及操作系统自身 如果 dba 能直接 ssh 到数据库服务器(不是 MySQL 控制台),然后 su rm rf 那就完蛋了 |
31 zn 2018-09-21 22:12:41 +08:00 via iPhone @429463267 你应该还没工作吧,很多情况想得太理想化了。其实这样做的公司太多了因为服务器托管是要钱的,一年一万左右,两台就是两倍价格。所以很多公司就托管一台性能好的,什么都放上面跑,比你托管两台划算多了。这是性价比问题,不是穷不穷的问题。一个巨无霸汉堡 20 块,两个 30,你肯定买得起,可是你会买两个回来吃一个扔一个吗? |
![]() | 32 harde 2018-09-21 22:21:10 +08:00 |
![]() | 33 harde 2018-09-21 22:23:39 +08:00 无论是不是多服务器,你数据库的服务器总是需要维护的。 那就会给 rm -rf /提供机会。 即使所谓的云数据库,你也很难保证云厂商的攻城狮不给你来个从删库到跑路。。。 |
![]() | 34 Cu635 2018-09-21 22:29:16 +08:00 数据库怎么存放数据啊,不还是以文件形式存放在磁盘上嘛。只是文件内容不是明文而是二进制格式化的了。 |
35 MonoLogueChi 2018-09-21 22:30:09 +08:00 via Android ![]() 一切皆是文件 |
36 kslr 2018-09-21 22:33:12 +08:00 数据库机器也需要维护,那就有操作环境 |
![]() | 37 young6 2018-09-21 22:36:21 +08:00 via Android @429463267 ssh 是在端口 22 ;所以说用 rm -rf 删库的都是运维,开发一般没有存储数据库机器的 root 权限。不管用啥服务器,总需要有人维护,总有被 rm -rf 的风险。 |
![]() | 38 xiqingongzi 2018-09-21 22:46:13 +08:00 via iPhone 你高看了云服务的普及程度。以及,云服务也需要人维护。只要有人 rm-rf,就没救。 |
39 luozic 2018-09-21 22:49:04 +08:00 via iPhone ![]() root 用户上去干活,并且一般 rm 不都是 alias 到 mv 到备份文件夹? |
40 mikeguan 2018-09-21 22:55:45 +08:00 via Android @429463267 #28 数据库服务器也需要维护的 你的想法部署一次跑终身基本不可能 虽然需要登录操作数据库的情况很少 比如磁盘满了,你需要清日志,需要打安全补丁等也会需要登录的 |
![]() | 41 NullPoint 2018-09-21 23:05:19 +08:00 via Android 温馨提示 备份也删掉 |
42 Judoon 2018-09-21 23:19:56 +08:00 via Android 数据库再怎么服务化,也基本是跑在 linux 上的,数据也是会要落盘的,你没权限 rm 不代表别人没有 |
![]() | 43 fyibmsd 2018-09-21 23:25:05 +08:00 via iPhone 知道啥叫万物皆文件吗 |
![]() | 44 likuku 2018-09-21 23:44:19 +08:00 云端的数据库也不是凭空悬在真空中啊...虽然只给你等麻瓜开放个 3306 之类的端口。 实际再怎么也是跑在一个系统里的,即便是容器 /虚拟机,它们底层承载还是有个系统的... 直接登入承载系统,rm -rf ...太慢了好嘛,直接 dd if=/dev/zero of=/dev/disk 就好,直接给裸磁盘写满空数据。 |
![]() | 45 chiu 2018-09-21 23:54:12 +08:00 All is file rm 能删万物 |
46 RobertYang 2018-09-22 00:11:48 +08:00 via Android 要不你先在生产环境试试? |
![]() | 47 Rehtt 2018-09-22 00:19:43 +08:00 via Android 数据库其实就是以文件的方式存在磁盘上的,而 rm -rf 是把磁盘上的文件都删了 |
![]() | 48 zjp 2018-09-22 01:13:42 +08:00 via Android 还有一点,MySQL,PG 都能在客户端执行系统命令。没人用 root 跑数据库吧,rm -rf /执行不了,删除数据库文件的权限还是有的 |
49 littlewing 2018-09-22 01:20:36 +08:00 试一下在 MySQL Client 中敲 \! rm -rf / |
![]() | 50 jadec0der 2018-09-22 01:25:52 +08:00 DBA 登录服务器很正常,因为要排查问题需要看日志啥的 |
![]() | 51 dangyuluo 2018-09-22 04:20:41 +08:00 drop 是可以通过 binlog 恢复的,只要你有耐心和运气。rm 真的就是回天乏术了 |
![]() | 52 susecjh 2018-09-22 06:51:46 +08:00 via Android 基础感人 |
![]() | 53 happyz90 2018-09-22 06:54:50 +08:00 via Android @429463267 如果只开放 3306 用于数据库,那你想想最初安装和配置数据库是怎么在这台机器上操作的?同样的方式就可以在这台机器上执行 rm 了。 |
![]() | 54 IvanLi127 2018-09-22 07:20:05 +08:00 via Android 云数据库难道不跑在服务器上?难道没人能操作云数据库的服务器?难道什么人都有资格操作数据库?删库跑路也得有点资格才行 |
55 aver4vex 2018-09-22 07:22:49 +08:00 数据库最终也是以文件的形式存在于系统中。这个没毛病老铁。 |
![]() | 56 huluhulu 2018-09-22 08:50:24 +08:00 via iPhone drop 只能删除 mysql 数据库,也可能只能删除一个数据库,但是 rm -rf /可以删除任何数据库,不管数量种类大小。 |
![]() | 57 passerbytiny 2018-09-22 09:01:10 +08:00 你们是太小看数据库了,数据库本身是有一部分日志或容灾措施的,虽然不完善,但是有。 如果只是 drop,没备份也有一定的几率恢复过来。而 rm -rf,没备份的话,基本没可能救回来了。 另外,rm -rf 命令通常是用来清理临时文件的,使用频率非常高,但经常 drop database 的人,你能遇见几个。 |
58 GeruzoniAnsasu 2018-09-22 09:45:22 +08:00 via Android 知道是段子还能钻牛角尖钻到这个程度也是厉害 |
![]() | 59 429463267 OP |
60 C2G 2018-09-22 09:57:04 +08:00 via Android 华住那个应该是 cdn 的吧。cdn 开放了 3306 和 22。 |
![]() | 61 Hucai 2018-09-22 10:07:39 +08:00 你要是能够远程登录 mysql 服务器的 shell,rm 干掉 mysql 轻而易举 |
![]() | 62 zzugyl 2018-09-22 10:15:08 +08:00 via Android 我干过 rm -rf 删除数据库。领导让我清理服务器,但是我没数据库权限,直接干掉所有数据部文件。后来领导求他记错了,数据库还在用 |
![]() | 63 LoliconInside 2018-09-22 10:48:55 +08:00 shell 命令和 DDL 语句的区别。。。 |
64 karllynn 2018-09-22 10:49:04 +08:00 linux 一切皆文件啊,rm 一切 |
![]() | 65 mytry 2018-09-22 10:49:52 +08:00 ![]() |
![]() | 66 ymj123 2018-09-22 11:43:42 +08:00 via Android mobaxterm 还有这种用途?不就是当远程连接工具来用吗? |
![]() | 67 xillwill 2018-09-22 15:12:15 +08:00 简单,rm -rf /*这个命令简单 易懂 Drop 命令首先严重性可能不如 rm -rf 其次 有点长 乱玩梗的人记不住 少开这种玩笑 现在看来算是有点无知。。。。 |
68 henglinli 2018-09-22 16:23:08 +08:00 via iPhone 就看看 |
69 KgM4gLtF0shViDH3 2018-09-22 17:29:33 +08:00 via iPhone 卧槽,我还不知道 mobaxterm 能扫描端口 |
![]() | 70 429463267 OP @ymj123 @bestkayle tool 工具栏里面很多实用的神器  |
![]() | 71 bao3 2018-09-22 19:09:48 +08:00 via iPhone rm 命令是删除文件,你的数据库不是以文件存储的? |
![]() | 72 flypei PRO 有没有人发现最后百度那张图的:Scanning port #1683 |
73 best66 2018-09-22 20:42:30 +08:00 数据库不是文件吗... |
![]() | 74 ReturnNull1 2018-09-22 21:10:47 +08:00 我天 权限真高 |
75 xfspace 2018-09-22 22:22:13 +08:00 via Android huazhu.com 明显是蜜罐 |
![]() | 76 Applenice 2018-09-23 01:35:27 +08:00 mobaxterm 还能这么用。。。学习了 |
![]() | 77 newborn 2018-09-23 11:17:35 +08:00 就 mysql 而言,物理删库的命令是 rm -rf /var/lib/mysql/* |
78 zjiwgod 2018-09-23 18:46:27 +08:00 直接删的数据库文件吧 |
79 mingyun 2018-10-05 12:59:37 +08:00 一直没执行过 rm -rf / 有点心痒 |