设为首页 收藏本站
查看: 465|回复: 0

[经验分享] mysql利用二进制日志来进行恢复数据的实例操作

[复制链接]

尚未签到

发表于 2016-10-17 05:29:32 | 显示全部楼层 |阅读模式
  mysql 利用二进制日志来进行恢复数据的实例操作
备份开始前的工作环境准备:
  1、创建用于保存二进制日志文件的目录
# mkdir /mybinlog
# chown mysql.mysql /mybinlog
  2、修改配置文件
# vim /etc/my.cnf
log-bin=/mybinlog/mysql-bin 二进制日志目录及文件前缀
innodb_file_per_table = 1 启用innoDB表
datadir = /mydata/data 指定数据库的目录
  3、为备份数据库创建存放点
# mkdir /mybackup
# chown -R mysql.mysql /mybackup
  4、启动mysql服务器
# service mysqld start
  5、插入需要备份的数据库
# mysql < jiaowu.sql
  使用mysqldump工具完成完全备份
  mysqldump用来温备份,首先需要为所有库加读锁,并且滚动一下二进制日志,记录当前二进制文件位置
  # mysqldump –all-databases –lock-all-tables –routines –triggers –master-data=2 –flush-logs > /mybackup/alldatabase.sql
  解释各个选项的意义:
–all-databases 备份所有数据库
–lock-all-tables 为所有表加锁
–routines 存储过程与存储函数
–triggers 触发器
–master-data=2 以change master to的方式记录位置,但默认为被注释
–flush-logs 执行日志滚动
  备份二进制日志
# cp /mybinlog/mysql-bin.000001 /mybackup/alldatabase.000001
  模拟数据库意外损坏,利用完全备份实现数据库的恢复
  # rm -rf /mydata/data/*
# rm -rf /mybinlog/*
  
  初始化mysql并启动服务器
# cd /usr/local/mysql/
# ./scripts/mysql_install_db –user=mysql –datadir=/mydata/data
  删除二进制日志,启动服务
# rm -rf /mybinlog/*
# netstat -tnlp 查看启动的mysql进程号
tcp 0 0 0.0.0.0:3306 0.0.0.0:* LISTEN 2523/mysql
# kill 2523 (注意,如果在备份之前mysql服务是开启的,重启是不成功的,需要把这个进程先kill掉)
# service mysqld restart
  恢复到备份状态,导入备份的数据库文件:
# mysql < /mybackup/alldatabase.sql
  模拟往students表中添加数据,添加完成后不小心将表删除了,我们要恢复到删除之前的状态,并且新加的数据还要存在
  往students表中添加数据
  mysql> use jiaowu;
mysql> insert into students (Name,Age,Gender) values (‘hadoop’,22,’M');
  模拟一下,不小心将表删除了
  mysql> drop tables students;
  查看一下二进制日志文件的位置
  mysql> show master status;
+——————+———-+————–+——————+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+——————+———-+————–+——————+
| mysql-bin.000002 | 520351 | | |
+——————+———-+————–+——————+
先恢复完整数据(恢复过程不要记录在日志中)
  mysql> set global sql_log_bin=0;
# mysql < /mybackup/alldatabase.sql
查看删除表时的记录位置
  # mysqlbinlog /mybinlog/mysql-bin.000002 内容如下:
# at 520084
#130501 16:44:08 server id 1 end_log_pos 520212 Query thread_id=2 exec_time=0 error_code=0
use jiaowu/*!*/;
SET TIMESTAMP=1367397848/*!*/;
insert into students (Name,Age,Gender) values (‘hadoop’,22,’M')
/*!*/;
# at 520212
#130501 16:44:08 server id 1 end_log_pos 520239 Xid = 308
COMMIT/*!*/;
# at 520239 删除命令在这个时刻开始执行的
#130501 16:45:37 server id 1 end_log_pos 520351 Query thread_id=2 exec_time=0 error_code=0
SET TIMESTAMP=1367397937/*!*/;
DROP TABLE `students` /* generated by server */
/*!*/;
DELIMITER ;
# End of log file
将二进制文件中完整备份到删除表之前的记录导出
  # mysqlbinlog –stop-position=520239 /mybinlog/mysql-bin.000002 > /root/change.sql
  解释:
–start-position 指定从哪开始导出二进制日志
–stop-position 指定到哪结束
–start-datetime 从哪个时间开始
–stop-datetime 到哪个时间结束
  将改变的数据库日志导入到mysql库中
  # mysql < /root/change.sql
  见证奇迹的时刻数据库恢复成功,并且插入的数据也还原回来了
  mysql> select Name,Age,Gender from students where Name=’hadoop’;
+——–+——+——–+
| Name | Age | Gender |
+——–+——+——–+
| hadoop | 22 | M |
+——–+——+——–+

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-287053-1-1.html 上篇帖子: [MySQL Slow log]正确安全清空在线慢查询日志slow log的流程 下篇帖子: mysql数据库备份及恢复命令mysqldump,source的用法
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表