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

[经验分享] 使用mysqlbinlog恢复数据

[复制链接]
累计签到:1 天
连续签到:1 天
发表于 2016-8-5 09:11:53 | 显示全部楼层 |阅读模式
一、开启bin-log

1、安装mysql

1
[iyunv@zhen ~]# yum -y install mysql mysql-devel mysql-server



2、开启bin-log功能

1
2
3
4
5
6
7
8
[iyunv@zhen ~]# vi /etc/my.cnf
      1 [mysqld]
      2 datadir=/var/lib/mysql
      3 socket=/var/lib/mysql/mysql.sock
      4 user=mysql
      5 # Disabling symbolic-links is recommended to prevent assorted security risks
      6 symbolic-links=0
      7 log_bin=mysql_bin



配置保存之后重启mysqld。
bin-log是执行SQL时产生的日志文件,只不过该日志是二进制。作用有两个:
①数据恢复;
②配置数据库主从,用于slave可以从master同步数据。
3、确认是否开启bin-log
登录数据库,执行:
1
mysql> show variables like 'log_bin';



wKiom1ei4gyAShbzAAAOq_x0TXM182.jpg
看到确实是开启的,这样会在数据库的datadir目录下生成格式为mysql_bin.000001的日志文件:
wKiom1ei4nPg199zAAASJkK-C10681.jpg
二、查看产生的日志文件
bin-log是二进制文件,不能用vim等文本编辑器打开。Mysql提供了两种方式查看,在查看之前先执行一些SQL让文件中有记录。
1
2
3
4
mysql> use test;
mysql> create table students( id int(10) primary key auto_increment,name varchar(255));
mysql> insert into students (id,name) values (1,'zhangsan'),(2,'lisi');
mysql> select * from students;



第一种查看方式:mysql自带的mysqlbinlog命令:
1
[iyunv@zhen ~]# /usr/bin/mysqlbinlog /var/lib/mysql/mysql_bin.000001



以在表中插入数据为例,来看看日志的格式:
1
2
3
4
5
# at 248
#160711 17:29:00 server id 1  end_log_pos 373 Querythread_id=3exec_time=0error_code=0
SET TIMESTAMP=1468272540/*!*/;
insert into students (id,name) values (1,'zhangsan'),(2,'lisi')
/*!*/;



“at 248”表示这条记录的起始位置(position)
“160711 17:29:00”表示记录产生的时间
“server id 1”表示是哪个服务器产生的记录
“end_log_pos 373”表示这条记录的终止位置
最后还能看到执行的SQL。
可以根据记录的起始位置和时间来恢复数据。
第二种查看方式:
1
mysql> show binlog events in "mysql_bin.000001";



wKiom1ei6Tuy_-K6AAAhPPUUjJI572.jpg
用这种方式查看就简洁明了了。同样也能看到记录的起始位置,执行的SQL等信息。
三、使用bin-log恢复数据
先把刚刚在test库中创建的表students删除掉:
1
2
mysql> drop table students;
Query OK, 0 rows affected (0.01 sec)



删除之后来恢复这个表,有下面两种方法:
①根据操作的时间来恢复。
使用mysqlbinlog查看日志文件,在记录中找到创建这个表的时间是160711 17:24:00,最后删除此表的时间是160711 19:10:38,利用这两个时间点来恢复此表。
1
[iyunv@zhen ~]# /usr/bin/mysqlbinlog --start-date="2016-07-11 17:24:00" --stop-date="2016-07-11 19:10:38" /var/lib/mysql/mysql_bin.000001 | /usr/bin/mysql -uroot -p



如果没有设定数据库密码,则/usr/bin/mysql
亦可以先导出为sql文件,再将sql文件导入到数据库:
1
2
[iyunv@zhen ~]# /usr/bin/mysqlbinlog --start-date="2016-07-11 17:24:00" --stop-date="2016-07-11 19:10:38" /var/lib/mysql/mysql_bin.000001 > /tmp/1.sql
mysql> source /tmp/1.sql;



②根据操作的起止位置来恢复。
wKioL1ei6tbAp_t-AAAh_IWlAvA881.jpg
1
[iyunv@zhen ~]# /usr/bin/mysqlbinlog --start-position=106 --stop-position=373 /var/lib/mysql/mysql_bin.000001 | /usr/bin/mysql -uroot -p



四、小结
1、为了能在发生灾难时恢复数据库,要现在配置文件中添加log_bin=mysql_bin。“mysql_bin”是日志文件的格式,可以自定义;
2、使用“mysql> show master status;”来确定数据库当前使用的是哪个日志文件。



运维网声明 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-253098-1-1.html 上篇帖子: MariaDB与MySQL在一台服务器同时运行 下篇帖子: mysql主从
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

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

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

扫描微信二维码查看详情

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


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


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


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



合作伙伴: 青云cloud

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