数据库被黑掉了,该怎么办?
本文地址: ()
avatar
作者: FeRookie 类型: 原创
更新时间:2022-06-26 阅读:189

大佬们!他们欺负我。
作为一个前端小菜鸟,稍微涉猎一点数据库知识,突然被黑掉了,心情是OOXX。
最可气的是黑掉我的数据库,还给我留一条数据,叫我去他们平台把钱支付了,然后给他发一封邮件,他给我还原。我特么气死了。
所以,我肯定是不服的了。我想发封邮件找他,但是人家根本不鸟你,后来就不了了之了,没办法呀!惹不起,我还躲不起吗。
经过这次被坑,我长了记性,虽然损失了几篇博客(没有备份最新的 哭死),但是我也不去给那个钱,我是一个有志气的小鸟,坑我需要把我打服才行。
以下是我被坑后,重拾数据库的流程:
备注:我自己购买的是阿里云CentOS系统,数据库用的mysql,不是云数据库(如果是云数据库当然就没问题了)

第一步:重装mysql

yum remove  mysql mysql-server mysql-libs mysql-server;
find / -name mysql 将找到的相关东西delete掉;
rpm -qa|grep mysql(查询出来的东东yum remove掉)
yum install mysql-server;

至此mysql已经安装好了,基本没啥改动,有改动就根据提示修改下就ok了

第二步:导入数据库

虽然我的数据被黑掉了,但是之前是有备份(不是最新的)的,所以将数据导入。我用的是workbench,
但是远程连接失败,所以需要你开启远程连接(这里灰常危险,有说法是数据库被黑,可能是因为远程连接,我是没有去深究,所以记得关闭远程连接)

开启远程连接

修改防火墙设置

systemctl enable firewalld.service # 跟随系统启动而开启
systemctl stop firewalld.service # 停止(不用过后记得停止或禁用,下次使用再开启一次就行,虽然麻烦,但是安全啊)
systemctl disable firewalld.service # 禁用

第三步:定期备份数据库

定期备份数据这个是必须的啊,经过这次被黑掉,并且数据没备份,让我着实难受。所以定期备份数据,你应该拥有。
首先,需要ssh脚步,这里直接使用命令开始创建一个’autobackup.sh’

vim autobackup.sh (我创建在root下面,这里无所谓 可以自行处理,方便管理)

进入autobackup.sh 后开始编写脚步:

#!/bin/bash
echo -e [`date +"%Y-%m-%d %H:%M:%S"`] start
date=`date +"%y-%m-%d"`
time=`date +"%H:%M:%S"`
# host ip
host="127.0.0.1"
# database user
user="root"
# database pwd
passwd="password"
#创建一个备份文件用来放备份的sql数据
mkdir -p /backup/db/"$date"
# 数据库列表 db1 db2 db3(当然一个数据库,只需写一个)
/usr/bin/mysqldump -u$user -p$passwd  db1 db2 db3 > /backup/db/"$date"/db_"$time".sql
done
echo -e [`date +"%Y-%m-%d %H:%M:%S"`]  end
exit 0

上面是将数据库列表 直接写出来,但是不灵活,如果说你又加了一个库,还得手动加上去,所以可以使用遍历的方式,比如一下代码

all_database=`/usr/bin/mysql -u$user -p$passwd -Bse 'show databases'`
for i in $all_database
do
/usr/bin/mysqldump -u$user -p$passwd $i > /backup/db/"$time"/"$i"_"$time".sql
done

蛮不错的。
经过以上操作后,基本可以了,但是我们还得配置一个定时任务啊。在此之前,我们可以验证下,上面脚步是否有问题:

手动执行脚本
chmod u+x autobackup.sh
./autobackup.sh

然后,去/root/backup/db下面查看是否有sql文件生成(正常情况下是有的)。
接着去配置cron 执行定时任务,需要配置任务列表,通过下面这条命令就是在编辑任务

crontab -e (配置任务列表)
crontab -l (查询任务列表)

那么,我们应该如何配置呢?
我尝试了2种方式:
第一种:使用 00 00 * * * root sh /root/autobackup.sh >/dev/null 2>&1
00 00 * 分别代表的是 分 时 天 月 星期几
root 代表的是 执行命令的用户
sh 代表的是执行命令
/root/autobackup.sh 代表的是执行的路径

第二种:使用 00 00 * * * /root/autobackup.sh (推荐)
个人比较推荐第二种,因为可以和手动执行脚本比对,很容易理解,并且没啥问题。

如上配置好了,基本上没啥问题就执行一下

/bin/systemctl restart  crond.service

其实也可以不用执行,也更新了,但是避免意外情况嘛
但是,在执行的过程中,遇到了一个问题,就是怎么修改cron 都不执行第一种命令,所以采用了第二种方式。结果就可以了,具体没有深究,也不想去深究,我只是前端小菜鸟,所以推荐大家 直接用第二种就行了。
至此,我做了这些操作,防备再次被黑,数据没了的问题
总结一下,数据库被黑的原因我不太清楚,但是我觉得有几个问题导致的:

  1. blog后台源码放在了github上,泄漏了数据库的用户和密码(可以用gitignore忽略掉此文件)
  2. 大神想黑泥,泥没办法呀,关闭远程连接,配置防火墙
  3. 买云服务器,云数据库有大厂的大神帮你守着,出问题就找他们,哈哈!
    感谢大家阅读本篇文章,微信: dengpeng840,邮箱: zootopia@gmail.com 联系我