MySQL单表恢复方法
正休息的时候一个电话将我的睡意完全打散,“开发童鞋写update SQL的时候忘了加where条件了”,相信每一个DBA同学听到这个消息的时候都有骂街的冲动吧。万幸只是单表写花了,而不是哪位大神在DB里面drop table玩。虽然已经很久没进行单表恢复了,但是还好步骤都印在脑海中,没有出问题的就恢复完了。
言归正传,记录一下单表恢复的步骤和关键点,提醒自己也提醒大家。
第一步:
找一台性能比较高的服务器作为还原机,从备份池中将最近的一次备份恢复到这台还原机上。当然这个前提是你有备份,且备份是可用的。(什么? 你告诉我没有做备份,那么同学你可以洗洗睡了,准备享受自由的空气吧。)
注意:这个时候不要启动同步,务必保持不同步状态。
ps:多说一嘴,对于DBA来说,备份是最重要的一个环节,不但要有,还要定期检查备份是否是可用的,这是DBA的必要素质之一。
第二步:
联系那个犯错的开发同学要错误的SQL语句和时间点,然后从主库的binlog中找到这条SQL的执行点。具体操作举例如下
### 使用mysqlbinlog将二进制日志转化为明文SQL日志 mysqlbinlog mysql-bin.000123 > /data1/000123.sql### 使用linux的grep命令根据“key word”找到那个引发数据写花的SQL所在的位置 cat 000123.sql |grep -C 10 'key word' --color ### 标红色的是问题SQL,及这条SQL开始的时间点,及下一条SQL的开始时间点,这2个pos位置非常重要 # at 20393709 #131205 20:55:08 server id 18984603 end_log_pos 20393779 Query thread_id=16296016 exec_time=0 error_code=0 SET TIMESTAMP=1386248108/*!*/; BEGIN /*!*/; # at 20393779 #131205 20:55:08 server id 18984603 end_log_pos 20394211 Query thread_id=16296016 exec_time=0 error_code=0 SET TIMESTAMP=1386248108/*!*/; update table tablename set names='xxxx'; # at 20394211 #131205 20:55:08 server id 18984603 end_log_pos 20394238 Xid = 92465981 COMMIT/*!*/; # at 20394238 #131205 20:55:10 server id 18984603 end_log_pos 20394308 Query thread_id=16296017 exec_time=0 error_code=0 SET TIMESTAMP=1386248110/*!*/; BEGIN
第三步:
根据第二步得到的pos位置,启动同步关系,但是需要停止到问题SQL之前的pos位置上,具体使用如下命令
### pos位置等于问题SQL begin的pos位置slave start until master_log_file='mysql-bin.000123',master_log_pos=20393709;
然后跳过这个问题SQL,将同步change到下一个pos位置上,具体使用如下命令
### pos位置等于问题SQL commit之后的pos位置change master to master_log_file='mysql-bin.000123',master_log_pos=20394238;
从上面两条命令我们看出,第二步得到的两个pos位置很关键。
第四步:
在主库上将写花的表改名,其目的有二个,其一,停止对这个表的写入(当然这对业务会有一定的影响,会出现一段时间内的写入失败报警,需要提前和业务部门联系好),其二,一旦恢复失败,至少还有一个写花的表存在,可以很快的恢复成我们恢复操作之前的状态。
### 在主库上执行 rename table tablename to tablename_bak;
然后在还原机上执行dump操作,执行这个操作的使用需要注意,如果表中有中文字符,一定记得需要添加--default-chararter-set参数
mysqldump -uusername -ppassword -S/tmp/mysql.sock dbname tablename --opt> tablename.sql
最后将这个文件传输到主库服务器上,完成最后的恢复操作
### 可以选择登陆mysql之后 source tablename.sql;### 也可以在cmd界面 mysql -uusername -ppassword -S/tmp/mysql.sock < tablename.sql
当然也可以不这么麻烦,直接执行如下命令,但是个人习惯处于保存历史操作记录和中间结果的需要,我都是按照以上步骤完成,这样可以保存一个随时可以恢复的文本文件,心理更踏实一点。
### 快速的方法可以按照如下操作,在还原机上的命令 mysql -uusername -ppassword -S /tmp/mysql.sock dbname tablename | mysql -uusername -ppassowrd -hhost -Pport
通过以上命令就可以直接完成dump并导入的操作了,缺点就是不会有一份备份文件生成。
第五步:
基本DBA的事情就没有了,这时候就需要告诉开发同学恢复完毕,进行应用测试及数据正确性效验了。如果一切都没有问题之后,我们需要将刚才rename的表drop掉,整个恢复操作就算大功告成了。
drop table if exists tablename_bak;
数据库恢复是每个DBA必备的技能,需要熟练掌握,希望度过这篇文章的同学们都可以轻车熟路的进行恢复操作。
ps:这个操作,最好一万年都不要用一次就最好了。
转载于:https://www.cnblogs.com/billyxp/p/3460682.html
MySQL单表恢复方法相关推荐
- 一文带你了解MySQL之单表访问方法
前言 对于我们这些MySQL的使用者来说,MySQL其实就是一个软件,平时用的最多的就是查询功能.DBA时不时丢过来一些慢查询语句让优化,我们如果连查询是怎么执行的都不清楚还优化什么,所以是时候掌握真 ...
- MySQL单表多字段模糊查询
今天工作时遇到一个功能问题:就是输入关键字搜索的字段不只一个字段,比如 我输入: 超天才 ,需要检索出 包含这个关键字的 name . company.job等多个字段.在网上查询了一会就找到了答案. ...
- MySQL单表数据不要超过500万行:是经验数值,还是黄金铁律?
今天,探讨一个有趣的话题:MySQL 单表数据达到多少时才需要考虑分库分表?有人说 2000 万行,也有人说 500 万行.那么,你觉得这个数值多少才合适呢? 曾经在中国互联网技术圈广为流传着这么一个 ...
- 关于mysql单表支持的最大大小
mysql单表支持的最大存储空间大小为多少呢? 其实这个问题要拆分成两个问题. 第一是操作系统所采用的文件系统能支持的单个文件大小,比如: linux 2.2-intel 32-bit (ext2文件 ...
- mysql 评价表设计_来聊聊mysql单表评论系统怎么设计
评论系统对于一个网站来说几乎是必不可少的,当然评论系统的设计也多种多样.一般情况下,评论数据表会和一个用户信息表结合使用,就是在评论表中记录的有用户id(例如user_id),然后查询评论数据的时候根 ...
- 运维高级学习(三):MySQL单表查询作业
MySQL第三次作业 MySQL单表查询作业 素材如下: DROP TABLE IF EXISTS `course`; CREATE TABLE `course` ( `cs_id` int(11) ...
- mysql 单表2000多万条数据,模糊查询如何秒回
mysql 单表数据2000多万,没有分区.没有表.没有分库,表存储的是企业信息,例如:企业名称.经营范围.注册地址等信息.现在需要通过关键词模糊匹配企业名称,搜索出匹配的数据.因为模糊匹配,所以直接 ...
- 记录一次mysql单表查询优化
mysql单表查询语句如何优化可以加快速度? 优化 MySQL 单表查询语句的方法有很多,以下是一些常用的优化技巧: 索引优化:创建索引可以加快查询速度.索引可以基于一个或多个列创建,可以大大提高查询 ...
- MySQL单表数据量过千万,采坑优化记录,完美解决方案
MySQL单表数据量过千万,采坑优化记录,完美解决方案 参考文章: (1)MySQL单表数据量过千万,采坑优化记录,完美解决方案 (2)https://www.cnblogs.com/ExMan/p/ ...
最新文章
- 2020年信号与系统课程批改工作处理程序
- 蓝桥杯: 基础练习 数列排序
- UVa10825 Anagram and Multiplication(dfs)
- vue 发送ajax请求
- React+TypeScript+webpack4多入口项目搭建
- linux 输入法错误,Ubuntu 16.04安装搜狗拼音输入法错误问题的解决方法
- 设计模式原则之五:里氏置换原则
- R软件和扩展包的升级及R语言数据对象
- 税控接口 - 模拟录入
- 线性系统的状态空间分析和综合
- js 下载文件、音频、视频
- [css] 你有使用过vmax和vmin吗?说说你对它们的理解
- 支付宝公布春节抢红包大数据 金华人全国第五壕
- C#编写中英文虚拟键盘
- 2020微信小微商户、微信支付商业版签约商户流程
- JavaScript防流量劫持
- java GUI实现记事本
- 魔戒 4维bfs搜索
- 初识TradingView脚本语言PineScrpt 5
- 时序逻辑电路的设计(二) -- 篮球比赛24秒倒计时电路(附Multisim)
热门文章
- Commons IO
- Spring Boot2.0之整合Redis
- BZOJ 1821 [JSOI2010] Group 部落划分 Group
- ACdream 1224 Robbers (贪心)
- swift处理网络返回数据(封装)
- 7 linux服务器程序规范
- DateGridView的外观美化
- android movie studio 下载,Movie Studio+ Video Editor
- oracle asm clsecho,ASM磁盘组一点管理
- vim代码格式化自动加空格_vim格式化代码实际上就是 缩进代码, 命令是等号=