论坛首页 综合技术论坛

用Xtrabackup备份MySQL

浏览 3066 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2009-06-26   最后修改:2009-06-26

用Xtrabackup备份MySQL

文档版本: 0.6.2, 更新时间: Wednesday, May 09 2009 9:50

 

http://liuyuanzhi.blogspot.com/2009/05/mysql-backup-with-xtrabackup-06.html

 

Xtrabackup是什么

Xtrabackup 是percona公司(mysqlperformanceblog)的开源项目,目的是实现类似innodb官方的热备份工具InnoDB Hot Backup的功能。但其实Xtrabackup还提供了额外的功能(但也有没实现的功能)。 Xtrabackup中包含两个工具:

  • xtrabackup - 用于热备份innodb, xtradb表的工具,不能备份其他表。
  • innobackupex - 对xtrabackup封装的perl脚本,提供了myisam表备份的能力。

Xtrabackup可以做什么

  • 在线(热)备份整个库的InnoDB, XtraDB表
  • 在xtrabackup的上一次整库备份基础上做增量备份(innodb only)
  • 以流的形式产生备份,可以直接保存到远程机器上(本机硬盘空间不足时很有用)

Xtrabackup如何工作的

  • xtrabackup - 具体原理有待研究。。。
  • innobackupex整库备份
    1. 调 用xtrabackup对innodb表空间文件(这一瞬间的映像Time1)备份,而在这个innodb表备份期间数据库是不加锁的,外部可 以继续往库里增减数据(这才能叫热备份)。而在Time1和Time2这两个时间点之间的改动由一个线程不断地扫innodb log获得(ChangeSet1)。
    2. 锁所有库。
    3. 以直接拷贝的方式备份frm,MYD,MYI,MRG,TRG,TRN,opt格式的文件。
    4. 步骤3中的数据备份完毕时(Time2),停止扫innodb log的线程,把ChangeSet1的数据拷贝到备份中。
    5. 解锁所有库。
    6. 终止挂起,备份完毕。

注意要点

  • 根据innobackupex的原理可知它不是真正的热备份,MyISAM表越少越小就越有利。要利用Xtrabackup的好处就尽量用innodb表。
  • 还原备份前关闭mysql服务;还原备份后检查数据文件权限是否正确。
  • 性能:备份一个数据目录总大小5.6G,其中ibdata 2G,总时间4分钟,锁表时间2.5分钟。如果用mysqldump做这个库的备份锁表时间是5-8倍。

操作

整库备份,恢复(含myisam)

#### 
备份

# 
为了减少备份对服务的影响,可加参数--throttle=<每秒IO次数> / --sleep=<微秒>限制IO

innobackupex --user=root /data/backup/mysql

#### 
恢复

# 
后面的日期目录是备份时由innobackupex创建的

innobackupex --copy-back --defaults-file=/etc/my.cnf /data/backup/mysql/2009-05-06_17-44-37

备份时打包

#### 
备份

innobackupex --user=root --stream=tar ./ | gzip - > /data/backup/mysql/latest.tar.gz

#### 
恢复

cd
 /data/backup/mysql
mkdir tmp
tar xfzi latest.tar.gz -Ctmp
innobackupex --copy-back --defaults-file=/etc/my.cnf /data/backup/mysql/tmp

直接备份到远程机器

innobackupex --stream=tar ./  | ssh user@host cat ">"
  backup.tar
论坛首页 综合技术版

跳转论坛:
Global site tag (gtag.js) - Google Analytics