文章目录
  1. 1. 撸坏 MySQL 表
  2. 2. Time Machine 拔刀相助
  3. 3. Time Machine 使用经验

之前换新 Mac 时,Time Machine 来做的 OS X 数据迁移,立了大功。最近又立一小功。

作为一名程序员,我写了不少自己日常用的小工具,其中一些以 Web 形式搭建在自己的 Mac 上。

像往常一样利用 Web 工具记录东西,不料写错了一个值。碰巧这个工具还没有开发修改记录的功能。那就只能手撸 MySQL 了。

撸坏 MySQL 表

下边表名和字段名都打了马赛克。

相关字段是 type,开撸:

1
update table_x set type=4;

撸完去刷新 Web 页面,傻了,所有记录的类型都变成 4 了。瞬间想起 SQL 语句没加 where 限定条件,正确的语句应该是这样:

1
update table_x set type=4 where id=2993;

表里有近 3000 条数据啊,现在这近 3000 条数据的 type 字段都成为 4 了。像吃了苍蝇。

Time Machine 拔刀相助

赶紧想办法恢复。首先貌似没有语句能撤销命令。

然后,找我的定时备份库,但是这个定时设置的是每天一次。如果恢复到昨天,那昨天备份时刻到现在的几十条记录就得手动去改。还是有点麻烦。

再想到 binlog,当时我没开启过 binlog,尴尬。

灵机一动,我不是有 Time Machine 嘛。MySQL 的表的数据一般存储在各自独立的文件里,能恢复这个文件到之前一两个版本就行了。赶紧用下这个月光宝盒碰碰运气。

于是用 Vim 打开 MySQL 的配置文件 /etc/my.cnf,找到 MySQL 的数据文件存储路径的配置:

1
datadir = /usr/local/var/mysql

找到被搞坏表的数据文件路径,例如我这里的 /usr/local/var/mysql/db_x/talbe_x.ibd,然后打开 Time Machine,找到这个文件,就可以很方便的挑选中意的版本。我估算下时间,找到魔鬼命令之前的版本,选中后点击“恢复”按钮,啪叽,我那近 3000 条的数据就恢复了被搞坏前的版本。

当然,我为了安全起见,在进入 TimeMachine 之前我把 MySQL Server 服务停掉了,恢复完数据文件再重启的。

Time Machine 使用经验

先摘录下 Time Machine 偏好设置界面的说明:

Time Machine 会保留:

  • 本地快照(只要空间允许)
  • 过去 24 小时的每小时备份
  • 过去一个月的每日备份
  • 过去所有月份的每周备份

当备份磁盘装满时,最早的备份会被删除。

我用的是一个带 USB 3.0 口的移动硬盘,我的容量是 1T,做了一个 300G 的分区专门做 Time Machine 备份盘。

USB 3.0 速度会快些,现在应该是标配了吧。备份盘所需容量得看情况,我的 Mac 是 256G 硬盘,目前 Time Machine 占用了移动硬盘备份分区 300G 中的 270G 左右,显示备份数据的时间范围为 2016-05-14 ~ 2016-09-05 日。

我一般是半个月到一个月才拿出移动硬盘做次备份。

这次恢复 MySQL 表的数据文件,都不用拿移动硬盘,原因在偏好设置里也说明了。不是当你连接了移动硬盘时才做备份,平时它会将文件的版本变化存储在本地,当你连接移动硬盘时,只是将平时的备份算下增量,然后将这个增量拷贝到你的移动硬盘里。

文章目录
  1. 1. 撸坏 MySQL 表
  2. 2. Time Machine 拔刀相助
  3. 3. Time Machine 使用经验