mysql - 恢复丢失的mysql数据

标签 mysql recovery

我不小心执行了一个删除了数据库中所有表的 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 的建议。

关于mysql - 恢复丢失的mysql数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42374958/

相关文章:

elasticsearch - Elasticsearch如何从不一致的仲裁中恢复

android - lsetfilecon失败:传输端点上不支持该操作

kubernetes - 如何从死掉的kubernetes集群中提取配置和其他信息?

mysql - 用于持久化以枚举类型作为键的 Map 的 hibernate 注释是什么?

java - 将 MySQL json 列映射到 JPA 会引发错误

php - 关系数据库中的面向对象结构

c# - 在c# Visual Studio中的一个连接中创建多个mysql命令&where子句中的未知列

c# - 为服务的 FailureAction 设置什么 REG-BINARY

mysql - SQL Server 与 MySQL 中的表分区功能有何不同?

postgresql - 如何退出数据库恢复模式(目前锁定在只读模式)