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

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

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

撸坏 MySQL 表

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

相关字段是 type,开撸:

update table_x set type=4;

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

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 的数据文件存储路径的配置:

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 表的数据文件,都不用拿移动硬盘,原因在偏好设置里也说明了。不是当你连接了移动硬盘时才做备份,平时它会将文件的版本变化存储在本地,当你连接移动硬盘时,只是将平时的备份算下增量,然后将这个增量拷贝到你的移动硬盘里。文章首发在公众号「结伴学袭」。

喜欢的话,可以搜索「结伴学袭」或「ComebackEve」关注下。

mysql 污表_Time Machine 华丽营救被污的 MySQL 表相关推荐

  1. mysql 表引擎无法更新_Mysql安装archive引擎更新表引擎

    1,在mysql命令行中安装Archive引擎 1,查找mysql plugins lib目录,看目录中是否存在Archive的so; mysql > show variables like'p ...

  2. mysql数据库建表失败_mysql数据库文件太大导致建表失败,如何避免

    [求助]mysql数据库文件太大导致建表失败,如何处理? 目录下各文件大小如下: root /mbsc/mysql/data # ll total 120646812 -rw-rw---- 1 mys ...

  3. mysql半连接_mysql表的半连接,反连接导致的mysql性能优化剖析

    [导读] 关于Oracle的半连接,反连接,我一直认为这是一个能讲很长时间的话题,所以在我的新书<Oracle DBA工作笔记>中讲性能优化的时候,我花... 关于Oracle的半连接,反 ...

  4. 一台mysql并发能力_mysql怎么支撑百万级并发-对于同一个表,MySQL支持多少个并发操作...

    到服务器的SQL最大并发连接数为16384.mysql百万级数据查询. 受服务器配置和网络环境的限制,实际服务器支持的并发连接数量会更小. MySQL流量大,并发问题高 因为mysql是一个线程的连接 ...

  5. mysql 分表后如何扩展_mysql扩展至分库分表

    MySQL互联网Oracle企业应用数据结构 . 数据库的复制能解决访问问题,并不能解决大规模的并发写入问题,要解决这个问题就要考虑mysql数据切分了 数据切分,顾名思义,就是数据分散,将一台主机上 ...

  6. 如何创建一张表mysql_如何创建一张规范的MySQL表

    到底怎样才能创建一张规范的MySQL表? 为什么必定需要有无业务意义的主键,并且还需要自增? 应该在哪些字段添加索引? 或许有些人会有以上类似的疑问.这几天通过本身的整理加上好友的指导,整理了一份稍微 ...

  7. mysql 压力测试知乎_MySQL 对于千万级的大表要怎么优化? - MySQL

    很多人第一反应是各种切分:我给的顺序是: 第一优化你的sql和索引: 第二加缓存,memcached,redis: 第三以上都做了后,还是慢,就做主从复制或主主复制,读写分离,可以在应用层做,效率高, ...

  8. mysql数据库truncate 夯住_MySQL如何优雅的删除大表实例详解

    前言 删除表,大家下意识想到的命令可能是直接使用DROP TABLE "表名",这是初生牛犊的做法,因为当要删除的表达空间到几十G,甚至是几百G的表时候.这样一条命令下去,MySQ ...

  9. mysql 建表_别再胡乱建表了,看看阿里P8总结的mysql建表规约吧

    (一) 建表规约 [强制]表达是与否概念的字段,必须使用 is_xxx 的方式命名,数据类型是 unsigned tinyint ( 1表示是,0表示否). 说明:任何字段如果为非负数,必须是 uns ...

最新文章

  1. Linux命令之uname
  2. java配置解决方法_如何配置Java环境变量及可能出现问题的解决方法
  3. 集合类-HashSet去重
  4. Java实现字母的大小写转换
  5. 利用matlab绘制图形
  6. 关于/usr/bin/ld: cannot find -lXX的问题
  7. 服务器系统给U盘盘符,五大步骤解决U盘插入电脑盘符不显示问题
  8. Oracle sqlplus prelim 参数介绍
  9. AccessibilityService的具体应用场景
  10. 启动Tomcat时报错,一大堆的
  11. R语言的读取文件的相关学习(读取数据库,网页,EXCEL文件)
  12. ubuntu cron 定时任务
  13. 【EMMC】MSM8953里时钟是如何分频的
  14. 共模扼流圈的工作原理与作用以及特点和应用详解
  15. Carson带你学Android:手把手带你入门跨平台UI开发框架Flutter
  16. 诶嘿,~~o(╥﹏╥)o~~大东北我又来了
  17. “前程无忧”招聘数据爬虫——(1)
  18. 张宇1000题高等数学 第十六章 无穷级数
  19. Java回调函数异步回调案例
  20. webserveice搭建

热门文章

  1. python 从多目标解中筛选非支配解集
  2. 摄影技术学习笔记(持续学习)
  3. swust594 Maximum Tape Utilization Ratio
  4. ZZULIOJ:1068: 二进制数
  5. SSH2框架实现注册发短信验证码实例
  6. 电子烟TPD/烟油TDP检测步骤
  7. 视频webm怎么转换成mp4?
  8. bnu1079 BNUEP的球迷 C语言版
  9. 双色球号码自动生成系统-------买彩票不愁啦
  10. 谷歌、百度、必应高级搜索指令整理