XtraBackup 备份与恢复实例讲解
前一篇文章我们讲到了PXB的原理以及安装方法,接下来将详细介绍 XtraBackup 备份和恢复的具体过程。
xtrabackup 选项
xtrabackup 工具有许多参数,具体可去官网查询(xtrabackup 参数选项 | innobackupex 参数选项),这里简单介绍 innobackupex 一些常用的参数。
1) innobackupex 参数选项
--defaults-file=[MY.CNF] //指定配置文件:只能从给定的文件中读取默认选项。 且必须作为命令行上的第一个选项;必须是一个真实的文件,它不能是一个符号链接。
--databases=# //指定备份的数据库和表,格式为:--databases="db1[.tb1] db2[.tb2]" 多个库之间以空格隔开,如果此选项不被指定,将会备份所有的数据库。
--include=REGEXP //用正则表达式的方式指定要备份的数据库和表,格式为 --include=‘^mydb[.]mytb’ ,对每个库中的每个表逐一匹配,因此会创建所有的库,不过是空的目录。--include 传递给 xtrabackup --tables。
--tables-file=FILE //此选项的参数需要是一个文件名,此文件中每行包含一个要备份的表的完整名称,格式为databasename.tablename。该选项传递给 xtrabackup --tables-file,与--tables选项不同,只有要备份的表的库才会被创建。
注意:部分备份(--include、--tables-file、--database)需要开启 innodb_file_per_table 。
--compact //创建紧凑型备份,忽略所有辅助索引页,只备份data page;通过--apply-log中重建索引--rebuild-indexs。
--compress //此选项指示xtrabackup压缩备份的InnoDB数据文件,会生成 *.qp 文件。
--decompress //解压缩qp文件,为了解压缩,必须安装 qpress 工具。 Percona XtraBackup不会自动删除压缩文件,为了清理备份目录,用户应手动删除 * .qp文件:find /data/backup -name "*.qp" | xargs rm。
--no-timestamp //指定了这个选项备份将会直接存储在 BACKUP-DIR 目录,不再创建时间戳文件夹。
--apply-log //应用 BACKUP-DIR 中的 xtrabackup_logfile 事务日志文件。一般情况下,在备份完成后,数据尚且不能用于恢复操作,因为备份的数据中可能会包含尚未提交的事务或已经提交但尚未同步至数据文件中的事务。因此,此时数据文件仍处于不一致状态。“准备”的主要作用正是通过回滚未提交的事务及同步已经提交的事务至数据文件使得数据文件处于一致性状态。
--use-memory=# //此选项接受一个字符参数(1M/1MB,1G/1GB,默认100M),仅与--apply-log一起使用,该选项指定prepare时用于崩溃恢复(crash-recovery)的内存。
--copy-back //拷贝先前备份所有文件到它们的原始路径。但原路径下不能有任何文件或目录,除非指定 --force-non-empty-directories 选项。
--force-non-empty-directories //恢复时指定此选项,可使 --copy-back 和 --move-back 复制文件到非空目录,即原data目录下可以有其他文件,但是不能有与恢复文件中同名的文件,否则恢复失败。
--rsync //此选项可优化本地文件(非InnoDB)的传输。rsync工具一次性拷贝所有非InnoDB文件,而不是为每个文件单独创建cp,在备份恢复很多数据库和表时非常高效。此选项不能和 --stream 一起使用。
--incremental //这个选项告诉 xtrabackup 创建一个增量备份,而不是完全备份。它传递到 xtrabackup 子进程。当指定这个选项,可以设置 --incremental-lsn 或 --incremental-basedir。如果这2个选项都没有被指定,--incremental-basedir 传递给 xtrabackup 默认值,默认值为:基础备份目录的第一个时间戳备份目录。
--incremental-basedir=DIRECTORY //该选项接受一个字符串参数,该参数指定作为增量备份的基本数据集的完整备份目录。它与 --incremental 一起使用。
--incremental-dir=DIRECTORY //该选项接受一个字符串参数,该参数指定了增量备份将与完整备份相结合的目录,以便进行新的完整备份。它与 --incremental 选项一起使用。
--redo-only //在“准备基本完整备份” 和 “合并所有的增量备份(除了最后一个增备)”时使用此选项。它直接传递给xtrabackup的 xtrabackup --apply-log-only 选项,使xtrabackup跳过"undo"阶段,只做"redo"操作。如果后面还有增量备份应用到这个全备,这是必要的。有关详细信息,请参阅xtrabackup文档。
--parallel=NUMBER-OF-THREADS //此选项接受一个整数参数,指定xtrabackup子进程应用于同时备份文件的线程数。请注意,此选项仅适用于文件级别,也就是说,如果您有多个.ibd文件,则它们将被并行复制; 如果您的表一起存储在一个表空间文件中,它将不起作用。
2) xtrabackup 参数选项
--apply-log-only //这个选项使在准备备份(prepare)时,只执行重做(redo)阶段,这对于增量备份非常重要。
xtrabackup 全量备份恢复
1. 完全备份
创建用于备份恢复的用户 pxb 并赋予权限
mysql> create user pxb@'localhost' identified by '';
mysql> grant reload,process,lock tables,replication client on *.* to pxb@localhost;
创建存放目录
[root@centos6 mysql]# mkdir -pv /data/pxb
mkdir: 已创建目录 "/data"
mkdir: 已创建目录 "/data/pxb"
进行数据库全备
[root@centos6 pxb]# innobackupex --defaults-file=/etc/my.cnf --user=pxb --password= --socket=/tmp/mysql.sock /data/pxb :: innobackupex: Starting the backup operation IMPORTANT: Please check that the backup run completes successfully.
At the end of a successful backup run innobackupex
prints "completed OK!".
………… :: >> log scanned up to ()
:: Executing FLUSH NO_WRITE_TO_BINLOG TABLES...
:: Executing FLUSH TABLES WITH READ LOCK...
:: Starting to backup non-InnoDB tables and files
…………
:: Executing FLUSH NO_WRITE_TO_BINLOG ENGINE LOGS...
xtrabackup: The latest check point (for incremental): ''
xtrabackup: Stopping log copying thread.
. :: >> log scanned up to () :: Executing UNLOCK TABLES
:: All tables unlocked
:: [] Copying ib_buffer_pool to /data/pxb/--24_02--/ib_buffer_pool
:: [] ...done
:: Backup created in directory '/data/pxb/2017-04-24_02-46-11/'
MySQL binlog position: filename 'mysql-bin.000002', position ''
:: [] Writing backup-my.cnf
:: [] ...done
:: [] Writing xtrabackup_info
:: [] ...done
xtrabackup: Transaction log of lsn () to () was copied.
:: completed OK!
可以看到整个备份过程:连接数据库,开始拷贝redo log,拷贝innodb表文件,锁表、拷贝非innodb表文件,停止拷贝redo log,解锁。
查看生成的文件:
[root@centos6 pxb]# ll --24_02--/
总用量
-rw-r----- root root 4月 : backup-my.cnf
-rw-r----- root root 4月 : ib_buffer_pool
-rw-r----- root root 4月 : ibdata1
drwxr-x--- root root 4月 : mysql
drwxr-x--- root root 4月 : performance_schema
drwxr-x--- root root 4月 : sys
drwxr-x--- root root 4月 : test
drwxr-x--- root root 4月 : test1
-rw-r----- root root 4月 : xtrabackup_binlog_info
-rw-r----- root root 4月 : xtrabackup_checkpoints
-rw-r----- root root 4月 : xtrabackup_info
-rw-r----- root root 4月 : xtrabackup_logfile
其中,mysql/, performance_schema/, sys/ ,test/ ,test1/ 下存放的是数据库文件。
backup-my.cnf,备份命令用到的配置选项信息;
[root@centos6 --24_02--]# cat backup-my.cnf
# This MySQL options file was generated by innobackupex. # The MySQL server
[mysqld]
innodb_checksum_algorithm=innodb
innodb_log_checksum_algorithm=strict_crc32
innodb_data_file_path=ibdata1:12M:autoextend
innodb_log_files_in_group=
innodb_log_file_size=
innodb_fast_checksum=false
innodb_page_size=
innodb_log_block_size=
innodb_undo_directory=./
innodb_undo_tablespaces=
server_id= redo_log_version=
ib_buffer_pool, buffer pool 中的热数据,当设置 innodb_buffer_pool_dump_at_shutdown=1 ,在关闭 MySQL 时,会把内存中的热数据保存在磁盘里 ib_buffer_pool 文件中,位于数据目录下。
ibdata1,备份的共享表空间文件;
xtrabackup_binlog_info,mysql服务器当前正在使用的二进制日志文件及至备份这一刻为止二进制日志事件的位置;
[root@centos6 --24_02--]# cat xtrabackup_binlog_info
mysql-bin.
xtrabackup_checkpoints,备份类型(如完全或增量)、备份状态(如是否已经为prepared状态)和LSN(日志序列号)范围信息;
[root@centos6 --24_02--]# cat xtrabackup_checkpoints
backup_type = full-backuped
from_lsn =
to_lsn =
last_lsn =
compact =
recover_binlog_info =
xtrabackup_info,记录备份的基本信息,uuid、备份命令、备份时间、binlog、LSN、以及其他加密压缩等信息。
[root@centos6 --24_02--]# cat xtrabackup_info
uuid = 216881a3--11e7-bc84-080027b387ba
name =
tool_name = innobackupex
tool_command = --defaults-file=/etc/my.cnf --user=pxb --password=... --socket=/tmp/mysql.sock /data/pxb
tool_version = 2.4.
ibbackup_version = 2.4.
server_version = 5.7.-log
start_time = -- ::
end_time = -- ::
lock_time =
binlog_pos = filename 'mysql-bin.000002', position ''
innodb_from_lsn =
innodb_to_lsn =
partial = N
incremental = N
format = file
compact = N
compressed = N
encrypted = N
xtrabackup_logfile,备份的重做日志文件。
2. 全备恢复
关闭数据库并删除数据文件
[root@centos6 data]# /etc/init.d/mysqld stop
Shutting down MySQL.. [确定]
[root@centos6 mysql]# cd /home/mysql
[root@centos6 mysql]# mv data/ data_bak/
[root@centos6 mysql]# mkdir data
准备(prepare)一个完全备份: --apply-log ( /data/pxb/2017-04-24_02-46-11/ 为备份目录,执行之后 xtrabackup_checkpoints 文件中的 backup_type = full-prepared )
[root@centos6 mysql]# innobackupex --apply-log /data/pxb/--24_02--/
:: innobackupex: Starting the apply-log operation IMPORTANT: Please check that the apply-log run completes successfully.
At the end of a successful apply-log run innobackupex
prints "completed OK!". ………… InnoDB: 5.7. started; log sequence number
xtrabackup: starting shutdown with innodb_fast_shutdown =
InnoDB: FTS optimize thread exiting.
InnoDB: Starting shutdown...
InnoDB: Shutdown completed; log sequence number
:: completed OK!
执行恢复操作:
[root@centos6 --24_02--]# innobackupex --defaults-file=/etc/my.cnf --copy-back --rsync /data/pxb/--24_02--/
:: innobackupex: Starting the copy-back operation IMPORTANT: Please check that the copy-back run completes successfully.
At the end of a successful copy-back run innobackupex
prints "completed OK!". innobackupex version 2.4. based on MySQL server 5.7. Linux (x86_64) (revision id: 8ec05b7)
:: [] Copying ib_logfile0 to /home/mysql/data/ib_logfile0
:: [] ...done
:: [] Copying ib_logfile1 to /home/mysql/data/ib_logfile1
:: [] ...done
:: [] Copying ibdata1 to /home/mysql/data/ibdata1
:: [] ...done …… :: [] Copying ./xtrabackup_info to /home/mysql/data/xtrabackup_info
:: [] ...done
:: [] Copying ./xtrabackup_binlog_pos_innodb to /home/mysql/data/xtrabackup_binlog_pos_innodb
:: [] ...done
:: completed OK!
更改 data/ 目录权限并启动mysql:
[root@centos6 mysql]# chown -R mysql.mysql data/
[root@centos6 data]# /etc/init.d/mysqld start
Starting MySQL. [确定]
可以看到数据库和表均已恢复:
mysql> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| performance_schema |
| sys |
| test |
| test1 |
+--------------------+
6 rows in set (0.00 sec)
xtrabackup 增量备份恢复
我们以之前做的全备为基准,在其基础上做增量备份:
##新建一张表,并插入数据作为增量##
mysql> create table tb2 (id int,name varchar(40));
Query OK, 0 rows affected (0.06 sec) mysql> insert into tb2 values (1,'aaa'),(2,'bbb'),(3,'ccc'),(26,'zzz');
Query OK, 4 rows affected (0.01 sec)
Records: 4 Duplicates: 0 Warnings: 0 mysql> select * from tb2;
+------+------+
| id | name |
+------+------+
| 1 | aaa |
| 2 | bbb |
| 3 | ccc |
| 26 | zzz |
+------+------+
4 rows in set (0.00 sec)
增量备份1:( 以全备为基准:/data/pxb/2017-04-24_02-46-11/ )
[root@centos6 pxb]# innobackupex --defaults-file=/etc/my.cnf --user=pxb --password= --socket=/tmp/mysql.sock --incremental /data/pxb/inc --incremental-basedir=/data/pxb/--24_02--/ --parallel= [root@centos6 --28_01--]# cat xtrabackup_checkpoints
backup_type = incremental ##说明是增量备份
from_lsn =
to_lsn =
last_lsn =
compact =
recover_binlog_info =
再往 tb2 里插入数据:
mysql> insert into tb2 values (201,'aaa'),(202,'bbb'),(203,'ccc'),(326,'zzz');
Query OK, 4 rows affected (0.12 sec)
Records: 4 Duplicates: 0 Warnings: 0 mysql>
mysql> select * from tb2;
+------+------+
| id | name |
+------+------+
| 1 | aaa |
| 2 | bbb |
| 3 | ccc |
| 26 | zzz |
| 201 | aaa |
| 202 | bbb |
| 203 | ccc |
| 326 | zzz |
+------+------+
8 rows in set (0.00 sec)
增量备份2:( 以增量1为基准:/data/pxb/inc/2017-04-28_01-09-40/ )
innobackupex --defaults-file=/etc/my.cnf --user=pxb --password= --socket=/tmp/mysql.sock --incremental /data/pxb/inc --incremental-basedir=/data/pxb/inc/--28_01--/ --parallel= [root@centos6 --28_01--]# cat xtrabackup_checkpoints
backup_type = incremental
from_lsn =
to_lsn =
last_lsn =
compact =
recover_binlog_info =
增量备份的恢复
增量备份的恢复需要有3个步骤
- 恢复完全备份
- 恢复增量备份到完全备份(开始恢复的增量备份要添加--redo-only参数,到最后一次增量备份要去掉--redo-only)
- 对整体的完全备份进行恢复,回滚未提交的数据
##准备一个全备##
[root@centos6 pxb]# innobackupex --apply-log --redo-only /data/pxb/--24_02--/ xtrabackup: starting shutdown with innodb_fast_shutdown =
InnoDB: Starting shutdown...
InnoDB: Shutdown completed; log sequence number
InnoDB: Number of pools:
:: completed OK! ##将增量1应用到完全备份##
[root@centos6 pxb]# innobackupex --apply-log --redo-only /data/pxb/--24_02--/ --incremental-dir=/data/pxb/inc/--28_01--/ ##将增量2应用到完全备份,注意不加 --redo-only 参数了##
[root@centos6 pxb]# innobackupex --apply-log /data/pxb/--24_02--/ --incremental-dir=/data/pxb/inc/--28_01--/ ##把所有合在一起的完全备份整体进行一次apply操作,回滚未提交的数据##
[root@centos6 pxb]# innobackupex --apply-log /data/pxb/--24_02--/
xtrabackup: Log applied to lsn
xtrabackup: The intended lsn is
模拟测试:
mysql> drop table tb2;
Query OK, rows affected (0.05 sec) [root@centos6 mysql]# /etc/init.d/mysqld stop
[root@centos6 mysql]# mv data data_bak2
[root@centos6 mysql]# mkdir data
innobackupex --defaults-file=/etc/my.cnf --copy-back --rsync /data/pxb/--24_02--/
[root@centos6 mysql]# chown -R mysql:mysql data/
[root@centos6 mysql]# /etc/init.d/mysqld start ##数据已经恢复##
mysql> select * from tb2;
+------+------+
| id | name |
+------+------+
| | aaa |
| | bbb |
| | ccc |
| | zzz |
| | aaa |
| | bbb |
| | ccc |
| | zzz |
+------+------+
rows in set (0.01 sec)
XtraBackup 备份与恢复实例讲解的更多相关文章
- float实例讲解
float实例讲解 float是个强大的属性,在实际前端开发过程中,人们经常拿它来进行布局,但有时,使用的不好,也麻烦多多啊. 比如,现在我们要实现一个两列布局,左边的列,宽度固定:右边的列,宽度自动 ...
- S3C2440上RTC时钟驱动开发实例讲解(转载)
嵌入式Linux之我行,主要讲述和总结了本人在学习嵌入式linux中的每个步骤.一为总结经验,二希望能给想入门嵌入式Linux的朋友提供方便.如有错误之处,谢请指正. 共享资源,欢迎转载:http:/ ...
- 实例讲解Oracle数据库设置默认表空间问题
实例讲解Oracle数据库设置默认表空间问题 实例讲解Oracle数据库设置默认表空间问题,阅读实例讲解Oracle数据库设置默认表空间问题,DBA们经常会遇到一个这样令人头疼的问题:不知道谁在O ...
- 基于tcpdump实例讲解TCP/IP协议
前言 虽然网络编程的socket大家很多都会操作,但是很多还是不熟悉socket编程中,底层TCP/IP协议的交互过程,本文会一个简单的客户端程序和服务端程序的交互过程,使用tcpdump抓包,实例讲 ...
- makefile基础实例讲解 分类: C/C++ 2015-03-16 10:11 66人阅读 评论(0) 收藏
一.makefile简介 定义:makefile定义了软件开发过程中,项目工程编译链.接接的方法和规则. 产生:由IDE自动生成或者开发者手动书写. 作用:Unix(MAC OS.Solars)和Li ...
- 实例讲解Linux系统中硬链接与软链接的创建
导读 Linux链接分两种,一种被称为硬链接(Hard Link),另一种被称为符号链接(Symbolic Link).默认情况下,ln命令产生硬链接.硬链接与软链接的区别从根本上要从Inode节点说 ...
- spring事务传播机制实例讲解
http://kingj.iteye.com/blog/1680350 spring事务传播机制实例讲解 博客分类: spring java历险 天温习spring的事务处理机制,总结 ...
- 实例讲解MySQL联合查询
好了终于贴完了MySQL联合查询的内容了,加上上一篇一共2篇,都是我转载的,实例讲解MySQL联合查询.那下面就具体讲讲简单的JOIN的用法了.首先我们假设有2个表A和B,他们的表结构和字段分别为: ...
- Html代码seo优化最佳布局实例讲解
搜索引擎对html代码是非常优化的,所以html的优化是做好推广的第一步.一个符合seo规则的代码大体如下界面所示. 1.<!–木庄网络博客–> 这个东西是些页面注释的,可以在这里加我的& ...
随机推荐
- Spring单例Bean和线程安全
Spring的bean默认都是单例的,这些单例Bean在多线程程序下如何保证线程安全呢?例如对于Web应用来说,Web容器对于每个用户请求都创建一个单独的Sevlet线程来处理请求,引入Spring框 ...
- 西安电子科技大学第16届程序设计竞赛 B Words Game
链接:https://www.nowcoder.com/acm/contest/107/B来源:牛客网 Words Game 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 13107 ...
- UE4模型导入基础教程
转自:http://www.unrealchina.net/portal.php?mod=view&aid=290
- webpack3.x看这个就够了
本文介绍webpack3.x的使用 说明,本文前后连贯性很强,建议从头往后看 目录 开始 css文件打包 image文件打包 字体文件打包 json文件打包 csv文件和xml文件打包 多入口文件打包 ...
- FFmpeg结构体:AVInputFormat
1.描述 AVInputFormat 是类似COM 接口的数据结构,表示输入文件容器格式,着重于功能函数,一种文件容器格式对应一个AVInputFormat 结构,在程序运行时有多个实例,位于avof ...
- MySQL学习笔记之一---字符编码和字符集
前言: 一般来说,出现中文乱码,都是客户端和服务端字符集不匹配导致的原因. (默认未指定字符集创建的数据库表,都是latinl字符集, 强烈建议使用utf8字符集) 保证不出现乱码的思想:保证客户 ...
- JDBC批处理数据
JDBC3.0 的增强支持BLOB,CLOB,ARRAY,REF数据类型.的ResultSet对象UPDATEBLOB(),updateCLOB(),updateArray()和updateRef( ...
- TCP/IP 笔记 1.2 链 路 层
都是包含三种类型.根据类型字段的值来进行区分 2.4 SLIP:串行线路IPS L I P的全称是Serial Line IP.它是一种在串行线路上对 I P数据报进行封装的简单形式,在RFC 105 ...
- DB2--sql计算时间差和格式化时间
格式化时间 db2 格式化时间使用的 TO_CHAR(TIMESTAMP('2017-10-24 21:18:12'),'YYYY-MM-DD'): 测试sql:SELECT TO_CHAR(TIME ...
- Mat类
1.Mat类 早期的opencv中,使用IplImage和CvMat数据结构来表示图像.IplImage和 CvMat 都是c语言的结构.使用这两个结构的问题是内存需要手动管理,开发者必须清楚的知道何 ...