Heim  >  Artikel  >  Datenbank  >  mysql5.6利用xtrabackup全备及增量备份

mysql5.6利用xtrabackup全备及增量备份

WBOY
WBOYOriginal
2016-06-07 14:54:36971Durchsuche

1.xtrabackup安装 650) this.width=650;" src="http://www.68idc.cn/help/uploads/allimg/151119/0Z5504108-0.jpg" title="1.png" alt="wKioL1Wl8x7DJM-GAAE5jG_ZhOQ428.jpg" /> 2.全备及恢复 (1)全备 查看数据库 650) this.width=650;" src="http://www.6

1.xtrabackup安装

wKioL1Wl8x7DJM-GAAE5jG_ZhOQ428.jpg

2.全备及恢复

(1)全备

查看数据库

wKioL1Wl84mx9d74AAIB-jOdUq0536.jpg

[root@local-db opt]# innobackupex --defaults-file=/etc/my.cnf  --user=root --password=123456 /bak/mysql/

该语句将拷贝数据文件(由my.cnf里的变量datadir指定)至备份目录下(/bak/mysql/),注意:如果不指定--defaults-file,默认值为/etc/my.cnf。

备份成功后,将在备份目录下创建一个时间戳目录(本例创建的目录为/bak/mysql/2015-07-08_18-52-43),在该目录下存放备份文件。

wKioL1Wl8y7SvLYqAACmcgZ_ULQ942.jpg

(2)恢复

删除数据库test123,尝试恢复

wKiom1Wl8V6SmyAsAADORLkMdjY006.jpg

恢复之前,要先关闭数据库,并且删除数据文件和日志文件。

wKioL1Wl80OQJVL6AAB-SB40w8o427.jpg

wKiom1Wl8WqA3Xc_AACUUkYv2TM009.jpg

[root@local-db opt]# innobackupex --defaults-file=/etc/my.cnf --user=root --password=123456 --apply-log /bak/mysql/2015-07-08_18-52-43/

[root@local-db opt]# innobackupex --defaults-file=/etc/my.cnf --user=root --password=123456  --copy-back /bak/mysql/2015-07-08_18-52-43/

恢复分为两个步骤:

第1步是apply-log,为了加快速度,一般建议设置--use-memory,这个步骤完成之后,目录/bak/mysql/2015-07-08_18-52-43/下的备份文件已经准备就绪。

第2步是copy-back,即把备份文件拷贝至原数据目录下。恢复完成之后,一定要记得检查数据目录的所有者和权限是否正确。

wKiom1Wl8XyjgkXjAADnTEmKT0k497.jpg

wKioL1Wl81axInYgAACruTPVzNU191.jpg


3.增量备份及恢复

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

(1)增量备份

增量备份需要基于全备,我们已经有了一个全备(/bak/mysql/2015-07-08_18-52-43/),我们需要在该全备的基础上做增量备份。

测试新建库,导入新数据,做增量备份。

wKiom1Wl8evC_m9FAACvnqlXuqg068.jpg

wKiom1Wl8evS8eSKAAC0qv0B26A606.jpg

[root@local-db mysql]# innobackupex --defaults-file=/etc/my.cnf  --user=root --password=123456 --incremental-basedir=/bak/mysql/2015-07-08_18-52-43/ --incremental /bak/mysql/ 

wKioL1Wl89uxZjleAABYqxRRGi8411.jpg

其中--incremental-basedir指向全备目录,--incremental指向增量备份的目录。

上面语句执行成功之后,会在--incremental执行的目录下创建一个时间戳子目录(本例中为:/bak/mysql/2015-07-08_19-46-30),在该目录下存放着增量备份的所有文件。

在备份目录下,有一个文件xtrabackup_checkpoints记录着备份信息,全备的信息如下:

wKiom1Wl8g_SIMqCAACseLV8Ox0437.jpg

基于该全备的增量备份的信息如下:

wKioL1Wl8_KjAj1vAADQ_W92QGU297.jpg

从上面可以看出,增量备份的from_lsn正好等于全备的to_lsn。

那么,我们是否可以在增量备份的基础上再做增量备份呢?答案是肯定的,只要把--incremental-basedir执行上一次增量备份的目录即可,如下所示:

[root@local-db mysql]# innobackupex --defaults-file=/etc/my.cnf  --user=root --password=123456 --incremental-basedir=/bak/mysql/2015-07-08_19-46-30/ --incremental /bak/mysql/

wKiom1Wl8iLAaZSNAABxDrxZu6o385.jpg

它的xtrabackup_checkpoints记录着备份信息如下:

wKioL1Wl9ATDhqlBAAFdcnuwZWA232.jpg

可以看到,该增量备份的from_lsn是从上一次增量备份的to_lsn开始的。

(2)恢复

删除数据库test456,尝试恢复

wKioL1Wl9A2hf6-_AAGld3rtD3c819.jpg

恢复之前,要先关闭数据库,并且删除数据文件和日志文件。

wKiom1Wl8kSylz_xAAB-SB40w8o654.jpg

wKioL1Wl9B2jcg_9AACUUkYv2TM881.jpg

增量备份的恢复比全备要复杂很多,第一步是在所有备份目录下重做已提交的日志,如:

[root@local-db mysql]# innobackupex --defaults-file=/etc/my.cnf  --user=root --password=123456  --apply-log --redo-only /bak/mysql/2015-07-08_18-52-43/

[root@local-db mysql]# innobackupex --defaults-file=/etc/my.cnf  --user=root --password=123456  --apply-log --redo-only /bak/mysql/2015-07-08_18-52-43/ --incremental-dir=/bak/mysql/2015-07-08_19-46-30/

[root@local-db mysql]# innobackupex --defaults-file=/etc/my.cnf  --user=root --password=123456  --apply-log --redo-only /bak/mysql/2015-07-08_18-52-43/ --incremental-dir=/bak/mysql/2015-07-08_21-01-19/

其中/bak/mysql/2015-07-08_18-52-43/是指全备目录,/bak/mysql/2015-07-08_19-46-30/是指第一次的增量备份,/bak/mysql/2015-07-08_21-01-19/是指第二次的增量备份,以此类推。

以上语句执行成功之后,最终数据在全备目录下。

第一步完成之后,我们开始第二步:回滚未完成的日志:

[root@local-db mysql]# innobackupex --defaults-file=/etc/my.cnf  --user=root --password=123456  --apply-log  /bak/mysql/2015-07-08_18-52-43/

上面执行完之后,/bak/mysql/2015-07-08_18-52-43/里的备份文件已完全准备就绪,最后一步是拷贝:

[root@local-db mysql]# innobackupex --defaults-file=/etc/my.cnf  --user=root --password=123456 --copy-back /bak/mysql/2015-07-08_18-52-43/

修改目录权限,启动mysql。

wKioL1Wl9C7xF2LPAAEM0FD8_eo215.jpg

修改目录权限,启动mysql。

恢复完成,如下图

wKiom1Wl8l7Bgh7iAADWtnSS1fk302.jpg



Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn