记一次测试服mysql数据库密码设置过于简单被暴力破解删除索要比特币,通过binlog恢复数据的记录

平时为了方便连接数据库数据库设置比较简单,突然发现程序报错,看报错是连不上数据库,心里已经知道被攻击删除了数据库。
登录mysql所在服务器,通过安全模式登录数据库,果然。

1.重置mysql 密码

#vi /etc/my.cnf

在文档内搜索mysqld定位到[mysqld]文本段:
/mysqld(在vim编辑状态下直接输入该命令可搜索文本内容)

在[mysqld]后面任意一行添加“skip-grant-tables”用来跳过密码验证的过程,如下图所示:

[mysqld]
skip-grant-tables

保存文档并退出

无密码登录,重新创建用户设置密码,删除上面的配置,重启MySQL。

2.通过binlog恢复数据

由于三个月前已有备份数据库,通过备份文件恢复到三个月前。

这里就通过选择时间得到这三个月的执行过的sql文件恢复数据库:

./mysqlbinlog --no-defaults --base64-output=decode-rows -v \
--skip-gtids \
--start-datetime "2021-04-15 14:06:25" \
--stop-datetime "2021-07-13 11:06:25" \
--database zentao \
/usr/local/mysql/var/mysql-bin.000101 > /home/binlog_raw.sql

通过sql文件还原:
mysql -h127.0.0.1 -uroot -p7u15u442c980dop zentao < /home/binlog_raw.sql
本次数据库就恢复了。

3.这里也可以通过位置精确导出。我这里是测试服也就时间直接恢复了。

mysqlbinlog --no-defaults --base64-output=decode-rows -v \
--start-position "28132" --stop-position "2511004" \
--database test_db mysql-bin.00001 \
> /home/mysql_binlog.sql

4.mysqlbinlog 参数含义

—help,-?

显示帮助消息并退出。

·

—database=db_name,-d db_name

只列出该数据库的条目(只用本地日志)。

·

–force-read,-f

使用该选项,如果mysqlbinlog读它不能识别的二进制日志事件,它会打印警告,忽略该事件并继续。没有该选项,如果mysqlbinlog读到此类事件则停止。

·

–hexdump,-H

在注释中显示日志的十六进制转储。该输出可以帮助复制过程中的调试。在MySQL 5.1.2中添加了该选项。

·

–host=host_name,-h host_name

获取给定主机上的MySQL服务器的二进制日志。

·

–local-load=path,-l pat

为指定目录中的LOAD DATA INFILE预处理本地临时文件。

· 

–offset=N,-o N

跳过前N个条目。

·

–password[=password],-p[password]

当连接服务器时使用的密码。如果使用短选项形式(-p),选项和 密码之间不能有空格。如果在命令行中–password或-p选项后面没有 密码值,则提示输入一个密码。

·

–port=port_num,-P port_num

用于连接远程服务器的TCP/IP端口号。

·

–position=N,-j N

不赞成使用,应使用–start-position。

·

–protocol={TCP | SOCKET | PIPE | -position

使用的连接协议。

·

–read-from-remote-server,-R

从MySQL服务器读二进制日志。如果未给出该选项,任何连接参数选项将被忽略。这些选项是–host、–password、–port、–protocol、–socket和–user。

·

–result-file=name, -r name

将输出指向给定的文件。

·

–short-form,-s

只显示日志中包含的语句,不显示其它信息。

·

–socket=path,-S path

用于连接的套接字文件。

·

–start-datetime=datetime

从二进制日志中第1个日期时间等于或晚于datetime参量的事件开始读取。datetime值相对于运行mysqlbinlog的机器上的本地时区。该值格式应符合DATETIME或TIMESTAMP数据类型。例如:

shell> mysqlbinlog –start-datetime=”2004-12-25 11:25:56″ binlog.000003该选项可以帮助点对点恢复。

·

–stop-datetime=datetime

从二进制日志中第1个日期时间等于或晚于datetime参量的事件起停止读。关于datetime值的描述参见–start-datetime选项。该选项可以帮助及时恢复。

·

–start-position=N

从二进制日志中第1个位置等于N参量时的事件开始读。

·

–stop-position=N

从二进制日志中第1个位置等于和大于N参量时的事件起停止读。

·

–to-last-logs,-t

在MySQL服务器中请求的二进制日志的结尾处不停止,而是继续打印直到最后一个二进制日志的结尾。如果将输出发送给同一台MySQL服务器,会导致无限循环。该选项要求–read-from-remote-server。

·

–disable-logs-bin,-D

禁用二进制日志。如果使用–to-last-logs选项将输出发送给同一台MySQL服务器,可以避免无限循环。该选项在崩溃恢复时也很有用,可以避免复制已经记录的语句。注释:该选项要求有SUPER权限。

·

–user=user_name,-u user_name

连接远程服务器时使用的MySQL用户名。

·

–version,-V

显示版本信息并退出。

还可以使用–var_name=value选项设置下面的变量:

·

open_files_limit

指定要保留的打开的文件描述符的数量。

 

posted @ 2021-07-13 16:53  selfim写博客  阅读(308)  评论(0)    收藏  举报