Xtrabackup 官网Review手稿

Edit

目录

xtrabackup 备份机制

Full Backups

Create a Backup

备份命令

xtrabackup--backup--target-dir=/Directory

如果InnoDB data 或者 log file不储存在同目录下,需要专门指定数据位置

如果目的文件夹不存在,xtrabackup会自动创建,如果目录存在并且为空,xtrabacup则执行成功。xtrabackup不会覆盖已经存在的文件 ,文件存在则会返回系统error : syserror error 17。

如果指定是的相对目录,则目的文件夹从当前目录开始。

备份过程中会有很多输出显示 数据文件的拷贝过程,

最后输出范例:

160906 10:19:17 Finished backing up non-InnoDB tables and files

160906 10:19:17 Executing FLUSH NO_WRITE_TO_BINLOG ENGINE LOGS...

xtrabackup: The latest check point (for incremental): '62988944'

xtrabackup: Stopping log copying thread.

160906 10:19:18 Executing UNLOCK TABLES

160906 10:19:18 All tables unlocked

160906 10:19:18 Backup created in directory '/data/backups/'

160906 10:19:18 [00] Writing backup-my.cnf

160906 10:19:18 [00] ...done

160906 10:19:18 [00] Writing xtrabackup_info

160906 10:19:18 [00] ...done

160906 10:19:18 completed OK!

在输出信息的最后,你会看到lsn依赖系统信息的lsn信息

xtrabackup: Transactionlogof lsn ()to() was copied.

Note

日志复制线程会时刻检查事务日志确认是否有新的需要被复制的日志记录,但是潜在风险是日志拷贝线程无法承受大并发事务日志的写入,如果旧日志被复写前检查线程没有读到也将触发错误。

备份结束后,目标文件来通常会包括如下这些文件,假设你已经有了一个单InnoDB表test.tbl1,那你的目录下通常会有这些文件 :

$ ls -lh /data/backups/

total 182M

drwx------7root root 4.0K Sep610:19 .

drwxrwxrwt 11 root root 4.0K Sep 6 11:05 ..

-rw-r----- 1 root root 387 Sep 6 10:19 backup-my.cnf

-rw-r----- 1 root root 76M Sep 6 10:19 ibdata1

drwx------2root root 4.0K Sep610:19 mysql

drwx------ 2 root root 4.0K Sep 6 10:19 performance_schema

drwx------ 2 root root 4.0K Sep 6 10:19 sbtest

drwx------ 2 root root 4.0K Sep 6 10:19 test

drwx------ 2 root root 4.0K Sep 6 10:19 world2

-rw-r----- 1 root root 116 Sep 6 10:19 xtrabackup_checkpoints

-rw-r----- 1 root root 433 Sep 6 10:19 xtrabackup_info

-rw-r-----1root root 106M Sep610:19 xtrabackup_logfile

备份时长取决于数据库容量大小,期间你可以任意停止,因为其不操作数据库。

Preparing a backup

做好备份后,这些备份要随意准备用来应对意外,随时可能被恢复。数据文件的时间点是不一致的直至他们真正被准备好,数据不一致是因为这些文件并非同时被复制,在这个拷贝的过程中程序还处于运行状态,而且拷贝后他们也随时可能会发生改变。如果我们使用提InnoDB引擎,InooDB在数据恢复前将检测脏数据然后自我销毁进程,即我们无法使用坏数据或者脏数据。--prepare该操作将保持数据的一致性,如此,才能真正用做数据恢复。

--prepare可以在任意安排有xtrabackup的主机上操作,无需在执行备份命令的服务器上操作,因此,我们可以复制备份到任意应用服务器来prepare。

Note

xtrabackup --prepare命令新版本支持向下兼容,但旧版本无法操作新版本。因此在其它机器上执行时一定要确认版本。举例:MySQL 5.0 使用 Xtrabackup 1.6版本备份, 使用xtrabackup 2.3版本进行preparing 备份是不支持,因为 MySQL 5.0的支持在 xtrabackup 2.1的时候被取消了,因此使用2.0的版本即可。

在Prepare期间,xtrabackup启动一种修改InnoDB的嵌入操作。这些变更需要禁用InnoDB的安全标准检查,比如: 日志文件大小检查。这些检查只是xtrabackup 二进制,我们不需要使用xtrabackup修改InnoDB。

prepare 使用 “embedded InnoDB”基于拷贝日志来为复制的备份修复损坏数据。命令使用很简单,只需要指定--prepare参数和要prepare的操作目录即可。

$xtrabackup--prepare--target-dir=/data/backups/

命令执行结束后,你将会看到InnoDB shutdown的信息,lsn的信息主要依赖于个人系统不同而不同。

InnoDB: Shutdown completed;logsequencenumber137345046

16090611:21:01completed OK!

如果已经做过prepare的修复操作或者无须修复,你将看到如下的类似信息。

xtrabackup:This target seems to be already prepared.

xtrabackup:notice:xtrabackup_logfile was already used to'--prepare'.

在preparing backup的过程最好不要意外中段,因为这将导致数据文件损坏,备份也将不可用。备份的有效性也会因为Prepare进程被中段而不可信。

Note

如果你还要使用以前的差量备份,你在prepareing的时候需要使用xtrabackup --apply-log-only参数,否则是无法使用差量 备份来恢复数据的。

Restoring a Backup

恢复前一定需要prepared

方便起见,xtrabackup使用 –copy-back 选项,该选项可以复制备份到服务器的数据文件 。

$ xtrabackup --copy-back--target-dir=/data/backups/

同样,也可以直接使用类型Linux下的move操作。xtrabackup --move-back

如果都不想使用,Linux下的系统命令 rsync 或者 cp都可以使用。

note

datadir的目标目录必须是空目录。操作之前MySQL服务必须处于关闭状态!!

$ rsync -avrP/data/backup/ /var/lib/mysql/

之前,也必须保持目录和恢复的文件的权限是正常的。如果不正常手动修正。

$ chown -Rmysql:mysql /var/lib/mysql

恢复完毕后,就可以启动MySQL服务了。

增量备份

备份原理

使用Innobackupex 做Local Full Backup: Create, Prepare 和 Restore

创建全备

$ innobackupex /data/backups

执行完命令后会有很多输出,看到类似如下的输出才算正常

10031302:43:07innobackupex: completed OK!

Prepare the Backup

使用 –apply-log 参数并指定全备的具体目录,为了提升速度,你可以指定 –use-memory来指定使用的内存大小

$ innobackupex --use-memory=4G --apply-log /data/backups/2010-03-13_02-42-44/

看到如下类似输出才算正常

10031302:51:02innobackupex: completed OK!

如此以来,/data/backups/2010-03-13_02-42-44 is 将被准备用于Retore。

恢复备份

stop 程序

执行innobackupex命令

innobackupex --copy-back /data/backups/2010-03-13_02-42-44/

## Use chmod to correct the permissions, if necessary!

Note

目标目录必须是空的。 innobackupex –copy-back 参数不会覆盖已经存在的文件 ,除非指定强制覆盖,nnobackupex –force-non-empty-directories 。首先MySQL的

差备

innobackupex--incremental/path/to/inc/dir--incremental-basedir=$FULLBACKUP--user=USER--password=PASSWORD

preparing 差备文件

prepare 全备文件

必须重新提交事情在每个全备文件上

innobackupex--apply-log--redo-only$FULLBACKUP--use-memory=1G--user=USER--password=PASSWORD

看到有类似如下输出时认为正常

11122501:10:12InnoDB: Shutdown completed;logsequence number91514213

prepare 差量文件

其次再应用到差备文件上。

innobackupex--apply-log--redo-only$FULLBACKUP

--incremental-dir=$INCREMENTALBACKUP

--use-memory=1G--user=DVADER--password=D4RKS1D3

全备

全备

xtrabackup--backup--target-dir=/data/backups/mysql/

prepare两次

xtrabackup --prepare --target-dir=/data/backups/mysql/

xtrabackup --prepare --target-dir=/data/backups/mysql/

第二次执行的时候要看到类似如下的输出:

In the second –prepare step, you should see InnoDB print messages similar to Log file ./ib_logfile0 did not exist: new to be created, followed by a line indicating the log file was created (creating new logs is the purpose of the second preparation).

差备

差备必须基于全备进行,所以 要先做全备

xtrabackup –backup –target-dir=/data/backups/mysql/

需要注意的是,这里一定不能运行--prepare命令

创建两次差备

Suppose the full backup is on Monday, and you will create an incremental one on Tuesday:

xtrabackup --backup --target-dir=/data/backups/inc/tue/ \

--incremental-basedir=/data/backups/mysql/

and the same policy is applied on Wednesday:

xtrabackup --backup --target-dir=/data/backups/inc/wed/ \

--incremental-basedir=/data/backups/inc/tue/

Prepare the base backup

Prepare the base backup (Monday’s backup):

xtrabackup --prepare --apply-log-only--target-dir=/data/backups/mysql/

Roll forward the base data to the first increment

Roll Monday’s data forward to the state on Tuesday:

xtrabackup --prepare --apply-log-only--target-dir=/data/backups/mysql/ \

--incremental-dir=/data/backups/inc/tue/

Roll forward again to the second increment

Roll forward again to the state on Wednesday:

xtrabackup --prepare --apply-log-only--target-dir=/data/backups/mysql/ \

--incremental-dir=/data/backups/inc/wed/

Prepare the whole backup to be ready to use

Create the new logs by preparing it:

xtrabackup --prepare --target-dir=/data/backups/mysql/

  • 发表于:
  • 原文链接http://kuaibao.qq.com/s/20180228A06MFJ00?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。

扫码关注云+社区

领取腾讯云代金券