Percona Xtrabackup实现mysql全量备份和增量备份

########################################################################
###        安装mysql或者mariaDB本地也要装mysql或者mariaDB相关的包          ##
########################################################################

#######################################
##   xtrabackup 的安装                ###
#######################################
[[email protected] ~]# yum install http://www.percona.com/downloads/percona-release/redhat/0.1-3/percona-release-0.1-3.noarch.rpm # 安装指定的yum源
[[email protected] ~]# yum -y install percona-xtrabackup.x86_64 # 安装软件

#######################################
##  全量备份服务器的mysql数据         ###
#######################################
1)创建当天备份数据保存的路径
[[email protected] ~]# mkdir -p /backup/mysql/full/2015-05-07
2)全量备份服务器的数据(不压缩)
[[email protected] full]# /usr/bin/innobackupex --user=root --password=123456789 --host=localhost --port=3306 --defaults-file=/etc/my.cnf /backup/mysql/full/2015-05-07/
3) 修改配置文件,增加[mysqld] 选项防止在恢复数据时报错
[[email protected] full]# vi /etc/my.cnf
[mysqld]
datadir="/var/lib/mysql"
########################################
###   全量备份数据恢复                ####
########################################
1) 停止mysql
[[email protected] full]# service mysql stop

2) 模拟数据丢失
[[email protected] ~]# mv /var/lib/mysql /var/lib/mysql_bak
Bye

3) 用上面备份的数据恢复
    通过--apply-log指明将日志应用到数据文件上
    [[email protected] full]# /usr/bin/innobackupex --user=root --password=123456789 --defaults-file=/etc/my.cnf  --apply-log /backup/mysql/full/2015-05-07/2015-05-07_18-14-25/

3.1 如果数据库目录为空,可以使用--copy-back选项用于执行恢复操作。因为使用--copy-back恢复要求恢复的目录必须为空
    [[email protected] full]# mv /var/lib/mysql /var/lib/mysql_old
    [[email protected] full]# mkdir /var/lib/mysql
    [[email protected] full]# /usr/bin/innobackupex --user=root --password=123456789 --copy-back --defaults-file=/etc/my.cnf   /backup/mysql/full/2015-05-07/2015-05-07_18-14-25/
    [[email protected] full]# chown -R mysql:mysql /var/lib/mysql  # 修改所有者,所属组
    [[email protected] full]# service mysql start # 启动mysql
    [[email protected] full]# mysql -u root -p  # 登录查看数据是否恢复
    Enter password:
    MariaDB [(none)]> show databases;  # 发现数据已经恢复
    +--------------------+
    | Database           |
    +--------------------+
    | information_schema |
    | mysql              |
    | performance_schema |
    | test_db            |
    +--------------------+
    3.2 如果数据库目录不为空,使用直接copy的方法恢复数据(不常用)
    rm -f /var/lib/mysql/ibdata/ib* # 如果innodb数据文件放在单独的目录,需要单独删除。 我这里不是单独放置的
    [[email protected] full]# rm -f /var/lib/mysql/ib*  # 删除innodb数据文件  # 如果是恢复MyISAM引擎的数据表则没必要执行这一步
    [[email protected] full]# rm -rf /var/lib/mysql/test_db # 删除指定的数据库test_db
    # 恢复
    [[email protected] full]# cp -r /backup/mysql/full/2015-05-07/2015-05-07_18-14-25/test_db /var/lib/mysql/
    [[email protected] full]# cp -r /backup/mysql/full/2015-05-07/2015-05-07_18-14-25/ib* /var/lib/mysql/  # 如果innodb数据文件放在单独的目录,需要单独复制
    [[email protected] full]# chown -R mysql:mysql /var/lib/mysql  # 修改所有者,所属组
    [[email protected] full]# service mysql start
    [[email protected] full]# mysql -u root -p123456789  # 登录数据库查看数据已经恢复
    MariaDB [(none)]> show databases;
    +--------------------+
    | Database           |
    +--------------------+
    | information_schema |
    | mysql              |
    | performance_schema |
    | test_db            |
    +--------------------+
    4 rows in set (0.00 sec)

MariaDB [(none)]> use test_db;
    Reading table information for completion of table and column names
    You can turn off this feature to get a quicker startup with -A

Database changed
    MariaDB [test_db]> select * from test_table1;
    +------+----------+
| id   | name     |
+------+----------+
|    1 | zhangsan |
|    2 | lisi     |
|    3 | wangwu   |
|    4 | zhaoliu  |
|    5 | guqi     |
+------+----------+
5 rows in set (0.00 sec) # 数据已经恢复

##############################################
###              增量备份                    ##
##############################################
1)开启二进制日志
[[email protected] ~]# vi /etc/my.cnf
[mysqld]
datadir="/var/lib/mysql"
log-bin=/data/mysql/log/mysql-bin
[[email protected] ~]#  service mysql restart
2)增量备份是建立在全量备份的基础上的所以先确保有一次全量备份,全量备份前面已经介绍

3) 我们往数据库中添加数据,进行第一次增量备份
MariaDB [test_db]> insert into test_table1 values(6,‘xiaoming‘);
Query OK, 1 row affected (0.00 sec)

