Mysql备份工具xtraback全量和增量测试

2023-11-07

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安装:

wget  http://www.percona.com/redir/downloads/XtraBackup/XtraBackup-2.0.0/RPM/rhel5/x86_64/percona-xtrabackup-debuginfo-2.0.0-417.rhel5.x86_64.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、下载二进制源码包:

wget http://www.percona.com/redir/downloads/XtraBackup/XtraBackup-2.0.0/binary/Linux/x86_64/percona-xtrabackup-2.0.0.tar.gz

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配置文件:(多实例时备份必须要)

  1. [mysqld]
  2. innodb_data_home_dir = /www/mysqldata/ibdata #用来储存文件的数据
  3. innodb_log_group_home_dir = /www/mysqldata/iblogs
  4. innodb_data_file_path=ibdata1:10M;ibdata2:10M:autoextend
  5. innodb_log_files_in_group = 2
  6. 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备份

 

在实施备份时,需要在数据库运行的情况下在线执行,并先提前建立用于备份的路径。

  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)、完整数据备份

例如:

  1. mysql> show databases; 
  2. +--------------------+
  3. | Database |
  4. +--------------------+
  5. | information_schema |
  6. | jss |
  7. | my_db |
  8. | mysql |
  9. | test |
  10. +--------------------+
  11. 5 rows in set (0.00 sec)

全量备份:

  1. 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

应用全量备份:

  1. innobackupex --apply-log /www/backup/2012-07-18_15-05-06/

 

 

  1. 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 &

 

提示,可以在备份时直接压缩以节约磁盘空间:

  1. innobackupex --defaults-file=/etc/my.cnf --stream=tar /www/backup/ | gzip > /www/backup/compress/mysql_backup.tar.gz

不过注意解压需要手动进行,并加入 -i 的参数,否则无法解压出所有文件。

  1. tar zxfi /www/backup/compress/mysql_backup.tar.gz
  2. innobackupex --apply-log /www/backup/compress
  3. innobackupex --copy-back /www/backup/compress

(2)Innobackupex针对某个库增量备份:

 

    增量备份仅针对InnoDB这类支持事务的引擎,对于MyISAM等引擎,则仍然是全备了。

全量备份:

  1. innobackupex-1.5.1 --defaults-file=/etc/my.cnf --databases="jss" /www/backup/full/

 

登录到数据库,创建几个新的对象:

  1. mysql> use jss;
  2. Database changed
  3. mysql> show tables;
  4. +---------------+
  5. | Tables_in_jss |
  6. +---------------+
  7. | j1 |
  8. +---------------+
  9. 1 row in set (0.00 sec)
  10. mysql> truncate table j1;
  11. Query OK, 0 rows affected (0.01 sec)
  12. mysql> create table ja(id int);
  13. Query OK, 0 rows affected (0.04 sec)
  14. mysql> insert into ja values (1);
  15. Query OK, 1 row affected (0.01 sec)

完整备份目录上做第一次增量备份

  1. 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

将完整备份中的数据恢复到数据库中

  1. innobackupex-1.5.1 --defaults-file=/etc/my.cnf --databases="jss" --apply-log /www/backup/full/2012-07-18_19-47-49/

 

第一个增量备份应用到完整备份

  1. 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”否则不成功)。

  1. xtrabackup --defaults-file=/etc/my.cnf --backup --target-dir=/www/backup/

执行两次:

  1. xtrabackup --defaults-file=/etc/my.cnf --prepare --target-dir=/www/backup/
  2. 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”否则不成功。

做增量前当然要先进行全量备份,在全量的基础上来进行增量。

首先进行全量备份。

  1. xtrabackup --defaults-file=/etc/my.cnf --backup --target-dir=/www/backup/

在全量备份的基础上进行增量。

  1. xtrabackup --defaults-file=/etc/my.cnf --backup --target-dir=/www/inc/1 --incremental-basedir=/www/backup/

(注:/www/inc/1/是每次都需修改的。比如第二次增量就改成/www/inc/ 2,当然可以写个脚本进行自动备份,备份脚本将陆续奉上......恢复的时候也是一样)

