数据库被删除,遭恶意勒索比特币恢复数据

当我启动我的项目时,发现数据库链接错误,登上服务器发现不能使用mysql -u xx -p 登陆到数据库,并且root账户登陆依然失败。直到我设置为免密码登陆后,查询root账户,发现root账户已被删除,于是将数据库脚本同步下来发现,我的数据库如下显示,现提供我恢复数据的方式(本文content8,mysql8)。
本文使用2种方法:
1、重新添加root账户,通过binlog恢复数据;
2、找到binlog日志,备份后,卸载mysql重新安装,通过binlog恢复数据(博主使用此方式)
在这里插入图片描述

一:设置mysql免密码登陆

1、停止mysql服务
service mysql stop
# 或者
systemctl stop mysqld
2、修改mysql配置
vim /etc/my.cnf.d/mysql-default-authentication-plugin.cnf

在[mysqld]下方新增内容

skip-grant-tables

在这里插入图片描述
注意某些是修改my.cnf文件,需要看[mysqld]在哪个配置文件中

3、重启mysql服务
service mysql restart
# 或者
systemctl start mysqld
4、重新登陆mysql
mysql -u root
# 查询是否还有root用户
select user, host from mysql.user;
# 有root显示则有
5、添加用户(方法1,重新添加root用户)

若使用重装mysql方式,请先将binlog日志备份后,移至第四节(mysql重装),再执行第三节中第3点 ‘恢复数据’ 操作

# 切换到mysql库
mysql>  use mysql;
# 添加用户
insert into user(User,authentication_string,ssl_cipher,x509_issuer,x509_subject) values('root','','','','');
# 添加权限
update user set Host='localhost',select_priv='y', insert_priv='y',update_priv='y',Alter_priv='y',delete_priv='y',create_priv='y',drop_priv='y',reload_priv='y',shutdown_priv='y',Process_priv='y',file_priv='y',grant_priv='y',References_priv='y',index_priv='y',create_user_priv='y',show_db_priv='y',super_priv='y',create_tmp_table_priv='y',Lock_tables_priv='y',execute_priv='y',repl_slave_priv='y',repl_client_priv='y',create_view_priv='y',show_view_priv='y',create_routine_priv='y',alter_routine_priv='y',create_user_priv='y' where user='root';commit;
6、去掉mysql免密码登陆
vim /etc/my.cnf.d/mysql-default-authentication-plugin.cnf
# 注释掉刚添加的内容:
skip-grant-tables
7、重新登陆mysql
# 直接回车
mysql -u root -p

# 切换数据库
use mysql;
# 重设密码
alter user 'root'@'localhost' identified with mysql_native_password by 'root23’;
# 刷新权限
flush privileges;­
# 退出测试密码是否修改成功

二:登陆日志

1、查看是否开启登陆日志
mysql -u root -p
show global variables like '%general%';

# general_log   OFF  表示关闭
# general_log_file   日志文件

在这里插入图片描述

2、开启general_log
set global general_log=on;

从登陆日志可查看恶意IP地址

三:binlog日志

1、查看是否开启binlog日志
show variables like 'log_bin';

在这里插入图片描述
显示OFF则表示关闭。在MySQL8以前,这个功能是默认关闭的,需要手动开启。(若你的binlog日志显示关闭,则不用再浏览本文下面的内容了)

2、查找binlog
1、可通过配置文件查找位置
2、可全局查找binlog
	find / -name binlog*
# 默认情况下binlog在 /var/lib/mysql/ 目录,以binlog.000*命名,如下图所示。

在这里插入图片描述
可能会查找到多个binlog,如不清楚在哪一个binlog中发生的删库操作,可将最近的几个binlog和较大的binlog都转为sql文件并下载到本地打开分析(比如:本次博主被删库的操作发生在binlog.000005中)。
在这里插入图片描述
在这里插入图片描述

3、binlog转sql

由于binlog是二进制文件,转为sql以便阅读。此步骤主要是分析恶意删库发生在何时,及操作的偏移量。

(1). 全局查找 mysqlbinlog
find / -name mysqlbinlog
(2). binlog转为sql文件
/usr/bin/mysqlbinlog  /var/lib/mysql/binlog.000005  > /home/mysql/binlog5.sql
(3). 恢复数据

