[转帖]解析XtraBackup备份MySQL的原理和过程_MySQL, Oracle及数据库讨论区_Weblogic技术|Tuxedo技术|中间件技术|Oracle论坛|JAVA论坛|Linux/Unix技术|hadoop论坛_联动北方技术论坛  
网站首页 | 关于我们 | 服务中心 | 经验交流 | 公司荣誉 | 成功案例 | 合作伙伴 | 联系我们 |
联动北方-国内领先的云技术服务提供商
»  游客             当前位置:  论坛首页 »  自由讨论区 »  MySQL, Oracle及数据库讨论区 »
总帖数
1
每页帖数
101/1页1
返回列表
0
发起投票  发起投票 发新帖子
查看: 4387 | 回复: 0   主题: [转帖]解析XtraBackup备份MySQL的原理和过程        下一篇 
    本主题由 Administrator 于 2019-3-2 21:01:21 移动
white
注册用户
等级:少校
经验:1327
发帖:305
精华:0
注册:2011-7-21
状态:离线
发送短消息息给white 加好友    发送短消息息给white 发消息
发表于: IP:您无权察看 2011-9-8 16:43:20 | [全部帖] [楼主帖] 楼主

XtraBackup是percona公司提供的开源工具,以热备Innodb表著称而被广泛采用。

    XtraBackup对Innodb的备份之所以是热备,无需锁表,是基于Innodb自身的崩溃恢复机制,它首先复制所有的Innodb数据文件,这样复制出来的文件肯定是不一致的,然后对每个文件进行崩溃恢复处理,最终达到一致。就和MySQL在启动Innodb的时候一样,会通过比较数据文件头和redo log文件头信息来检查数据是否是一致的,如果不一致就尝试通过前滚(把redo log中所有提交的事务写入数据文件)和回滚(从数据文件中撤销所有redo log中未提交的事务引起的修改)来使数据达到最终一致。

    XtraBackup在启动的时候会记录一个LSN(log sequence number),然后就把所有的Innodb数据文件复制出来,这样复制出来的数据文件是不一致的,但是XtraBackup会在后台运行一个进程把所有对redo log file的修改记录下来,只要有了这个数据,就能进行崩溃恢复。只所以要额外记录下来,是因为MySQL自身的redo log file是可重用的。

    以上的操作是由xtrabackup二进制程序(比如xtrabackup_55)完成的,如果使用innobackupex 脚本,刚才的步骤完成以后,innobackupex就会去备份MyISAM表和.frm文件,这时要保证数据的一致性就会先锁表了,通过FLUSH TABLES WITH READ LOCK命令锁表然后把文件复制出来,再释放掉这个锁。

    在恢复数据的时候,要经过prepare(recovery)和restore两个步骤。在prepare结束以后,Innodb的表恢复到了复制Innodb文件结束的时间点,这个时间点也就是锁表复制MyISAM表的起点,所以最终数据是一致的。一般我们在恢复的时候执行两次prepare,是因为第二次prepare会帮助我们生成redo log文件,从而加快MySQL数据库启动的速度。

    我们再来看一下实际备份的日志来理解这个过程:

