恢复丢失的mysql数据

问题描述 投票:1回答:1

我不小心执行了一个sql脚本,把我数据库的所有表都掉了。好在我有一个主从复制的设置,但是我的从机已经7天没有更新了。

所以我在想,如果能把binlogs的位置回滚到 撤销 脚本所做的更改。

运行 SHOW BINARY LOGS; 给我。

"Log_name"  "File_size"
"mst-bin.000001"    "1073883720"
"mst-bin.000002"    "1073742741"
"mst-bin.000003"    "1073743121"
"mst-bin.000004"    "1073744456"
"mst-bin.000005"    "1073742926"
"mst-bin.000006"    "1073744758"
"mst-bin.000007"    "1073741932"
"mst-bin.000008"    "1073742250"
"mst-bin.000009"    "1073741889"
"mst-bin.000010"    "1073745312"
"mst-bin.000011"    "1073742485"
"mst-bin.000012"    "1073743060"
"mst-bin.000013"    "316454512"
"mst-bin.000014"    "1073744018"
"mst-bin.000015"    "1073741967"
"mst-bin.000016"    "1073741933"
"mst-bin.000017"    "1073742186"
"mst-bin.000018"    "828840943" // i believe this is the affected binlog

我的选择是什么?运行脚本后,我立即禁用数据库服务器以冻结一切。


我尝试了 ./mysqlbinlog.exe --start-datetime="2017-02-21 12:01:57" ../data/mst-bin.000018 也就是脚本被执行的时间,我看到了脚本执行的一切。

在脚本开始执行drops之前的最后一个位置有这个信息。

# at 828841094
#170221 12:06:15 server id 1  end_log_pos 828841169     Query   thread_id=66    exec_time=0     error_code=0
mysql recovery
1个回答
0
投票

我的主从复制设置了,但我的从站在过去的7天里一直没有更新,所以我 ... 使用二进制日志的时间点(增量)恢复。 对我来说是有效的。

首先,我找了一下事故发生前的binlog的位置。我找到的位置是: 828841094. 然后我执行了这个命令

./mysqlbinlog.exe --stop-position=828841094 ../data/mst-bin.000001 ../data/mst-bin.000002 ../data/mst-bin.000003 ...so on ../data/mst-bin.000018 | ./mysql.exe --binary-mode --binary-mode -u root -p

这个... --stop-position 将只适用于列表中的最后一个bin文件。

而且它重放了所有的查询,花了很多时间,但至少我恢复了数据。

感谢@eggyal的建议。

© www.soinside.com 2019 - 2024. All rights reserved.