免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 4580 | 回复: 7

binlog增量备份需要注意的地方,会死人的!!! [复制链接]

论坛徽章:
0
发表于 2010-04-23 00:16 |显示全部楼层
本帖最后由 justin033 于 2010-04-23 00:17 编辑

最近公司备份方式在调整,采用周日全库+每小时binlog增量备份。我这里说下有两点需要注意的地方,体现了mysql在备份功能的差强人意。肯定还有方面,欢迎大家的经验和心得


1. 用到临时表时,恢复binlog需要注意,只能在一个session里恢复所有binlog文件的数据。因为临时表只存在于单个session时间

2. 针对5.0版本的,一定要注意statement binlog模式对create table b select * from a; 只能记录语句而不是数据。如果表a删除了,恢复表b的数据就麻烦了

###刚开始binlog_format为row
create table tbl_a (a int)
/*!*/;
# at 195
#100422 23:23:20 server id 1  end_log_pos 263   Query   thread_id=1     exec_tim
e=0     error_code=0
SET TIMESTAMP=1271949800/*!*/;
BEGIN
/*!*/;
# at 263
# at 307
#100422 23:23:20 server id 1  end_log_pos 307   Table_map: `test`.`tbl_a` mapped
to number 135
#100422 23:23:20 server id 1  end_log_pos 351   Write_rows: table id 135 flags:
STMT_END_F

BINLOG '
6GnQSxMBAAAALAAAADMBAAAAAIcAAAAAAAAABHRlc3QABXRibF9hAAEDAAE=
6GnQSxcBAAAALAAAAF8BAAAQAIcAAAAAAAEAAf/+AQAAAP4CAAAA/gMAAAA=
'/*!*/;

# at 351
#100422 23:23:20 server id 1  end_log_pos 420   Query   thread_id=1     exec_tim
e=0     error_code=0
SET TIMESTAMP=1271949800/*!*/;
COMMIT
/*!*/;
# at 420
#100422 23:24:43 server id 1  end_log_pos 488   Query   thread_id=1     exec_tim
e=0     error_code=0
SET TIMESTAMP=1271949883/*!*/;
BEGIN
/*!*/;
# at 488


###binlog_format没变,通过create table select from来创建表。在row_based mode下。创建的语句,变成先创建表再插入值
#100422 23:24:43 server id 1  end_log_pos 602   Query   thread_id=1     exec_tim
e=0     error_code=0
SET TIMESTAMP=1271949883/*!*/;
CREATE TABLE `tbl_b` (
  `a` int(11) DEFAULT NULL
)

/*!*/;
# at 602
# at 646
#100422 23:24:43 server id 1  end_log_pos 646   Table_map: `test`.`tbl_b` mapped
to number 136
#100422 23:24:43 server id 1  end_log_pos 690   Write_rows: table id 136 flags:
STMT_END_F

BINLOG '
O2rQSxMBAAAALAAAAIYCAAAAAIgAAAAAAAAABHRlc3QABXRibF9iAAEDAAE=
O2rQSxcBAAAALAAAALICAAAQAIgAAAAAAAEAAf/+AQAAAP4CAAAA/gMAAAA=
'/*!*/;

# at 690
#100422 23:24:43 server id 1  end_log_pos 759   Query   thread_id=1     exec_tim
e=0     error_code=0
SET TIMESTAMP=1271949883/*!*/;
COMMIT
/*!*/;

###接着把session的binlog_format设置成statement,通过create table select from来创建表。对create table b select * from a; 只能记录语句而不是数据
# at 759
#100422 23:27:57 server id 1  end_log_pos 860   Query   thread_id=1     exec_tim
e=1     error_code=0
SET TIMESTAMP=1271950077/*!*/;
create table tbl_c select * from tbl_a
/*!*/;

###最后把session的binlog_format设置成mixed,通过create table select from来创建表。对create table b select * from a; 只能记录语句而不是数据
# at 860
#100422 23:30:04 server id 1  end_log_pos 961   Query   thread_id=1     exec_tim
e=0     error_code=0
SET TIMESTAMP=1271950204/*!*/;
create table tbl_d select * from tbl_a
/*!*/;
DELIMITER ;
# End of log file
ROLLBACK /* added by mysqlbinlog */;
/*!50003 SET COMPLETION_TYPE=@OLD_COMPLETION_TYPE*/;

论坛徽章:
6
水瓶座
日期:2014-06-04 03:34:37水瓶座
日期:2014-06-17 13:20:31数据库技术版块每日发帖之星
日期:2016-07-09 06:20:00数据库技术版块每日发帖之星
日期:2016-07-17 06:20:00数据库技术版块每日发帖之星
日期:2016-08-01 06:20:00数据库技术版块每日发帖之星
日期:2016-08-04 06:20:00
发表于 2010-04-24 16:44 |显示全部楼层
怎么个死法?

论坛徽章:
0
发表于 2010-04-25 11:38 |显示全部楼层
1. 用到临时表时,恢复binlog需要注意,只能在一个session里恢复所有binlog文件的数据。因为临时表只存在于单个session时间

--- 如果用到临时表的事务数据跨了多个binlog文件,就得用一个session恢复此多个binlog文件


2. 针对5.0版本的,一定要注意statement binlog模式对create table b select * from a; 只能记录语句而不是数据。如果表a删除了,恢复表b的数据就麻烦了

--- 如果是statement based binlog,这样种情况你就得先恢复a表再恢复b表

论坛徽章:
6
水瓶座
日期:2014-06-04 03:34:37水瓶座
日期:2014-06-17 13:20:31数据库技术版块每日发帖之星
日期:2016-07-09 06:20:00数据库技术版块每日发帖之星
日期:2016-07-17 06:20:00数据库技术版块每日发帖之星
日期:2016-08-01 06:20:00数据库技术版块每日发帖之星
日期:2016-08-04 06:20:00
发表于 2010-04-26 17:38 |显示全部楼层
回复 3# justin033


    create table b select * from a; 只能记录语句而不是数据。如果表a删除了,恢复表b的数据就麻烦了


表a被删除,难道表b也被删除了?


这样的话,和这条 create table b select * from a语句就没有关系了。


直接转到另外一个问题: 如何利用日志恢复误操作导致的表b被删除?

论坛徽章:
0
发表于 2010-04-27 13:30 |显示全部楼层
分析的很好,鼓励下。

论坛徽章:
0
发表于 2010-04-29 16:27 |显示全部楼层
楼主牛啊。这些天一直在研究MYSQL的增量备份,不知道大家有没有好的方法

论坛徽章:
8
综合交流区版块每周发帖之星
日期:2015-12-02 15:03:53数据库技术版块每日发帖之星
日期:2015-10-02 06:20:00IT运维版块每日发帖之星
日期:2015-10-02 06:20:00IT运维版块每日发帖之星
日期:2015-09-14 06:20:00金牛座
日期:2014-10-10 11:23:34CU十二周年纪念徽章
日期:2013-10-24 15:41:34酉鸡
日期:2013-10-19 10:17:1315-16赛季CBA联赛之北京
日期:2017-03-06 15:12:44
发表于 2010-04-29 16:54 |显示全部楼层
LZ很不错

最近学习的尽头很足啊,希望能多多记笔记,然后共享出来

论坛徽章:
0
发表于 2010-12-13 17:01 |显示全部楼层
临时表的意思??  恢复的话 还得如何操作??
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP