记录一次阿里云数据库表数据被删恢复过程

最近某天打开业余开发的小程序,发现访问不了js报错,ssh登录服务器,发现上面各微服务正常,MQ、ES也正常,在某服务日志里看到了MySQL数据库连接
报错。服务器用的阿里云ECS,CPU2核、内存8G,在上面安装了MySQL,通过IDEA里连接时提示[28000][1045] Access denied for user root@x.x.x.x
之前一直是能连上的,并且几个月前对程序进行一些优化和完善,开发过程中编写过sql执行都是没问题的。

在服务器上直接用命令mysql -uroot -pxxx 发现数据库能连。
show databases;
use cdfive2019;
show tables;
select * from cdfive_song;
发现表里没数据了,查了其它几张表,数据都是空的。
该数据库和小程序主要是业余学习使用,上面有一些学习的demo演示和博客分享,数据量不大,除了日志表,最大只有几百条记录。
程序在github上开源,数据库用户名/密码配置在了yml里,在阿里云控制台也打开了3306端口,方便平常用客户端连接使用。
在业余有时间的时候,对功能和代码逐步进行建设和优化,已运行几年都没问题。
有点惊讶,在想是不是有其他人连了这个库,把数据表被清空了。
疑惑间突然看到show databases里多了一张README表,
select * from README;
结果如下:

以下数据库已被删除:cdfive2019, cdfive_mp3。 我们有一个完整的备份。 要恢复它,您必须将0.006比特币(BTC)支付给我们的比特币地址xxxxxx。 
有关说明,请通过xxx@xxx.com通过电子邮件联系我们。 任何与付款无关的邮件都将被忽略!

原来是被黑客攻击了,提示要付款才能找回被删除的数据。
在公司里几乎天天听到同事讨论炒币、股票等各种新闻和实战,没想到这里也是要求以比特并付款。
听说一个比特币价格很高,0.006个估计也不少。
感觉这黑客不太厚道,一个学习类分享技术、demo的小网站,也给数据删了。
并且找错了人,自己不懂币,也没有币或股票账户,没有能力支付。
幸运的是,之前有对云上的数据库定期进行备份,找到备份的数据恢复即可。

查看用户:
select host,user,authentication_string from mysql.user;
发现多了一个mysqld不限ip的用户,将它删除。

删除用户:
drop user mysqld@'%';

查看授权:
show grants;

对固定ip授权:
GRANT ALL PRIVILEGES ON *.* TO 'root'@'x.x.x.x' IDENTIFIED BY 'xxx';
不使用%对所有ip授权,仅对固定ip授权,减少可能的恶意访问。

刷新授权:
flush privileges;

参考:

原文地址:https://www.cnblogs.com/cdfive2018/p/14803004.html