在这里插入图片描述
可以看出此次老黑搞事的时间和操作的偏移量。

①. 恢复数据
# --start-position 需要恢复的数据开始的偏移量
# --stop-position  需要恢复的数据结束的偏移量
/usr/bin/mysqlbinlog --no-defaults /home/mysql/binlog.000005 --start-position="4" --stop-position="322777" | /usr/bin/mysql -u root -p
#回车,输入密码即可

开始偏移量一般为最开始(可自选),结束偏移量为老黑搞事前的偏移量(需自行分析)

四:mysql重新安装(方法二)

1、卸载mysql
(1). 查看安装了那些东西
rpm -qa | grep -i mysql
(2). 卸载mysql
yum remove mysql -y

卸载后执行第一步操作查看是否卸载干净

(3). 查找mysql目录
find / -name mysql
(4). 依次删除mysql目录
rm -rf /usr/bin/mysql 	/var/lib/mysql
...
# 多个目录中间空格分开
(5). 删除mysql配置文件及日志
删除my.cnf、mysqld.log
2、安装mysql

使用yum命令安装:content8若yum报错:

Failed to download metadata for repo 'AppStream': Cannot prepare internal mirrorlist: No URLs in mirrorlist 

可将yum设置为阿里源。

(1). 安装mysql
# 更新软件包
yum update -y
# 安装数据库
yum install mysql -y
# 安装服务器
yum install mysql-server
(2). 启动mysql
# 通过yum安装的软件默认使用systemctl来管理,不需要手动设置
systemctl start mysqld.service

# 设置开机启动:
systemctl enable mysqld

# 查看服务运行状态
systemctl status mysqld.service
(3). 密码修改
# 直接输入mysql进入数据库
mysql;

# 查看已有数据库
show databases;

# 进入mysql数据库
use mysql;

# 设置root密码,注意满足大小写和符号
alter user 'root'@'localhost' identified by 'root123';

# 刷新权限
flush privileges;
(4). 开启远程访问
# 切换库
mysql> use mysql;

# 查看用户和权限
mysql> select user, host, authentication_string, plugin from user;
# user表的root用户Host字段是localhost,说明root用户只能本地登录

# 修改为可远程访问 '%'
update user set host='%' where user='root';

# 刷新权限
flush privileges;
(5). 修改默认端口
# 查看当前mysql端口号
mysql> show global variables like 'port';

# vim /etc/my.cnf.d/mysql-server.cnf
[mysqld]下新增
port=3006

在这里插入图片描述

# 重启mysql
systemctl restart mysqld
(6). 新建用户及授权
① 新建用户
# username 新用户名
# password 新用户密码
# host 指定的主机登陆:localhost:本地用户登陆;	%:远程用户可登陆
CREATE USER 'username'@'host' IDENTIFIED BY 'password';

# 例:
CREATE USER 'test'@'%' IDENTIFIED BY 'test123';
# 表示创建可远程的登陆的test用户,密码为:test123
② 新用户授权
GRANT privileges ON database.table TO 'username'@'host';
# privileges:用户操作权限。 select、insert、update、delete等,所有权限使用 ALL
# database:可操作的库。 所有库使用:*
# table:可操作库下可操作的表。所有表使用:*

# 例:
GRANT SELECT, UPDATE ON test_db.user TO 'test'@'%';
# test用户可对 test_db 库的 user 表进行查询 SELECT 和 UPDATE 操作

GRANT SELECT, INSERT ON test_db.* TO 'test'@'%';
# test用户可对 test_db 库的 所有 表进行查询 SELECT 和 INSERT 操作

GRANT ALL ON *.* TO 'test'@'%';
# test用户可对 所有 库的 所有 表进行所有操作

注意:若新建的test用户需要给其他用户授权,采用下面命令:

GRANT privileges ON database.table TO 'username'@'host' WITH GRANT OPTION;

五:安全设置

1、root密码复杂化
2、ssh登陆
3、通过nginx转发(感觉可以,未验证)

——未完待续,欢迎大佬提供其他防护措施——

  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值