增量恢复。(步骤同全量恢复,只是在执行恢复命令的时候中间多一步)

  1. xtrabackup --defaults-file=/etc/my.cnf --prepare --target-dir=/www/backup/
  2. xtrabackup --target-dir=/www/backup/ --prepare --incremental-dir=/www/inc/1
  3. 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全备份:

  1. innobackupex --defaults-file=/etc/my.cnf /www/backup/full/ 2> /www/backup//1.log

#会生成一个时间文件夹,这里假如是2012-7-20_15-57-44

然后,xtrabackup 做增量备份:

  1. 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 * # 删除数据目录里的所有文件

恢复全量备份:

  1. innobackupex-1.5.1 --apply-log /www/backup/full/2012-7-20_15-57-44/ # 应用日志
  2. innobackupex-1.5.1 --copy-back /www/backup/full/2012-7-20_15-57-44/ # 拷贝文件

恢复增量备份:

  1. 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

转载于:https://www.cnblogs.com/SQL888/p/5751629.html

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Mysql备份工具xtraback全量和增量测试 的相关文章

  • ES:一次分片设计问题导致的故障

    现象 1 单节点CPU持续高 2 写入骤降 3 线程池队列积压 但没有reject 4 使用方没有记录日志 排查 1 ES监控 只能看到相应的结果指标 无法反应出原因 2 ES日志 大量日志打印相关异常 routate等调用栈 core a