MariaDB [test_db]> select * from test_table1;
+------+----------+
| id   | name     |
+------+----------+
|    1 | zhangsan |
|    2 | lisi     |
|    3 | wangwu   |
|    4 | zhaoliu  |
|    5 | guqi     |
|    6 | xiaoming |
+------+----------+
6 rows in set (0.00 sec)
[[email protected] ~]# mkdir -p /backup/mysql/increment/2015-05-07 # 创建增量备份保存的路径

4) 进行第一次增量备份
[[email protected] ~]# /usr/bin/innobackupex --user=root --password=123456789 --defaults-file=/etc/my.cnf  --incremental-force-scan --incremental /backup/mysql/increment/2015-05-07 --incremental-basedir=/backup/mysql/full/2015-05-07/2015-05-07_18-14-25/ # 第一次增量备份 (如果是mariadb不添加--incremental-force-scan参数可能会因为不支持FLUSH CHANGED_PAGE_BITMAPS而报错导致增量备份失败)
第一次增量备份生成的文件夹为/backup/mysql/increment/2015-05-07/2015-05-07_18-41-41/

5) 再次往数据表中插入内容
MariaDB [test_db]> insert into test_table1 values(7,‘xiaohong‘);
Query OK, 1 row affected (0.05 sec)

6)进行第二次增量备份
[[email protected] ~]# /usr/bin/innobackupex --user=root --password=123456789 --defaults-file=/etc/my.cnf  --incremental-force-scan --incremental /backup/mysql/increment/2015-05-07 --incremental-basedir=/backup/mysql/increment/2015-05-07/2015-05-07_18-41-41/
第二次增量备份生成的文件夹为/backup/mysql/increment/2015-05-07/2015-05-07_18-48-32/

7)查看最后一次增量备份时所对应的二进制日志及位置
[[email protected] ~]# cat /backup/mysql/increment/2015-05-07/2015-05-07_18-48-32/xtrabackup_binlog_info
mysql-bin.000001    833    0-1-3
MariaDB [(none)]> show master status
    -> ;
+------------------+----------+--------------+------------------+
| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+------------------+----------+--------------+------------------+
| mysql-bin.000001 |      833 |              |                  |
+------------------+----------+--------------+------------------+
1 row in set (0.00 sec)  # 可以看到如果没有在增量备份后再对数据库进行增删改操作。则从增量备份中得出的信息和从二进制日志中看到的是一样的。

###################################################################
###         增量备份数据还原                                    ###
###################################################################
恢复增量备份
增量备份的还原操作跟完整的还原有点不一样,首先必须使用--apply-log --redo-only对完整备份的目录及所有增量备份目录进行操作,然后就可以像还原完整备份时的操作了。(apply increment log to full data)
1 模拟数据丢失
[[email protected] ~]# service mysql stop
[[email protected] ~]# rm -rf /var/lib/mysql
[[email protected] ~]# mkdir /var/lib/mysql

2 通过--apply-log --redo-only指明将日志应用到数据文件上
[[email protected] ~]# /usr/bin/innobackupex --user=root --password=123456789 --defaults-file=/etc/my.cnf  --apply-log --redo-only /backup/mysql/full/2015-05-07/2015-05-07_18-14-25/

3 把第一次增量备份的数据应用到全量备份上
[[email protected] ~]# /usr/bin/innobackupex --user=root --password=123456789 --defaults-file=/etc/my.cnf --apply-log --redo-only /backup/mysql/full/2015-05-07/2015-05-07_18-14-25/  --incremental-dir=/backup/mysql/increment/2015-05-07/2015-05-07_18-41-41/

4 把第二次增量备份的数据应用到全量备份上
[[email protected] ~]# /usr/bin/innobackupex --user=root --password=123456789 --defaults-file=/etc/my.cnf --apply-log --redo-only /backup/mysql/full/2015-05-07/2015-05-07_18-14-25/  --incremental-dir=/backup/mysql/increment/2015-05-07/2015-05-07_18-48-32/

5 恢复数据(这里和全量备份的恢复相同了)
[[email protected] ~]# /usr/bin/innobackupex --user=root --password=123456789 --defaults-file=/etc/my.cnf  --copy-back /backup/mysql/full/2015-05-07/2015-05-07_18-14-25/

6 更改权限,启动服务,登录mysql,查看数据是否恢复
[[email protected] ~]# chown -R mysql:mysql /var/lib/mysql
[[email protected] ~]# service mysql start
MariaDB [test_db]> select * from test_table1;
+------+----------+
| id   | name     |
+------+----------+
|    1 | zhangsan |
|    2 | lisi     |
|    3 | wangwu   |
|    4 | zhaoliu  |
|    5 | guqi     |
|    6 | xiaoming |
|    7 | xiaohong |
+------+----------+
7 rows in set (0.00 sec)  # 数据已经恢复

时间: 2024-11-06 11:42:42

Percona Xtrabackup实现mysql全量备份和增量备份的相关文章

如何用Percona XtraBackup进行MySQL从库的单表备份和恢复【转】

