注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

网易杭研后台技术中心的博客

 
 
 
 
 

日志

 
 

一起走进MySQL备份身后的故事(篇三 实践中的检验)  

来自郭忆   2014-04-01 23:44:48|  分类: MySQL |举报 |字号 订阅

  下载LOFTER 我的照片书  |
下面我们根据XtraBackup备份的日志,一起再来完整的回顾一遍无锁备份的整个过程。

innobackupex: Using mysql  Ver 14.14 Distrib 5.5.20, for Linux (x86_64) using readline 5.1
innobackupex: Using mysql server version Copyright (c) 2000, 2011, Oracle and/or its affiliates. All rights reserved.

当前XtraBackup的版本信息。
innobbackupex 创建备份日志的目录。

innobackupex: Created backup directory /home/rds-user/rdsAgent/backup

检查MySQL是否正常运行。

140327 18:58:19  innobackupex: Starting mysql with options: --defaults-file='/ebs/rdsAgentInfo/config/my.cnf' --password=xxxxxxxx --user='rdsadmin' --unbuffered --
140327 18:58:19  innobackupex: Connected to database with mysql child process (pid=5470)
140327 18:58:21  innobackupex: Connection to database server closed

innobackupex 调用xtrabackup程序,调用时指定--suspen-at-end参数,该参数会使得xtrabackup在启动时,在--target-dir下创建一个xtrabackup_suspended文件,并一直扫描redo log,一旦发现有新的redo log,立即拷贝出去,避免因为redo log重用覆盖导致更新丢失。该过程会持续到xtrabackup_suspended文件被删除。--suspend-at-end参数实际上是提供了一种方式,使得外部能够控制备份的结束点,而不是在拷贝完innodb的数据文件后则直接退出,本质上是提供了一种外部与xtrabackup协作的机制。

140327 18:58:21  innobackupex: Starting ibbackup with command:xtrabackup_55 

--defaults-file="/ebs/rdsAgentInfo/config/my.cnf" --defaults-group="mysqld" --backup --suspend-at-end --target-dir=/tmp --stream=xbstream
innobackupex: Waiting for ibbackup (pid=5535) to suspend

innobackupex: Suspend file '/tmp/xtrabackup_suspended'

xtrabackup_55 version 2.0.1 for Percona Server 5.5.16 Linux (x86_64) (revision id: undefined)

拷贝复制数据文件的过程中会有大量的磁盘读IO,而Linux操作系统的page cache功能会缓存所有的磁盘读取数据来提升IO的访问性能,而当前的拷贝复制的数据实际上是不需要操作系统缓存的,如果缓存会破坏系统原有的热点,同时由于要write back 脏页,可能造成系统更加繁忙。而Linux操作系统提供了posix_fadvise()接口,man对该接口的描述为:

Programs can use posix_fadvise() to announce an intention to access file data in a specific pattern in the future, thus allowing the kernel to perform appropriate optimizations.

就是说允许应用程序可以操作内核的预读和缓存策略,而这里我们选择通知操作系统后续对文件的读取IO都是不需要进行缓存的。

xtrabackup:uses posix_fadvise(). xtrabackup: cd to /ebs/mysql_data xtrabackup: Target instance is assumed as followings. xtrabackup:   innodb_data_home_dir = ./ xtrabackup:   innodb_data_file_path = ibdata1:512M:autoextend xtrabackup:   innodb_log_group_home_dir = ./ xtrabackup:   innodb_log_files_in_group = 2 xtrabackup:   innodb_log_file_size = 1073741824 140327 18:58:21 InnoDB: Using Linux native AIO

直接写文件,不经过操作系统缓存

xtrabackup:using O_DIRECT

记录当前的LSN,此为备份文件一致的起点,然后不断的扫描redo log,一旦发现redo logLSN推进,则立即将新增长的redo log拷贝出来。

>>log scanned up to (1667227)

以流的方式拷贝默认表空间文件。

[01]Streaming ./ibdata1
>> log scanned up to (1668257)
>> log scanned up to (1669288)
>> log scanned up to (1670323)

[01]...done

开始拷贝其他innodb表的独立表空间文件。

[01]Streaming ./mysql/slave_relay_log_info.ibd
[01]        ...done

[01]Streaming ./Pomelo/Bag.ibd
[01]   ...done

140327 19:01:15  innobackupex: Continuing after ibbackup has suspended

拷贝文件虽然结束,但是还需要拷贝myisam表文件,表定义文件以及获取最后的binlog文件名和位置,所以还需要继续拷贝redo log文件,此时需要加全局锁,后续的拷贝复制过程,会锁定用户的写请求,DMLX锁的读请求。

140327 19:01:15  innobackupex: Starting mysql with options: --defaults-file='/ebs/rdsAgentInfo/config/my.cnf' --password=xxxxxxxx --user='rdsadmin' --unbuffered --
140327 19:01:15  innobackupex: Connected to database with mysql child process (pid=9995)
>> log scanned up to (1671361)

执行Flush tables with read lock!

140327 19:01:17  innobackupex: Starting to lock all tables...
>> log scanned up to (1671361)
>> log scanned up to (1671361)
140327 19:01:27  innobackupex: All tables locked and flushed to disk

开始拷贝表定义文件,myisam表文件。

140327 19:01:27  innobackupex: Starting to backup .frm, .MRG, .MYD, .MYI,

innobackupex: .TRG, .TRN, .ARM, .ARZ, .CSM, .CSV and .opt files in
innobackupex: subdirectories of '/ebs/mysql_data'
innobackupex: Backing up files
'/ebs/mysql_data/mysql/*.{frm,MYD,MYI,MRG,TRG,TRN,ARM,ARZ,CSM,CSV,opt,par}' (79
files)
innobackupex: Backing up file '/ebs/mysql_data/test/aa.frm'
innobackupex: Backing up files '/ebs/mysql_data/performance_schema/*.{frm,MYD,MYI,MRG,TRG,TRN,ARM,ARZ,CSM,CSV,opt,par}'
(18 files)
innobackupex: Backing up file '/ebs/mysql_data/Pomelo/Bag.frm'

140327 19:01:31  innobackupex: Finished backing up .frm, .MRG, .MYD, .MYI,
.TRG, .TRN, .ARM, .ARZ, .CSV, .CSM and .opt files

记录最后写入LSN,此为数据一致的最终点。

innobackupex:Resuming ibbackup
xtrabackup: The latest check point (for incremental): '1671361'
xtrabackup: Stopping log copying thread.

>>log scanned up to (1671361)

由于执行了flush tables with read lock,所有的更新操作会被阻塞,所以此时LSN不会再推进,所以先记录LSN,然后删除xtrabackup_suspended文件,通知xtrabackup拷贝redo log结束。

xtrabackup: Streaming transaction log from a temporary file...
xtrabackup: Done.
xtrabackup: Transaction log of lsn (1667227) to (1671361) was copied.

记录Binlog文件名和位置后,释放flush tables with read lock,备份结束。

140327 19:01:33  innobackupex: All tables unlocked
140327 19:01:33  innobackupex: Connection to database server closed
innobackupex: Backup created in directory '/home/rds-user/rdsAgent/backup'
innobackupex: MySQL binlog position: filename 'mysql-bin.000004', position 1244
140327 19:01:33  innobackupex: completed OK!


  评论这张
 
阅读(1229)| 评论(0)
推荐 转载

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017