Mysql备份工具xtraback全量和增量测试
Mysql备份工具xtraback全量和增量测试
xtrabackup 是 percona 的一个开源项目,可以热备份innodb ,XtraDB,和MyISAM(会锁表)
官方网址http://www.percona.com/docs/wiki/percona-xtrabackup:start
Xtrabackup是由percona开发的一个开源软件,此软件可以说是innodb热备工具ibbackup的一个开源替代品。这个软件是由2个部分组成的:xtrabackup和innobackupex。Xtrabackup专门用于innodb引擎和 xtraDB引擎;而innobackupex是专门用于myisam和innodb引擎,及混合使用的引擎。
一、安装
1、RPM安装:
rpm -ivh –nodeps percona-xtrabackup-debuginfo-2.0.0-417.rhel5.x86_64.rpm
–nodeps(不检查软件间的依赖关系),因为安装xtrabackup需要mysql_client,但是我的是通过源码安装的。所以环境变量要设置正确
比如 export PATH=$PATH:/usr/local/mysql/bin 如果mysql没有设置到PATH里 会报错。
2、下载二进制源码包:
tar -zxvf percona-xtrabackup-2.0.0.tar.gz
mv percona-xtrabackup-2.0.0 /usr/loca/xtrabackup
3、使用源代码方式安装
如果你想使用源代码方式安装的话,则会发现 其安装方式有点古怪,这是因为它采用的在MySQL源代码上打补丁构建的方式。
tar zxf xtrabackup-0.8.tar.gz
cd xtrabackup-0.8
./configure
make
进行到这里时,千万别惯性使然接着make install,那样就会接着安装MySQL了,正确方法是接着:
cd innobase/xtrabackup/
make
make install
查看版本号:
mysqld配置文件:(多实例时备份必须要)
- [mysqld]
- innodb_data_home_dir = /www/mysqldata/ibdata #用来储存文件的数据
- innodb_log_group_home_dir = /www/mysqldata/iblogs
- innodb_data_file_path=ibdata1:10M;ibdata2:10M:autoextend
- innodb_log_files_in_group = 2
- innodb_log_file_size = 1G
注:文本测试中没有多实例,使用默认my.cnf。
二、xtrabackup备份和恢复
Xtrabackup有两个主要的工具:xtrabackup、innobackupex。 xtrabackup只能备份InnoDB和XtraDB两种数据表,支持在线热备份,不会锁表innobackupex则封装了xtrabackup,同时可以备份MyISAM数据表,如果你的数据库里有innodb和myisam存储引擎,只能使用innobackupex备份。
* xtrabackup - 用于热备份innodb, xtradb表的工具,不能备份其他表。
* innobackupex - 对xtrabackup封装的perl脚本,提供了myisam表备份的能力。(能进行整库和数据表备份)。本文旨在介绍Xtrabackup工具对数据库进行增量备份实践。
1、innobackupex-1.5.1备份
在实施备份时,需要在数据库运行的情况下在线执行,并先提前建立用于备份的路径。
- innobackupex [--defaults-file=/etc/my.cnf] –user=root [--host=192.168.10.198] [--password=xxx] [--port=3306] /www/backup/ 2>/www/backup/backup.log
参数:
/www/backup/ #备份的目录
2>/www/backup/backup.log #将备份过程中的输出信息重定向到/www/backup/backup.log
–slave-info #会记录复制主日志的复制点,便于重新做复制用。(用在备份从机器用)
xtrabackup_binlog_info #存放binlog的信息。(binlog需要另外拷贝备份,如果需要binlog的话)
xtrabackup_checkpoints #存放备份的起始位置和结束位置。
–-stream=tar #告诉xtrabackup,备份需要以tar的文件流方式输出。
–-include='test' #备份包含的库表,如例:意思是要备份test库中所有的表。如果需要全备份,则省略这个参数;如果需要备份test库下的2个表:tableA & tableB,则写成:–-include='test.tableA|test.tableB';再如果test库下只有2个前缀是 table的表,你还可以写成:–-include='test.table*'。
–-throttle=500 #xtrabackup在备份过程中,IO操作比较多,因此需要限定一下IO操作。以免服务器压力过大,不过好像作用不太明显,也不知道是不是设置的还是过大。待测…
–-socket=/data/mysql/backup/mysql.sock #指定mysql.sock所在位置,以便备份进程登录mysql
--apply-log
--redo-only
(1)、完整数据备份
例如:
- mysql> show databases;
- +--------------------+
- | Database |
- +--------------------+
- | information_schema |
- | jss |
- | my_db |
- | mysql |
- | test |
- +--------------------+
- 5 rows in set (0.00 sec)
全量备份:
- innobackupex --defaults-file=/etc/my.cnf /www/backup/
将在/www/backup/ 目录下产生一个按当前日期时间命令的目录,如 2012-07-18_15-05-06,在恢复时,注意要先关闭服务器,并且将 datadir 的目录先清空,在恢复数据后一定需要重置该目录的权限。
模拟故障,具体操作如下:
/usr/local/mysql5/bin/mysqladmin -uroot shutdown
mv /www/mysqldata /tmp/
mkdir /www/mysqldata
应用全量备份:
- innobackupex --apply-log /www/backup/2012-07-18_15-05-06/
- innobackupex --copy-back /www/backup/2012-07-18_15-05-06/
ln -s /usr/local/mysql5/share/english /www/mysqldata/mysql/english #恢复初始目录树,否则无法启动
chown -R mysql.mysql /www/mysqldata
/usr/local/mysql5/bin/mysqld_safe --user=mysql &
提示,可以在备份时直接压缩以节约磁盘空间:
- innobackupex --defaults-file=/etc/my.cnf --stream=tar /www/backup/ | gzip > /www/backup/compress/mysql_backup.tar.gz
不过注意解压需要手动进行,并加入 -i 的参数,否则无法解压出所有文件。
- tar zxfi /www/backup/compress/mysql_backup.tar.gz
- innobackupex --apply-log /www/backup/compress
- innobackupex --copy-back /www/backup/compress
(2)Innobackupex针对某个库增量备份:
增量备份仅针对InnoDB这类支持事务的引擎,对于MyISAM等引擎,则仍然是全备了。
全量备份:
- innobackupex-1.5.1 --defaults-file=/etc/my.cnf --databases="jss" /www/backup/full/
登录到数据库,创建几个新的对象:
- mysql> use jss;
- Database changed
- mysql> show tables;
- +---------------+
- | Tables_in_jss |
- +---------------+
- | j1 |
- +---------------+
- 1 row in set (0.00 sec)
- mysql> truncate table j1;
- Query OK, 0 rows affected (0.01 sec)
- mysql> create table ja(id int);
- Query OK, 0 rows affected (0.04 sec)
- mysql> insert into ja values (1);
- Query OK, 1 row affected (0.01 sec)
完整备份目录上做第一次增量备份
- innobackupex-1.5.1 --defaults-file=/etc/my.cnf --databases="jss" --incremental --incremental-basedir=/www/backup/full/2012-07-18_19-47-49/ /www/backup/inc
如果默认存储引擎是基于MyISAM,那么增量备份时备份的文件分别是.frm、.MYD、.MYI。
如果默认存储引擎是基于InnoDB,那么增量备份时备份的只会是.frm文件,我的配置文件所采用的是独立表空间。
在 /www/backup/rec/下会产生增量文件:
[root@localhost jss]# cd /www/backup/inc/2012-07-18_19-55-17/
[root@localhost 2012-07-18_19-55-17]# ls -l
total 384
-rw-r--r-- 1 root root 250 Jul 18 19:55 backup-my.cnf
-rw-r----- 1 root root 360448 Jul 18 19:55 ibdata1.delta
-rw-r----- 1 root root 18 Jul 18 19:55 ibdata1.meta
drwxr-xr-x 2 root root 4096 Jul 18 19:55 jss
-rw-r--r-- 1 root root 13 Jul 18 19:55 xtrabackup_binary
-rw-r--r-- 1 root root 26 Jul 18 19:55 xtrabackup_binlog_info
-rw-r----- 1 root root 81 Jul 18 19:55 xtrabackup_checkpoints
-rw-r----- 1 root root 2560 Jul 18 19:55 xtrabackup_logfile.
[root@localhost 2012-07-18_19-55-17]# cd jss/
[root@localhost jss]# ls -l
total 28
-rw-r--r-- 1 mysql mysql 61 Jul 18 19:18 db.opt
-rw-r--r-- 1 mysql mysql 8556 Jul 18 19:18 j1.frm
-rw-rw---- 1 mysql mysql 8556 Jul 18 19:53 ja.frm
note:此过程仅影响XtraDB或基于InnoDB的表,其他带不同存储引擎的表会在增量备份出现时被完全复制
恢复过程也需要用到prepare
首先,提交事务必须重新执行每一个备份
然后,未提交事务必须回退
模拟故障
rm -rf /www/mysqldata/jss
将完整备份中的数据恢复到数据库中
- innobackupex-1.5.1 --defaults-file=/etc/my.cnf --databases="jss" --apply-log /www/backup/full/2012-07-18_19-47-49/
第一个增量备份应用到完整备份
- innobackupex-1.5.1 --defaults-file=/etc/my.cnf --databases="jss" --apply-log /www/backup/full/2012-07-18_19-47-49/ --incremental-dir=/www/backup/inc/2012-07-18_19-55-17/
在完整备份目录下会看到一个新增文件:
经过分析,原来是在prepare时,XtraBackup并没有将增量备份集中,属于新建对象的.frm文件复制到完整备份集目录,因此在执行copy-back时,这部分文件自然也就没有复制回数据文件路径。只有手动还原到datadir。
拷贝到datadir目录下
cp -rp 2012-07-18_19-47-48jss /www/mysqldata/jss
进入datadir查看文件:
[root@localhost backup]# cd /www/mysqldata
[root@localhost mysqldata]# ls
ibdata1 ib_logfile0 ib_logfile1 jss my_db mysql test xtrabackup_binlog_pos_innodb xtrabackup_checkpoints
[root@localhost mysqldata]# chown -R mysql.mysql /www/mysqldata
重启mysql
2、xtrabackup备份详解
xtrabackup只备份InnoDB数据文件,表结构是不备份的,所以恢复的时候,你必须有对应表结构文件(.frm)
mysql
use jss;
alter table j1 engine=innodb;
(1)全量备份及恢复
(使用xtrabackup,仅限InnoDB和xtradb表,且注意mysql配置文件my.cnf中“default_table_type = InnoDB”否则不成功)。
- xtrabackup --defaults-file=/etc/my.cnf --backup --target-dir=/www/backup/
执行两次:
- xtrabackup --defaults-file=/etc/my.cnf --prepare --target-dir=/www/backup/
- xtrabackup --defaults-file=/etc/my.cnf --prepare --target-dir=/www/backup/
将数据库停掉,删除数据库下的ib*(ib开头的所有)文件。
将/www/backup/目录下的ib*文件拷贝到数据库目录。
设置权限:
#chown mysql:mysql ib*
重启数据库后测试,是否成功。
[root@localhost backup]# cp ib* /www/mysqldata/
[root@localhost backup]# chown mysql.mysql /www/mysqldata/ib*
[root@localhost backup]# /usr/local/mysql/bin/mysqld_safe --user=mysql &
[1] 1695
[root@localhost backup]# 120719 15:56:19 mysqld_safe Logging to '/www/mysqldata/localhost.localdomain.err'.
120719 15:56:19 mysqld_safe Starting mysqld daemon with databases from /www/mysqldata
[root@localhost backup]# mysql
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 1
Server version: 5.1.57-log MySQL Community Server (GPL)
Type 'help;' or '\h' for help. Type '\c' to clear the buffer.
mysql> use jss;
Database changed
mysql> select * from j2;
+------+
| id |
+------+
| 2 |
+------+
1 row in set (0.01 sec)
注意,xtrabackup只备份数据文件,并不备份数据表结构(.frm),所以使用xtrabackup恢复的时候,你必须有对应表结构文件(.frm)。
(2)增量备份及恢复
再次强调,xtrabackup做增量仅限InnoDB和xtradb表,且注意mysql配置文件my.cnf中“default_table_type= InnoDB”否则不成功。
做增量前当然要先进行全量备份,在全量的基础上来进行增量。
首先进行全量备份。
- xtrabackup --defaults-file=/etc/my.cnf --backup --target-dir=/www/backup/
在全量备份的基础上进行增量。
- xtrabackup --defaults-file=/etc/my.cnf --backup --target-dir=/www/inc/1 --incremental-basedir=/www/backup/
(注:/www/inc/1/是每次都需修改的。比如第二次增量就改成/www/inc/ 2,当然可以写个脚本进行自动备份,备份脚本将陆续奉上......恢复的时候也是一样)
增量恢复。(步骤同全量恢复,只是在执行恢复命令的时候中间多一步)
- xtrabackup --defaults-file=/etc/my.cnf --prepare --target-dir=/www/backup/
- xtrabackup --target-dir=/www/backup/ --prepare --incremental-dir=/www/inc/1
- xtrabackup --defaults-file=/etc/my.cnf --prepare --target-dir=/www/backup/
将数据库停掉,删除数据库下 /www/mysqldata/ibdata 的ib*表文件。将/www/backup/目录下的ib*文件拷贝到数据库目录/www/mysqldata/ibdata。
设置权限:
#chown mysql:mysql ib*
重启后测试。是否成功。
注:备份前先登录数据库,打开一个表看看记录条数,然后进行备份,然后再对表最终的记录进行修改,然后在备份,再测试。
三、innobackupex-1.5.1 与 xtrabackup 相结合
备份策略:
整库备份直接用innobackupex-1.5.1脚本。
只对InnoDB或xtradb表,进行备份直接用xtrabackup。
由于xtrabackup不能备份表结构,所以备份时首先用innobackupex-1.5.1脚本对数据库进行整库备份。再用xtrabackup进 行表备份。分别进行。恢复时也分别进行恢复。如果发生表结构丢失则先使用innobackupex-1.5.1进行恢复,然后再用xtrabackup恢 复增量数据。用生成的文件ib*覆盖用innobackupex-1.5.1恢复后的ib*文件。
=======================================================================================
首先,innobackupex-1.5.1全备份:
- innobackupex --defaults-file=/etc/my.cnf /www/backup/full/ 2> /www/backup//1.log
#会生成一个时间文件夹,这里假如是2012-7-20_15-57-44
然后,xtrabackup 做增量备份:
- innobackupex-1.5.1--defaults-file=/etc/my.cnf --incremental --incremental-basedir=/www/backup/full/2012-7-20_15-57-44/ /www/backup/inc/1
恢复:
首先停掉数据库,备份二进制日志(如果有的话),然后删除数据库目录下的所有数据库文件.
cd /www/mysqldata
rm -rf * # 删除数据目录里的所有文件
恢复全量备份:
- innobackupex-1.5.1 --apply-log /www/backup/full/2012-7-20_15-57-44/ # 应用日志
- innobackupex-1.5.1 --copy-back /www/backup/full/2012-7-20_15-57-44/ # 拷贝文件
恢复增量备份:
- xtrabackup --prepare --target-dir=/www/backup/full/2012-7-20_15-57-44 --incremental-dir= /www/backup/inc/1
将/www/backup/目录下的ib*文件拷贝到数据库目录
重启mysql服务。
转载:http://blog.chinaunix.net/uid-25266990-id-3314699.html
Mysql备份工具xtraback全量和增量测试的更多相关文章
- innobackupex在线备份及恢复(全量和增量)
Xtrabackup是由percona开发的一个开源软件,它是innodb热备工具ibbackup(收费的商业软件)的一个开源替代品.Xtrabackup由个部分组成:xtrabackup和innob ...
- MySQL数据以全量和增量方式,同步到ES搜索引擎
本文源码:GitHub·点这里 || GitEE·点这里 一.配置详解 场景描述:MySQL数据表以全量和增量的方式向ElasticSearch搜索引擎同步. 1.下载内容 elasticsearch ...
- mysql全量和增量备份详解(带脚本)
在日常运维工作中,对mysql数据库的备份是万分重要的,以防在数据库表丢失或损坏情况出现,可以及时恢复数据. 下面对这种备份方案详细说明下:1.MySQLdump增量备份配置执行增量备份的前提条件是M ...
- MySQL5.7.18 备份、Mysqldump,mysqlpump,xtrabackup,innobackupex 全量,增量备份,数据导入导出
粗略介绍冷备,热备,温暖,及Mysqldump,mysqlpump,xtrabackup,innobackupex 全量,增量备份 --备份的目的 灾难恢复:意外情况下(如服务器宕机.磁盘损坏等)对损 ...
- Python实现目录文件的全量和增量备份
目标: 1.传入3个参数:源文件路径,目标文件路径,md5文件 2.每周一实现全量备份,其余时间增量备份 1.通过传入的路径,获取该路径下面的所有目录和文件(递归) 方法一:使用os.listdir ...
- 关于Subversion主从备份方式的调整(全量、增量脚本)更新
本文引用于http://blog.chinaunix.net/uid-25266990-id-3369172.html 之前对Subversion服务器作了迁移,关于SVN的架构也走了调整,有单一的服 ...
- MySQL备份工具之mysqldump使用
MySQL备份工具之mysqldump使用说明 一.备份分类 根据能否停用数据库,将备份类型分为: 1. 冷备:数据库服务停止后备份 2. 温备:只能对数据库进行读操作,不能进行写操作 3. 热备:在 ...
- mysql备份工具innobackupex,xtrabackup-2.1的原理和安装
mysql备份工具innobackupex,xtrabackup-2.1的原理和安装 http://bbs.2cto.com/read.php?tid=310496 一.Xtrabackup介绍 1. ...
- MySQL备份工具percona-xtrabackup安装
1.安装xtrabackup的yum源 rpm -ivh https://www.percona.com/redir/downloads/percona-release/redhat/latest/p ...
随机推荐
- ASP.NET MVC URL重写与优化(初级篇)-使用Global路由表定制URL
ASP.NET MVC URL重写与优化(初级篇)-使用Global路由表定制URL 引言--- 在现今搜索引擎制霸天下的时代,我们不得不做一些东西来讨好爬虫,进而提示网站的排名来博得一个看得过去的流 ...
- ASP.NET 实现多页面合并一页显示
目前业务有一个需求: 就是把多个网页合并到一个页面显示, 在实现过程中我一般使用两种方法: 利用母版页设置导航栏, 定位到每个网页; 利用用户控件( .acsx 后缀的文件), 但是有个问题就是传参比 ...
- day 82 URL分发
一 .admin 流程 (1) 启动 autodiscover_modules('admin', register_to=site) (2) 注册 单例模式 admin.site=AdminSite( ...
- Day 62 Django第三天
2.GET请求能够被cache,GET请求能够被保存在浏览器的浏览历史里面(密码等重要数据GET提交,别人查看历史记录,就可以直接看到这些私密数据)POST不进行缓存. 3.GET参数是带在URL后面 ...
- Servlet实现session读写
前言 一个女人让他的程序员丈夫去商店买东西:你去附近的商店买些面包,如果有鸡蛋的话,买6个回来,这个丈夫买了6个面包回来,他的妻子大吃一惊:你为什么买了6个面包?! 程序员丈夫回答:因为他们有 ...
- arya-sites模块的主要类
Site类,生成路由, - 方法:url,get_urls, register, login,logout - 字段:_registry = {} Config,基础配置类,主要用 ...
- Design-341. Flatten Nested List Iterator
Given a nested list of integers, implement an iterator to flatten it. Each element is either an inte ...
- TP5使用Composer安装phpoffice/phpspreadsheet,导出Excel文件
1.composer安装: composer require phpoffice/phpspreadsheet 2.点击导出按钮,触发控制器里面的方法 wdjzdc() 3. 在控制中引入 use P ...
- nodejs之模块加载机制
nodejs模块加载原理 node加载模块步骤: 1) 路径分析 (如判断是不是核心模块.是绝对路径还是相对路径等) 2) 文件定位 (文件扩展名分析, 目录和包处理等细节) 3) 编译执行 原生模块 ...
- centos6.5 yum安装lamp
准备篇: 1.清空防火墙 iptables -F 或者关闭防火墙 /etc/init.d/iptables stop,如果要防火墙开机不要启动 chkconfig iptables off 2.关闭S ...