随机推荐

  • Java是解释型还是编译型语言?

    Java是解释型还是编译型语言 首先JVM是什么 JVM虚拟机也是java的运行环境 因为所有系统平台都支持JVM 所以实现了Java的跨平台 我们可以把JVM虚拟机比作人 有食物供我们食用 当我们需要吃哪种食物的时候就吃哪个实物 在JVM
  • 深度学习笔记(五) 代价函数的梯度求解过程和方法

    作为自己的笔记系列 方便自己查阅和理解 1 什么是梯度 梯度 本意是一个向量 矢量 当某一函数在某点处沿着该方向的方向导数取得该点处的最大值 即函数在该点处沿方向变化最快 变化率最大 为该梯度的模 在二元函数的情形 设函数z f x y 在
  • Linux C中对json格式数组数据的生成与解析

    在网络通信中 数据经常被做成json格式的来进行传输 那么我们怎么在linux系统中去做json格式的数据呢 怎么将接收到的json格式的数据解析出来呢 1 linux json库的安装 1 下载json c源码包 2 解压json c的源
  • Android Studio NDK开发注意

    1 如果JNILibs armeabi中有相应的库文件 编绎重新生成的 so文件不会打包到新的apk中
  • 干掉 “重复代码” 的技巧有哪些?

    软件工程师和码农最大的区别就是平时写代码时习惯问题 码农很喜欢写重复代码而软件工程师会利用各种技巧去干掉重复的冗余代码 业务同学抱怨业务开发没有技术含量 用不到设计模式 Java 高级特性 OOP 平时写代码都在堆 CRUD 个人成长无从谈
  • UDP包传送字符串实现方法以及方格乱码的出现原因和解决办法

    在使用socket发送udp包传输文本时 由于包中的char型数组是定长的 且其长度大于消息长度 所以其中必有很多空元素 当接收端接收到udp包时进行转码 空元素就会被转码成方块形状的乱码 解决办法 每条消息发送完毕后添加 作为记号 接收后
  • 浏览器渲染机制 (二)浏览器主进程-浏览器内核-浏览器渲染流程

    文章目录 浏览器主进程和浏览器渲染进程的通信过程 浏览器内核 渲染进程 中线程之间的管理 GUI渲染线程与JS引擎线程互斥 JS阻塞页面加载 WebWorker JS的多线程 WebWorker与SharedWorker 总结浏览器渲染流程
  • adb通过网络连接

    1 使用USB数据线连接设备 2 在命令行输入adb tcpip 5555 5555为端口号 可以自由指定 3 断开 USB数据 此时可以连接你需要连接的 USB设备 4 再计算机命令行输入 adb connect lt 设备的IP地址 g
  • 自动计算30天内的股价最高价源代码

    我可以回答这个问题 您可以使用以下代码来计算30天内股价的最高价 复制 import pandas as pd import yfinance as yf 设置股票代码和日期范围 symbol AAPL start date 2021 01
  • Python绝技:运用Python成为顶级黑客

    Python 是一门常用的编程语言 它不仅上手容易 而且还拥有丰富的支持库 对经常需要针对自己所 处的特定场景 以极少的代码量实现所需的功能 Python绝技 运用Python成为顶级黑客结合具体的场景和真 实的案例 详述了 Python
  • 《软件测试的艺术》第三章 代码检查、走查和评审

    软件测试的艺术 第三章 代码检查 走查和评审 3 1 代码检查与走查 3 2 代码检查 3 2 1 代码检查小组 3 2 2 检查议程与注意事项 3 2 3 对事不对人 和人有关的注意事项 3 2 4 代码检查的衍生功效 3 3 用于代码检
  • 100个python算法超详细讲解:农夫过河

    100个python算法超详细讲解 谷哥技术 1 问题描述 一个农夫在河边带了一匹狼 一只羊和一棵白菜 他需要把这三样东西用 船带到河的对岸 然而 这艘船只能容下农夫本人和另外一样东西 如果农夫 不在场的话 狼会吃掉羊 羊也会吃掉白菜 请编
  • 鸿蒙内核阅读笔记-定时器

    鸿蒙内核阅读笔记 定时器 简介 核心模块 定时器 los swtmr c 介绍 阅读代码 函数部分 简介 近期在阅读鸿蒙liteOS a 由于是初次探索内核的奥秘 将一些阅读的心得进行分享 希望能在作为笔记的同时 也能帮助更多人学习 感谢图
  • springboot + eureka集群,实现注册中心,实现负载均衡

    搭建eureka集群 新建一个boot项目 File new project 如图选择 next 起名字如下 gt next finish 新建3个注册中心 以三个注册中心为例 想多的自己加 项目名字上 new module next 起名
  • Basic Level 1055 集体照 (25分)

    题目 拍集体照时队形很重要 这里对给定的 N 个人 K 排的队形设计排队规则如下 每排人数为 N K 向下取整 多出来的人全部站在最后一排 后排所有人的个子都不比前排任何人矮 每排中最高者站中间 中间位置为 m 2 1 其中 m 为该排人数
  • PowerDesigner安装步骤和打印错误

    1 解压 2 双击运行安装包 等待初始化 3 初始化完成后点击next 4 选择地区 同意协议 完成后点击next 5 选择安装位置 完成后点击next 6 选择要安装的组件 eclipse我不需要 需要可以勾选并配置 完成后点击next
  • pandas apply使用多列计算生成新的列

    在python数据分析中 有时需要根据多列数据生成中间结果 pandas给我们带来了很多方便 通常简短的代码可以实现一些高级功能 灵活掌握一些技巧可以事倍功半 pandas的apply方法用于对指定列的每个元素进行相同的操作 下面生成一个d
  • 静态代码分析工具清单:开源篇(各语言)

    本文是一个静态代码分析工具的清单 共有26个工具 包括4个 NET工具 2个Ada工具 7个C 工具 4个Java工具 2个JavaScript工具 1个Opa工具 2个Packaging工具 3个Perl工具 1个Python工具 1 N
  • Python——列表排序和赋值

    1 列表排序 列表排序方法 ls sort 对列表ls 中的数据在原地进行排序 ls 13 5 73 4 9 ls sort ls sort reverse False 默认升序 reverse True 降序 ls 13 5 73 4 9
  • Mysql备份工具xtraback全量和增量测试

    Mysql备份工具xtraback全量和增量测试 xtrabackup 是 percona 的一个开源项目 可以热备份innodb XtraDB 和MyISAM 会锁表 官方网址http www percona com docs wiki