mysql-bin 恢复数据库

avatar
作者
猴君
阅读量:0

                 能看到这里的同学估计肯定摊上大事了吧!不要慌,一定要冷静,记录一下作者的大事件吧,黑客通过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文件修改以后重新执行。

广告一刻

为您即时展示最新活动产品广告消息,让您随时掌握产品活动新动态!