恢复丢失的 mysql 数据
Recover lost mysql data
我不小心执行了一个 sql 脚本,它删除了我数据库中的所有表。好消息是我有一个主从复制设置,但我的从服务器在过去 7 天内没有更新。
所以我在想是否可以将二进制日志位置回滚到撤消脚本所做的更改。
运行 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
Point-in-Time (Incremental) Recovery Using the Binary Log 对我有用。
首先我查找了事故发生前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 的建议。
我不小心执行了一个 sql 脚本,它删除了我数据库中的所有表。好消息是我有一个主从复制设置,但我的从服务器在过去 7 天内没有更新。
所以我在想是否可以将二进制日志位置回滚到撤消脚本所做的更改。
运行 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
Point-in-Time (Incremental) Recovery Using the Binary Log 对我有用。
首先我查找了事故发生前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 的建议。