xtrabackup备份恢复测试 -转

Chinaunix首页 |  论坛 |  认证专区 |  博客 登录 | 注册

博文
    
博主

王恒-Henryhengwang.blog.chinaunix.net

我的项目:https://github.com/HengWang/

首页 |  博文目录 |  关于我

king_wangheng

  • 博客访问: 486455
  • 博文数量: 117
  • 博客积分: 1715
  • 博客等级: 上尉
  • 技术积分: 3115
  • 用 户 组: 普通用户
  • 注册时间: 2012-04-18 18:42

个人简介

阿里巴巴DBA,原去哪儿网DBA。专注于MySQL源码研究、DBA运维、CGroup虚拟化及Linux Kernel源码研究等。 github:https://github.com/HengWang/ Email:[email protected] 微博 :@王恒-Henry QQ :506437736

文章分类

全部博文(117)

文章存档

2014年(3)

2013年(39)

2012年(75)

我的朋友

最近访客

微信关注

IT168企业级官微

微信号:IT168qiye


系统架构师大会

微信号:SACC2013

订阅

推荐博文

热词专题

xtrabackup备份恢复测试 2012-06-21 17:59:18

分类: Mysql/postgreSQL

测试准备

1、安装xtrabackup工具

以下测试安装xtrabackup备份恢复工具的二进制包,进行测试。安装的路径为mysql安装路径,本次测试mysql的安装路径为:/home/q/percona-server/。


tar -xzf percona-xtraback-2.0.0-x86-64.tar.gz

cp percona-xtrabackup-2.0.0/bin/* /home/q/percona-server/bin

2、创建备份用户

创建备份用户[email protected],xtraback只能用于本地操作,故只授权本地操作。


GRANT RELOAD, LOCK TABLES, REPLICATION CLIENT ON *.* TO [email protected];

3、声明PATH环境变量

为xtrabackup备份恢复工具添加到PATH路径中。


export PATH=$PATH:/home/q/percona-server/bin

4、创建测试库

创建测试库backup_test,测试表test。


mysql -uroot -S/tmp/mysql.sock -e‘create database backup_test;‘

mysql -uroot -S/tmp/mysql.sock -e‘create table backup_test.test (id int);‘

mysql -uroot -S/tmp/mysql.sock -e‘insert into backup_test.test values(1),(2),(3),(4),(5);‘

测试innodb

1、全备份测试

全备份测试主要通过测试以下几个场景,对数据备份和恢复进行验证。

1)备份全库,恢复进行测试。

进行全库备份:


innobackupex --defaults-file=/home/q/percona-server/etc/my.cnf --user=backup backup/

关闭数据库服务:


kill -9 $(ps -ef|grep "mysql"|gawk ‘$0 !~/grep/ {print $2}‘ |tr -s ‘\n‘ ‘ ‘)

删除当前数据文件:


rm -rf /home/q/percona-server/data/*

恢复日志文件:


innobackupex --defaults-file=/home/q/percona-server/etc/my.cnf --apply-log --user=backup backup/ <DATE_TIME>

恢复数据文件:


innobackupex --defaults-file=/home/q/percona-server/etc/my.cnf --copy-back --user=backup backup/<DATE_TIME>

数据验证:


mysqld_safe --defaults-file=/home/q/percona-server/etc/my.cnf &

mysql -uroot -S/tmp/mysql.sock -e‘select * from backup_test.test;‘

测试结果:

经验证,备份恢复正确。

2)修改表结构,备份全库,恢复进行测试。

修改数据库表结构:


mysql -uroot -S/tmp/mysql.sock -e ‘alter table backup_test.test add name varchar(20) default "null";‘

进行全库备份:


innobackupex --defaults-file=/home/q/percona-server/etc/my.cnf --user=backup backup/

关闭数据库服务:


kill -9 $(ps -ef|grep "mysql"|gawk ‘$0 !~/grep/ {print $2}‘ |tr -s ‘\n‘ ‘ ‘)

删除当前数据文件:


rm -rf /home/q/percona-server/data/*

恢复日志文件:


innobackupex --defaults-file=/home/q/percona-server/etc/my.cnf --apply-log --user=backup backup/ <DATE_TIME>

恢复数据文件:


innobackupex --defaults-file=/home/q/percona-server/etc/my.cnf --copy-back --user=backup backup/<DATE_TIME>

数据验证:


mysqld_safe --defaults-file=/home/q/percona-server/etc/my.cnf &

mysql -uroot -S/tmp/mysql.sock -e‘select * from backup_test.test;‘

测试结果:

经验证,备份恢复正确。

3)备份某个库,恢复测试

备份backup_test库


innobackupex --defaults-file=/home/q/percona-server/etc/my.cnf --database=backup_test --user=backup backup/

关闭数据库服务:


kill -9 $(ps -ef|grep "mysql"|gawk ‘$0 !~/grep/ {print $2}‘ |tr -s ‘\n‘ ‘ ‘)

修改当前数据文件:


mv /home/q/percona-server/data /home/q/percona-server/databak

mkdir /home/q/percona-server/data

恢复日志文件:


innobackupex --defaults-file=/home/q/percona-server/etc/my.cnf --apply-log --database=backup_test --user=backup backup/<DATE_TIME>

恢复数据文件:


innobackupex --defaults-file=/home/q/percona-server/etc/my.cnf --copy-back --database=backup_test --user=backup backup/<DATE_TIME>

cp /home/q/percona-server/databak/* /home/q/percona-server/data(仅拷贝不在data中的文件)

数据验证:


mysqld_safe --defaults-file=/home/q/percona-server/etc/my.cnf &

mysql -uroot -S/tmp/mysql.sock -e‘select * from backup_test.test;‘

测试结果:

经验证,备份单个库没有问题。存在的不足是,恢复的时候,数据目录必须为空。也就是说,在恢复阶段,需要将现有的数据目录改名为临时目录;在恢复之后,将原数据目录(现临时目录)下的其他库的内容拷贝到数据目录下即可。

4)备份单个表,恢复测试

备份backup_test库


innobackupex --defaults-file=/home/q/percona-server/etc/my.cnf --database=backup_test.test --user=backup backup/

关闭数据库服务:


kill -9 $(ps -ef|grep "mysql"|gawk ‘$0 !~/grep/ {print $2}‘ |tr -s ‘\n‘ ‘ ‘)

修改当前数据文件:


mv /home/q/percona-server/data /home/q/percona-server/databak

mkdir /home/q/percona-server/data

恢复日志文件:


innobackupex --defaults-file=/home/q/percona-server/etc/my.cnf --apply-log --user=backup backup/ <DATE_TIME>

恢复数据文件:


innobackupex --defaults-file=/home/q/percona-server/etc/my.cnf --copy-back --user=backup backup/<DATE_TIME>

数据验证:


mysqld_safe --defaults-file=/home/q/percona-server/etc/my.cnf &

mysql -uroot -S/tmp/mysql.sock -e‘select * from backup_test.test;‘

测试结果:

经验证,备份单个表没有问题。存在的不足是,恢复的时候,数据目录必须为空。也就是说,在恢复阶段,需要将现有的数据目录改名为临时目录;在恢复之后,将原数据目录(现临时目录)下的其他库的内容拷贝到数据目录下即可。

5innodb_file_per_table参数验证

修改配置文件

在配置文件中添加innodb_file_per_table配置参数。

重启数据库server


kill -9 $(ps -ef|grep "mysql"|gawk ‘$0 !~/grep/ {print $2}‘ |tr -s ‘\n‘ ‘ ‘)

mysqld_safe --defaults-file=/home/q/percona-server/etc/my.cnf &

创建测试库backup_test


mysql -uroot -S/tmp/mysql.sock -e‘create database backup_test;‘

mysql -uroot -S/tmp/mysql.sock -e‘create table backup_test.test (id int);‘

mysql -uroot -S/tmp/mysql.sock -e‘insert into backup_test.test values(1),(2),(3),(4),(5);‘

备份backup_test库


innobackupex --defaults-file=/home/q/percona-server/etc/my.cnf --database=backup_test.test --user=backup backup/

关闭数据库服务:


kill -9 $(ps -ef|grep "mysql"|gawk ‘$0 !~/grep/ {print $2}‘ |tr -s ‘\n‘ ‘ ‘)

修改当前数据文件:


mv /home/q/percona-server/data /home/q/percona-server/databak

mkdir /home/q/percona-server/data

恢复日志文件:


innobackupex --defaults-file=/home/q/percona-server/etc/my.cnf --apply-log --user=backup backup/ <DATE_TIME>

恢复数据文件:


innobackupex --defaults-file=/home/q/percona-server/etc/my.cnf --copy-back --user=backup backup/<DATE_TIME>

数据验证:


mysqld_safe --defaults-file=/home/q/percona-server/etc/my.cnf &

mysql -uroot -S/tmp/mysql.sock -e‘select * from backup_test.test;‘

测试结果:

经验证,备份单个库没有问题。存在的不足是,恢复的时候,数据目录必须为空。也就是说,在恢复阶段,需要将现有的数据目录改名为临时目录;在恢复之后,将原数据目录(现临时目录)下的其他库的内容拷贝到数据目录下即可。

2、增量备份测试

增量备份测试主要通过测试以下几个场景,对数据备份和恢复进行验证。

1)全库备份,创建数据库,增量备份,恢复测试

全库备份


innobackupex --defaults-file=/home/q/percona-server/etc/my.cnf --user=backup backup/

创建数据库


mysql -uroot -S/tmp/mysql.sock -e‘create database backup_test_tmp;‘

mysql -uroot -S/tmp/mysql.sock -e‘create table backup_test_tmp.test (id int);‘

mysql -uroot -S/tmp/mysql.sock -e‘insert into backup_test_tmp.test values(1),(2),(3),(4),(5);‘

增量备份


innobackupex --defaults-file=/home/q/percona-server/etc/my.cnf --user=backup --incremental --incremental-basedir=backup/<DATE_TIME> backup/

关闭数据库服务:


kill -9 $(ps -ef|grep "mysql"|gawk ‘$0 !~/grep/ {print $2}‘ |tr -s ‘\n‘ ‘ ‘)

删除当前数据文件:


rm -rf /home/q/percona-server/data/*

恢复全备份日志文件:


innobackupex --defaults-file=/home/q/percona-server/etc/my.cnf --apply-log --user=backup backup/ <DATE_TIME>

恢复增量备份日志文件:


innobackupex --defaults-file=/home/q/percona-server/etc/my.cnf --apply-log --user=backup backup/ <DATE_TIME> --incremental-dir=backup/<DATE_TIME_INC>

恢复增量备份数据文件:


innobackupex --defaults-file=/home/q/percona-server/etc/my.cnf --copy-back --user=backup backup/<DATE_TIME>

数据验证:


mysqld_safe --defaults-file=/home/q/percona-server/etc/my.cnf &

mysql -uroot -S/tmp/mysql.sock -e‘select * from backup_test.test;‘

mysql -uroot -S/tmp/mysql.sock -e‘select * from backup_test_tmp.test;‘

测试结果:

经验证,备份恢复正确。

2)全库备份,修改数据表结构,增量备份,恢复测试

全库备份


innobackupex --defaults-file=/home/q/percona-server/etc/my.cnf --user=backup backup/

修改数据表结构


mysql -uroot -S/tmp/mysql.sock -e ‘alter table backup_test.test add email varchar(20) default "null";‘

增量备份


innobackupex --defaults-file=/home/q/percona-server/etc/my.cnf --user=backup --incremental --incremental-basedir=backup/<DATE_TIME> backup/

关闭数据库服务:


kill -9 $(ps -ef|grep "mysql"|gawk ‘$0 !~/grep/ {print $2}‘ |tr -s ‘\n‘ ‘ ‘)

删除当前数据文件:


rm -rf /home/q/percona-server/data/*

恢复全备份日志文件:


innobackupex --defaults-file=/home/q/percona-server/etc/my.cnf --apply-log --user=backup backup/<DATE_TIME>

恢复增量备份日志文件:


innobackupex --defaults-file=/home/q/percona-server/etc/my.cnf --apply-log --user=backup backup/ <DATE_TIME> --incremental-dir=backup/<DATE_TIME_INC>

恢复增量备份数据文件:


innobackupex --defaults-file=/home/q/percona-server/etc/my.cnf --copy-back --user=backup backup/<DATE_TIME>

数据验证:


mysqld_safe --defaults-file=/home/q/percona-server/etc/my.cnf &

mysql -uroot -S/tmp/mysql.sock -e‘select * from backup_test.test;‘

测试结果:

经验证,增量备份没有问题。存在的不足是,恢复的时候,首先数据目录必须为空,其次,恢复的时候需要单独拷贝增量备份的表结构。也就是说,在恢复阶段,需要将数据目录清空;数据恢复后,需要单独拷贝增量备份文件夹下的表结构。

3)全库备份,创建数据库,增量备份,修改表结构,增量备份,恢复测试

全库备份


innobackupex --defaults-file=/home/q/percona-server/etc/my.cnf --user=backup backup/

创建数据库


mysql -uroot -S/tmp/mysql.sock -e‘create database backup_test_tmp;‘

mysql -uroot -S/tmp/mysql.sock -e‘create table backup_test_tmp.test (id int);‘

mysql -uroot -S/tmp/mysql.sock -e‘insert into backup_test_tmp.test values(1),(2),(3),(4),(5);‘

增量备份


innobackupex --defaults-file=/home/q/percona-server/etc/my.cnf --user=backup --incremental --incremental-basedir=backup/<DATE_TIME> backup/

修改数据表结构


mysql -uroot -S/tmp/mysql.sock -e ‘alter table backup_test.test add email varchar(20) default "null";‘

增量备份


innobackupex --defaults-file=/home/q/percona-server/etc/my.cnf --user=backup --incremental --incremental-basedir=backup/<DATE_TIME> backup/

关闭数据库服务:


kill -9 $(ps -ef|grep "mysql"|gawk ‘$0 !~/grep/ {print $2}‘ |tr -s ‘\n‘ ‘ ‘)

删除当前数据文件:


rm -rf /home/q/percona-server/data/*

恢复全备份日志文件:


innobackupex --defaults-file=/home/q/percona-server/etc/my.cnf --apply-log --user=backup backup/ <DATE_TIME>

恢复增量备份1日志文件:


innobackupex --defaults-file=/home/q/percona-server/etc/my.cnf --apply-log --user=backup backup/ <DATE_TIME> --incremental-dir=backup/<DATE_TIME_INC1>

恢复增量备份2日志文件:


innobackupex --defaults-file=/home/q/percona-server/etc/my.cnf --apply-log --user=backup backup/ <DATE_TIME> --incremental-dir=backup/<DATE_TIME_INC2>

恢复增量备份数据文件:


innobackupex --defaults-file=/home/q/percona-server/etc/my.cnf --copy-back --user=backup backup/<DATE_TIME>

数据验证:


mysqld_safe --defaults-file=/home/q/percona-server/etc/my.cnf &

mysql -uroot -S/tmp/mysql.sock -e‘select * from backup_test.test;‘

测试结果:

经验证,增量备份没有问题。存在的不足是,恢复的时候,首先数据目录必须为空,其次,恢复的时候需要单独拷贝最后一次增量备份的表结构。也就是说,在恢复阶段,需要将数据目录清空;数据恢复后,需要单独拷贝最后一次增量备份文件夹下的表结构。

4)全备份某库,修改库,增量备份,恢复测试

全备份某库


innobackupex --defaults-file=/home/q/percona-server/etc/my.cnf --user=backup --database=backup_test backup/

修改库


mysql -uroot -S/tmp/mysql.sock -e ‘alter table backup_test.test add address varchar(20) default "null";‘

增量备份


innobackupex --defaults-file=/home/q/percona-server/etc/my.cnf --user=backup --database=backup_test --incremental --incremental-basedir=backup/<DATE_TIME> backup/

关闭数据库服务:


kill -9 $(ps -ef|grep "mysql"|gawk ‘$0 !~/grep/ {print $2}‘ |tr -s ‘\n‘ ‘ ‘)

删除当前数据文件:


rm -rf /home/q/percona-server/data/backup_test/*

恢复全备份日志文件:


innobackupex --defaults-file=/home/q/percona-server/etc/my.cnf --database=backup_test --apply-log --user=backup backup/ <DATE_TIME>

恢复增量备份日志文件:


innobackupex --defaults-file=/home/q/percona-server/etc/my.cnf --database=backup_test --apply-log --user=backup backup/ <DATE_TIME> --incremental-dir=backup/<DATE_TIME_INC>

恢复增量备份数据文件:


innobackupex --defaults-file=/home/q/percona-server/etc/my.cnf --database=backup_test --copy-back --user=backup backup/<DATE_TIME>

数据验证:


mysqld_safe --defaults-file=/home/q/percona-server/etc/my.cnf &

mysql -uroot -S/tmp/mysql.sock -e‘select * from backup_test.test;‘

测试结果:

经验证,增量备份没有问题。存在的不足是,恢复的时候,首先数据目录必须为空,其次,恢复的时候需要单独拷贝增量备份的表结构。也就是说,在恢复阶段,需要将现有的数据目录改名为临时目录;在恢复之后,将原数据目录(现临时目录)下的其他库的内容拷贝到数据目录下即可。数据恢复后,还需要单独拷贝增量备份文件夹下的表结构。

5innodb_file_per_table参数验证

修改配置文件

在配置文件中添加innodb_file_per_table配置参数。

重启数据库server


kill -9 $(ps -ef|grep "mysql"|gawk ‘$0 !~/grep/ {print $2}‘ |tr -s ‘\n‘ ‘ ‘)

mysqld_safe --defaults-file=/home/q/percona-server/etc/my.cnf &

创建测试库backup_test


mysql -uroot -S/tmp/mysql.sock -e‘create database backup_test;‘

mysql -uroot -S/tmp/mysql.sock -e‘create table backup_test.test (id int);‘

mysql -uroot -S/tmp/mysql.sock -e‘insert into backup_test.test values(1),(2),(3),(4),(5);‘

备份backup_test库


innobackupex --defaults-file=/home/q/percona-server/etc/my.cnf --database=backup_test.test --user=backup backup/

修改库


mysql -uroot -S/tmp/mysql.sock -e ‘alter table backup_test.test add phone varchar(20) default "null";‘

增量备份


innobackupex --defaults-file=/home/q/percona-server/etc/my.cnf --user=backup --database=backup_test --incremental --incremental-basedir=backup/<DATE_TIME> backup/

关闭数据库服务:


kill -9 $(ps -ef|grep "mysql"|gawk ‘$0 !~/grep/ {print $2}‘ |tr -s ‘\n‘ ‘ ‘)

删除当前数据文件:


rm -rf /home/q/percona-server/data/backup_test/*

恢复全备份日志文件:


innobackupex --defaults-file=/home/q/percona-server/etc/my.cnf --database=backup_test --apply-log --user=backup backup/ <DATE_TIME>

恢复增量备份日志文件:


innobackupex --defaults-file=/home/q/percona-server/etc/my.cnf --database=backup_test --apply-log --user=backup backup/ <DATE_TIME> --incremental-dir=backup/<DATE_TIME_INC>

恢复增量备份数据文件:


innobackupex --defaults-file=/home/q/percona-server/etc/my.cnf --database=backup_test --copy-back --user=backup backup/<DATE_TIME>

数据验证:


mysqld_safe --defaults-file=/home/q/percona-server/etc/my.cnf &

mysql -uroot -S/tmp/mysql.sock -e‘select * from backup_test.test;‘

测试结果:

经验证,增量备份没有问题。存在的不足是,恢复的时候,首先数据目录必须为空,其次,恢复的时候需要单独拷贝增量备份的表结构。也就是说,在恢复阶段,需要将现有的数据目录改名为临时目录;在恢复之后,将原数据目录(现临时目录)下的其他库的内容拷贝到数据目录下即可。数据恢复后,还需要单独拷贝增量备份文件夹下的表结构。

3、差分备份测试

差分备份实际是一次增量备份操作,该过程包含在增量备份测试中,再次不再重复测试。

测试myisam

1、全备份测试

创建myisam数据表


mysql -uroot -S/tmp/mysql.sock -e‘create table backup_test.test_myisam (id int) engine=myisam;‘

mysql -uroot -S/tmp/mysql.sock -e‘insert into backup_test.test_myisam values(1),(2),(3),(4),(5);‘

全备份数据表


innobackupex --defaults-file=/home/q/percona-server/etc/my.cnf --user=backup --database=backup_test.test_myisam backup/

关闭数据库服务:


kill -9 $(ps -ef|grep "mysql"|gawk ‘$0 !~/grep/ {print $2}‘ |tr -s ‘\n‘ ‘ ‘)

删除当前数据文件:


rm -rf /home/q/percona-server/data/backup_test/test_myisam*

恢复日志文件:


innobackupex --defaults-file=/home/q/percona-server/etc/my.cnf --database=backup_test.test_myisam --apply-log --user=backup backup/ <DATE_TIME>

恢复数据文件:


innobackupex --defaults-file=/home/q/percona-server/etc/my.cnf --database=backup_test.test_myisam --copy-back --user=backup backup/<DATE_TIME>

数据验证:


mysqld_safe --defaults-file=/home/q/percona-server/etc/my.cnf &

mysql -uroot -S/tmp/mysql.sock -e‘select * from backup_test.test_myisam;‘

测试结果:

经验证,备份恢复正确。

2、增量备份测试

全备份数据表


innobackupex --defaults-file=/home/q/percona-server/etc/my.cnf --user=backup --database=backup_test.test_myisam backup/

修改数据表结构


mysql -uroot -S/tmp/mysql.sock -e ‘alter table backup_test.test_myisam add name varchar(20) default "null";‘

增量备份


innobackupex --defaults-file=/home/q/percona-server/etc/my.cnf --user=backup --database=backup_test.test_myisam --incremental --incremental-basedir=backup/<DATE_TIME> backup/

关闭数据库服务:


kill -9 $(ps -ef|grep "mysql"|gawk ‘$0 !~/grep/ {print $2}‘ |tr -s ‘\n‘ ‘ ‘)

删除当前数据文件:


rm -rf /home/q/percona-server/data/backup_test/test_myisam*

恢复全备份日志文件:


innobackupex --defaults-file=/home/q/percona-server/etc/my.cnf --database=backup_test.test_myisam --apply-log --user=backup backup/ <DATE_TIME>

恢复增量备份日志文件


innobackupex --defaults-file=/home/q/percona-server/etc/my.cnf --database=backup_test.test_myisam --apply-log --user=backup backup/ <DATE_TIME> --incremental-dir=backup/<DATE_TIME_INC>

恢复数据文件:


innobackupex --defaults-file=/home/q/percona-server/etc/my.cnf --database=backup_test.test_myisam --copy-back --user=backup backup/<DATE_TIME>

数据验证:


mysqld_safe --defaults-file=/home/q/percona-server/etc/my.cnf &

mysql -uroot -S/tmp/mysql.sock -e‘select * from backup_test.test_myisam;‘

测试结果:

经验证,备份恢复正确。

3、差分备份测试

差分备份实际是一次增量备份操作,该过程包含在增量备份测试中,再次不再重复测试。

测试总结

设置以上场景,经测试,发现xtrabackup备份恢复工具仍然存在一些潜在的问题,但是这些问题完全可以通过规避或者完善脚本的方式,来改进和避免存在的问题。

实现原理

对于InnoDB,XtraBackup基于InnoDB的crash-recovery功能进行备份。

crash-recovery是这样的:InnoDB维护了一个redo log,又称为 transaction log,也叫事务日志,它包含了InnoDB数据的所有改动情况。InnoDB启动的时候先去检查datafile和transaction log,然后应用所有已提交的事务并回滚所有未提交的事务。

XtraBackup在备份的时候并不锁定表,而是一页一页地复制InnoDB的数据,与此同时,XtraBackup还有另外一个线程监视着transactions log,一旦log发生变化,就把变化过的log pages复制走(因为transactions log文件大小有限,写满之后,就会从头再开始写,新数据可能会覆盖到旧的数据,所以一旦变化就要立刻复制走)。在全部数据文件复制完成之后,停止复制logfile。

XtraBackup采用了其内置的InnoDB库以read-write模式打开InnoDB的数据文件,然后每次读写1MB(1MB/16KB=64page)的数据,一页一页地遍历,同时用InnoDB的buf_page_is_corrupted()函数检查此页的数据是否正常,如果正常则进行复制,如不正常则重新读取,最多重读10次,如果还是失败,则备份失败退出。复制transactions log的原理也是一样的,只不过每次读写512KB(512KB/16KB=32page)的数据。

由于XtraBackup其内置的InnoDB库打开文件的时候是rw的,所以运行XtraBackup的用户,必须对InnoDB的数据文件具有读写权限。

由于XtraBackup要从文件系统中复制大量的数据,所以它尽可能地使用posix_fadvise(),来告诉OS不要缓存读取到的数据(因为这些数据不会重用到了),从而提升性能。如果要缓存的话,大量的数据会对OS的虚拟内存造成很大的压力,其它进程(如mysqld)很有可能会被swap出去,这样就出问题了。同时,XtraBackup在读取数据的时候还尽可能地预读。

由于不锁表,所以复制出来的数据是不一致的,数据的一致性是在恢复的时候使用crash-recovery进行实现的。

对于MyISAM,XtraBackup还是首先锁定所有的表,然后复制所有文件。

应用场景

基于以上原理,xtrabackup备份恢复工具比较适合数据增长型数据库。对于数据增长型的库,由于数据的增长导致数据备份和恢复的空间和时间上的压力较大。而xtrabackup有增量备份的功能,在短时间内可以通过进行增量备份来保证数据的安全性。而长期来看,仍然需要间断性的进行全库备份。此外,由于xtrabackup对innodb的数据库不进行锁定,因此对要求不影响线上服务的数据备份和恢复较适合。

而对于数据量无明显增长,且更新为主的数据更新型数据库,xtrabackup显得过于复杂。xtrabackup操作反而不如mysqldump的性能高。

建议

通过以上测试,有以下建议,供DBA参考:

1、改进和完善innobackupex脚本,或者编写备份恢复脚本。避免备份中存在的不足和可能出现的问题。

2、建议根据数据库的类型,指定周密的备份恢复策略。

参考:

http://blog.csdn.net/yongsheng0550/article/details/6682162

阅读(1998) | 评论(0) | 转发(3) |

1

上一篇:MySQL查询优化器源码分析

下一篇:xtrabackup参数说明

相关热门文章

给主人留下些什么吧!~~

评论热议

请登录后评论。

登录 注册

关于我们 | 关于IT168 | 联系方式 | 广告合作 | 法律声明 | 免费注册

Copyright 2001-2010 ChinaUnix.net All Rights Reserved 北京皓辰网域网络信息技术有限公司. 版权所有

感谢所有关心和支持过ChinaUnix的朋友们

京ICP证041476号 京ICP证060528号

时间: 2024-12-05 08:09:59

xtrabackup备份恢复测试 -转的相关文章

xtrabackup 备份mysql数据库三: innobackupex 测试一个全量和两个增量的备份恢复测试

## 查看当前库中表的数据 ([email protected]) [test]>select count(*) from t_innodb; +----------+ | count(*) | +----------+ |        0 | +----------+ 1 row in set (0.00 sec) ## 执行插入数据操作,该操作在全备之后执行完成 ([email protected]) [test]>call addTest(100000,0); ## 执行全库备份 #

pg_rman备份恢复测试

环境描述 1.OS CentOS Linux release 7.2.1511 (Core) X64 2.PostgreSQL PostgreSQL 9.6.1 3.pg_rman pg_rman-1.3.3-pg96.tar.gz v1.3.3 注意:请下载版本对应的源码包. https://github.com/ossc-db/pg_rman/releases/download/v1.3.3/pg_rman-1.3.3-pg96.tar.gz pg_rman-1.3.3.tar.gz(此源码

xtrabackup 备份恢复测试过程

参考: http://blog.csdn.net/justdb/article/details/17054579# MySQL备份与恢复之percona-xtrabackup软件的使用 http://blog.csdn.net/justdb/article/details/17054667# MySQL备份与恢复之percona-xtrabackup实现增量备份及恢复 http://devliangel.blog.51cto.com/469347/1374232# 使用innobackupex在

MySQL之Xtrabackup备份恢复数据库-简介

一.Xtrabackup介绍 1.Xtrabackup是什么 Xtrabackup 是一个对InnoDB做数据备份的工具,支持在线热备份(备份时不影响数据读写),是商业备份工具InnoDB Hotbackup的一个很好的替代品. Xtrabackup 有两个主要的工具:xtrabackup.innobackupex xtrabackup只能备份InnoDB和XtraDB两种数据表,而不能备份MyISAM数据表. innobackupex是参考了InnoDB Hotbackup的innoback脚

XtraBackup备份恢复模拟实践

XtraBackup是Percona公司开发的一款很好用的数据备份工具,支持对InnoDB引擎数据的热备份,对MyISAM引擎的数据做备份时需要锁表,详细信息参见官网或其他资源.[XtracBackup官网] 1. 实验环境 1.1 系统环境: 操作系统:CentOS 6.5 64位 主机地址:10.0.0.26 主机名:mysql01 mysql版本:mysql-5.6.36 XtraBackup版本:2.4.12 2. 软件安装 2.1 安装mysql服务 MySQL服务详细安装过程请参考上

使用xtrabackup备份恢复Mariadb数据库

使用xtrabackup进行备份 Xtrabackup简介 Xtrabackup是由percona提供的mysql数据库备份工具,据官方介绍,这也是世界上惟一一款开源的能够对innodb和xtradb数据库进行热备的工具.特点: (1)备份过程快速.可靠: (2)备份过程不会打断正在执行的事务: (3)能够基于压缩等功能节约磁盘空间和流量: (4)自动实现备份检验: (5)还原速度快: 官方介绍和下载地址:https://www.percona.com/software/percona-xtra

innobackupex xtrabackup 备份恢复mysql数据

复制地址:https://www.linuxyw.com/download/xtrabackup.pdf http://www.linuxyw.com Email:[email protected] xtrabackup 对 MySQL 数据库的备份及恢复 此文档,只是简单地研究了下,用于数据库全备和增备,效果不错 因为目前对此软件未有需求,所以,文档并不完善,等有时间了,再进行完善吧 此文档资料,互联网收集而成 本人博客: http://www.linuxyw.com xtrabackup x

MySQL多字符集备份恢复测试

目的:测试单mysql实例在多字符集的数据库环境中备份恢复的乱码问题 准备工作: CREATE DATABASE `utf8_db` /*!40100 DEFAULT CHARACTER SET utf8 */; CREATE DATABASE `latin_db` /*!40100 DEFAULT CHARACTER SET latin1*/; CREATE TABLE utf8_db.`utab` (  `id` int(11) NOT NULL AUTO_INCREMENT,  `name

Xtrabackup 备份恢复

一.Xtrabackup 说明及安装 一.Xtrabackup 说明及安装 二.Xtrabackup 全备份及恢复 三.Xtrabackup 全备和增量备份及恢复 四.Xtrabackup 部分全备和增量及恢复 一.Xtrabackup 说明及安装 1.Xtrabackup 介绍及说明 Percona XtraBackup是世界上唯一开放源码的免费MySQL热备份软件,可以执行非阻塞 InnoDB和XtraDB数据库的备份.使用Percona XtraBackup,您可以实现以下好处: 快速可靠