前提 应该确定采用的是单表一个表空间,否则不支持单表的备份与恢复. 在配置文件里边的mysqld段加上 innodb_file_per_table = 1 环境说明: 主库:192.168.0.1 从库1:192.168.0.2 从库2:192.168.0.3 备份工具 : Percona xtrabackup version 2.4.8 based on MySQL server 5.7.13 Linux (x86_64) (revision id: 97330f7) 在主库上创建chenfe

Percona Xtrabackup备份mysql全库及指定数据库(完整备份与增量备份)

原文地址:http://www.tuicool.com/articles/RZRnq2 Xtrabackup简介 Percona XtraBackup是开源免费的MySQL数据库热备份软件,它能对InnoDB和XtraDB存储引擎的数据库非阻塞地备份(对于MyISAM的备份 同样需要加表锁).XtraBackup支持所有的Percona Server.MySQL.MariaDB和Drizzle. XtraBackup优势 : 1.无需停止数据库进行InnoDB热备 2.增量备份MySQL 3.流

MySQL 全量及增量备份,基于xtrabackup 2.3.5

昨天一个pgp加密盘坏了,东西全丢了...,我的笔记啊!我咋怎么2呢.. 备份个脚本吧,方便以后手机查看,话说我都快忘记帐号密码了 备注:脚步恢复时只能恢复到备份前的状态,如果需要恢复到当前状态,还需配合binlog,睡觉就这样 #!/bin/sh #################################################### # AUTHOR : JusonSummer # # VERSION : V1.0.0 # # DATE : 2016-08-13 # # CO

Percona Xtrabackup备份mysql (完整备份与增量备份)

Xtrabackup简介 Percona XtraBackup是开源免费的MySQL数据库热备份软件,它能对InnoDB和XtraDB存储引擎的数据库非阻塞地备份(对于MyISAM 的备份同样需要加表锁).XtraBackup支持所有的Percona Server.MySQL.MariaDB和Drizzle. XtraBackup优势 : 1.无需停止数据库进行InnoDB热备 2.增量备份MySQL 3.流压缩到传输到其它服务器 4.能比较容易地创建主从同步 5.备份MySQL时不会增大服务器

xtrabackup 全备份,增量备份,恢复 mysql数据库

Xtrabackup使用指南 InnoDB数据备份工具 Xtrabackup是一个对InnoDB做数据备份的工具,支持在线热备份(备份时不影响数据读写,也就是不加锁),是商业备份工具InnoDB Hotbackup的一个很好的替代品 一.Xtrabackup介绍  A.Xtrabackup是什么 Xtrabackup是一个对InnoDB做数据备份的工具,支持在线热备份(备份时不影响数据读写),是商业备份工具InnoDB Hotbackup的一个很好的替代品. Xtrabackup有两个主要的工具

MySQL5.7.18 备份、Mysqldump,mysqlpump,xtrabackup,innobackupex 全量,增量备份,数据导入导出

粗略介绍冷备,热备,温暖,及Mysqldump,mysqlpump,xtrabackup,innobackupex 全量,增量备份 --备份的目的 灾难恢复:意外情况下(如服务器宕机.磁盘损坏等)对损坏的数据进行恢复和还原保证数据不丢失,最小程度地丢失需求改变:因需求改变而需要把数据还原到改变以前测试:测试新功能是否可用 --备份与恢复概述 根据备份的方法可以分为: 1.Hot Backup(热备) 2.Cold Backup(冷备) 3.Warm Backup(温备) Hot Backup是指

Xtrabackup 备份大数据库(全量备份和增量备份)

Xtrabackup Xtrabackup是由percona开源的免费数据库热备份软件,它能对InnoDB数据库和XtraDB存储引擎的数据库非阻塞地备份(对于MyISAM的备份同样需要加表锁): mysqldump备份方式是采用的逻辑备份,其最大的缺陷是备份和恢复速度较慢,如果数据库大于50G,mysqldump备份就不太适合. Xtrabackup优点 1)备份速度快,物理备份可靠 2)备份过程不会打断正在执行的事务(无需锁表) 3)能够基于压缩等功能节约磁盘空间和流量 4)自动备份校验 5

xtrabackup实现全量备份和增量备份

mysql增量和完全备份innobackupex2.1.9版本1 yum安装: 官网地址:https://www.percona.com/doc/percona-xtrabackup/LATEST/installation/yum_repo.htmlyum install http://www.percona.com/downloads/percona-release/redhat/0.1-4/percona-release-0.1-4.noarch.rpmyum list | grep per

Percona XtraBackup 关于 MySQL备份还原的详细测试

一. Percona XtraBackup 的优点. (1)无需停止数据库进行InnoDB热备: (2)增量备份MySQL: (3)流压缩传输到其它服务器: (4)在线移动表: (5)能够比较容易地创建主从同步: (6)备份MySQL时不会增大服务器负载. 二. Percona XtraBackup 工具集组成 在旧版本中,Percona XtraBackup 工具集里主要包含两个程序:innobackupex 和 xtrabackup. xtrabackup是C/C++编译的二进制程序,用来备