北京联动北方科技有限公司......
北京联动北方科技有限公司
北京联动北方科技有限公司110701 03:29:13  innobackupex: Starting ibbackup with command: xtrabackup_55  --defaults-file="/home/mysql/3306/my.cnf" --backup --suspend-at-end --log-stream --target-dir=./
北京联动北方科技有限公司
北京联动北方科技有限公司innobackupex: Waiting for ibbackup (pid=22334) to suspend
北京联动北方科技有限公司
北京联动北方科技有限公司innobackupex: Suspend file '/home/mysql/3306/data/xtrabackup_suspended'
北京联动北方科技有限公司
北京联动北方科技有限公司xtrabackup: suspend-at-end is enabled.
北京联动北方科技有限公司
北京联动北方科技有限公司xtrabackup: uses posix_fadvise().
北京联动北方科技有限公司
北京联动北方科技有限公司xtrabackup: cd to /home/mysql/3306/data
北京联动北方科技有限公司
北京联动北方科技有限公司xtrabackup: Target instance is assumed as followings.
北京联动北方科技有限公司
北京联动北方科技有限公司xtrabackup:   innodb_data_home_dir = /home/mysql/3306/data
北京联动北方科技有限公司
北京联动北方科技有限公司xtrabackup:   innodb_data_file_path = ibdata1:512M:autoextend
北京联动北方科技有限公司
北京联动北方科技有限公司xtrabackup:   innodb_log_group_home_dir = /home/mysql/3306/redolog
北京联动北方科技有限公司
北京联动北方科技有限公司xtrabackup:   innodb_log_files_in_group = 3
北京联动北方科技有限公司
北京联动北方科技有限公司xtrabackup:   innodb_log_file_size = 134217728
北京联动北方科技有限公司
北京联动北方科技有限公司110701  3:29:13 InnoDB: Using Linux native AIO
北京联动北方科技有限公司
北京联动北方科技有限公司110701  3:29:13  InnoDB: Warning: allocated tablespace 268, old maximum was 0
北京联动北方科技有限公司
北京联动北方科技有限公司xtrabackup: Stream mode.
北京联动北方科技有限公司
北京联动北方科技有限公司>> log scanned up to (2371741708)
北京联动北方科技有限公司
北京联动北方科技有限公司110701 03:29:15  innobackupex: Continuing after ibbackup has suspended
北京联动北方科技有限公司
北京联动北方科技有限公司innobackupex: Starting to backup InnoDB tables and indexes
北京联动北方科技有限公司
北京联动北方科技有限公司innobackupex: from original InnoDB data directory '/home/mysql/3306/data'
北京联动北方科技有限公司
北京联动北方科技有限公司innobackupex: Backing up as tar stream 'ibdata1'
北京联动北方科技有限公司
北京联动北方科技有限公司>> log scanned up to (2371741708)
北京联动北方科技有限公司
北京联动北方科技有限公司>> log scanned up to (2371742105)
北京联动北方科技有限公司
北京联动北方科技有限公司>> log scanned up to (2371742105)
北京联动北方科技有限公司
北京联动北方科技有限公司innobackupex: Backing up file '/home/mysql/3306/data/test/t.ibd'
北京联动北方科技有限公司
北京联动北方科技有限公司>> log scanned up to (2371742115)
北京联动北方科技有限公司
北京联动北方科技有限公司innobackupex: Backing up files '/home/mysql/3306/data/banping/*.ibd' (16 files)
北京联动北方科技有限公司
北京联动北方科技有限公司......
北京联动北方科技有限公司
北京联动北方科技有限公司110701 03:29:35  innobackupex: Connected to database with mysql child process (pid=22630)
北京联动北方科技有限公司
北京联动北方科技有限公司>> log scanned up to (2371742526)
北京联动北方科技有限公司
北京联动北方科技有限公司110701 03:29:39  innobackupex: Starting to lock all tables...
北京联动北方科技有限公司
北京联动北方科技有限公司>> log scanned up to (2371742526)
北京联动北方科技有限公司
北京联动北方科技有限公司>> log scanned up to (2371742526)
北京联动北方科技有限公司
北京联动北方科技有限公司110701 03:29:51  innobackupex: All tables locked and flushed to disk
北京联动北方科技有限公司
北京联动北方科技有限公司110701 03:29:51  innobackupex: Starting to backup .frm, .MRG, .MYD, .MYI,
北京联动北方科技有限公司
北京联动北方科技有限公司innobackupex: .TRG, .TRN, .ARM, .ARZ, .CSM, .CSV and .opt files in
北京联动北方科技有限公司
北京联动北方科技有限公司innobackupex: subdirectories of '/home/mysql/3306/data'
北京联动北方科技有限公司
北京联动北方科技有限公司innobackupex: Backing up files '/home/mysql/3306/data/banping/*.{frm,MYD,MYI,MRG,TRG,TRN,ARM,ARZ,CSM,CSV,opt,par}' (17 files)
北京联动北方科技有限公司
北京联动北方科技有限公司innobackupex: Backing up file '/home/mysql/3306/data/test/t.frm'
北京联动北方科技有限公司
北京联动北方科技有限公司......
北京联动北方科技有限公司
北京联动北方科技有限公司110701 03:29:53  innobackupex: Finished backing up .frm, .MRG, .MYD, .MYI, .TRG, .TRN, .ARM, .ARZ, .CSV, .CSM and .opt files
北京联动北方科技有限公司
北京联动北方科技有限公司innobackupex: Resuming ibbackup
北京联动北方科技有限公司
北京联动北方科技有限公司xtrabackup: The latest check point (for incremental): '2371742526'
北京联动北方科技有限公司
北京联动北方科技有限公司>> log scanned up to (2371742526)
北京联动北方科技有限公司
北京联动北方科技有限公司xtrabackup: Transaction log of lsn (2371741708) to (2371742526) was copied.
北京联动北方科技有限公司
北京联动北方科技有限公司110701 03:29:55  innobackupex: All tables unlocked
北京联动北方科技有限公司
北京联动北方科技有限公司110701 03:29:55  innobackupex: Connection to database server closed
北京联动北方科技有限公司
北京联动北方科技有限公司innobackupex: Backup created in directory '/home/mysql/backup/data/3306'
北京联动北方科技有限公司
北京联动北方科技有限公司innobackupex: MySQL binlog position: filename 'bin.000014', position 309836330mysql,information_schema,performance_schema
北京联动北方科技有限公司
北京联动北方科技有限公司innobackupex: MySQL slave binlog position: master host '', filename '', position
北京联动北方科技有限公司
北京联动北方科技有限公司innobackupex: You must use -i (--ignore-zeros) option for extraction of the tar stream.
北京联动北方科技有限公司
北京联动北方科技有限公司110701 03:29:55  innobackupex: completed OK!

该贴由system转至本版2019-3-2 21:01:21




赞(0)    操作        顶端 
总帖数
1
每页帖数
101/1页1
返回列表
发新帖子
请输入验证码: 点击刷新验证码
您需要登录后才可以回帖 登录 | 注册
技术讨论