能看到这里的同学估计肯定摊上大事了吧!不要慌,一定要冷静,记录一下作者的大事件吧,黑客通过SQL注入的方式执行了一段SQL :
DROP DATABASE
******
后果就是导致整个数据库被删了,当时心是拔凉拔凉的,想过最近执行的各种命令都没发现做了删库这个操作,直到看到了下面这句话 :
大概的意思就是说,需要在24小时内转0.1个BTC到那个地址才能拿到数据,我们就算重来也不会惯着这种无底线的人,一般没有网络安全或运维的都是小公司,小公司很艰难的,遇到这种无疑是雪上加霜。
要想使用 mysql-bin 恢复数据库首先我们得在数据库配置里面 my.cnf 加上:
[mysqld]
log-bin=mysql-bin
server-id=1
然后在我们数据库表文件中,目录/var/lib/mysql下面会出现很多这种文件:
这是SQL的二进制文件,我们需要把它转换成 .SQL文件,不管是服务器还是本地,我们需要确认已经安装了mysqlbinlog 这个工具。然后使用命令将文件转换成我们的SQL。
mysqlbinlog /path/to/mysql-bin.000001 > /path/to/output.sql
如果是本地转换的话需要再mysql的安装目录里面的bin目录里面打开命令窗口,然后调整到SQL二进制文件地址和转换的SQL文件存储地址即可转换。
转换以后可以直接执行我们的SQL文件进行恢复,我们这里主要讲解恢复在服务器上面:
将mysql里面的my.cnf文件修改成如下配置,主要是快速恢复数据:
[mysqld]
# 调整缓冲区大小以提高性能
innodb_buffer_pool_size=2G
innodb_log_file_size=1G
innodb_flush_log_at_trx_commit=2
innodb_io_capacity=2000
innodb_io_capacity_max=4000
innodb_flush_method=O_DIRECT
innodb_write_io_threads=16
innodb_read_io_threads=16
# 关闭查询缓存
query_cache_size=0
query_cache_type=0
# 增加排序缓冲区大小
sort_buffer_size=64M
如果是docker的话需要进入到mysql容器里面执行下面命令即可恢复,请一定按照顺序执行01-02-03-04...................
mysql -u root -p < /var/lib/mysql/000001.sql;
然后数据数据库密码即可执行SQL恢复我们的数据库和表了。
由于我的二进制文件是在本地转换的SQL文件,所以我使用了下面命令将SQL文件快速上传到了服务器的对应目录,快速上传文件用下面命令,然后输入服务器密码即可
scp 000009.sql root@8.152.122.149:/data/mysql/data
服务器备份命令,把mysql 里面的数据备份到mysql2里面去:
cp -a /data/mysql /data/mysql2
这里提醒一下:如果SQL文件很大很多,我们在每恢复一个SQL文件时记得备份mysql里面的data文件夹(表和数据),一般黑客留下的删除表命令也会在SQL文件里面,所以如果我们不小心执行到了那个SQL文件以后我们还可以恢复data,然后将SQL文件修改以后重新执行。