Xtrabackup备份与恢复,备份系统恢复到新硬盘

概述

今天主要通过一个实验来简单介绍一下如何用XtraBackup 实现全备&增量备份与恢复的全过程~

官方手册:https://www.percona.com/doc/percona-xtrabackup/2.4/index.html

一、xtrabackup备份过程解析

第一阶段:检查与连接的准备阶段

执行备份命令之后,备份开始,XtraBackup工具尝试去连接MySQL服务器,连接成功之后,执行MySQL版本检查,版本检查完毕。使用给定的用户、密码、端口、socket文件连接使用5.7.22版本的MySQL服务器。

第二阶段:持续拷贝redo log

这部分内容并没有在备份的输出日志里体现,推测通过开启general log可以看到,也不一定,也许要通过源码才能看到。

修正:我的测试备份环境是一个静止的数据库,在备份时,既没有发生写操作,也没有发生读操作。所以没有看到一直在做”输出看到大量log scanned up to (xxx),对应就是持续扫描redo log”

第三阶段:拷贝ibdata1和ibd文件

xtrabackup进程开始执行一系列工作

1、调用系统函数posix_fadvise(),该函数是用来清理缓存的,不太理解此处使用的意图?了解的童鞋给我科普下,谢谢。

2、进入到/data/mysql/mysql3306/data目录下面

3、把打开文件请求限制调整为65535

4、使用以下InnoDB配置:

innodb_data_home_dir = .

#innodb数据存放在当前目录

innodb_data_file_path = ibdata1:100M:autoextend

#innodb共享表空间文件为1个,初始大小为100M,类型为自动扩展

innodb_log_group_home_dir = ./

#innodb日志文件存放在当前目录

innodb_log_files_in_group = 3

#innodb日志文件个数为3个

innodb_log_file_size = 104857600

#innodb日志文件大小为100M

5、使用O_DIRECT标志,目的为绕过缓冲区高速缓存,直接把数据传递到文件或设备,实际就是无需缓存来拷贝数据

6、默认使用单线程进行备份

7、日志扫描到2643241字节的位置

8、形成一个表表空间的列表

9、为mysql/plugin分配表空间为2,旧的最大值是0

10、把ibdata1文件拷贝到备份目录下面,直到完成

11、把ibd文件拷贝到备份目录下面,直到所有的ibd文件拷贝完成

第四阶段:备份非事务表的准备阶段

innobackupex进程开始执行一系列工作

1、扫描日志文件到2643241,这是已经写入redo的LSN

2、执行FLUSH TABLES,关闭所有打开的表,使用NO_WRITE_TO_BINLOG选项,也就是该语句不会被记录到binlog里面

3、执行FTWRL,使用全局读锁来锁定整个实例

第五阶段:备份非事务表

开始拷贝非innodb引擎表和文件,包括所有的.frm文件等,直到所有的都拷贝完成

修正:

.frm文件:保存了每个表的元数据,包括表结构的定义等;

.ibd文件:InnoDB引擎开启了独立表空间(my.ini中配置innodb_file_per_table = 1)产生的存放该表的数据和索引的文件。

第六阶段:整个备份完成后的后续工作

1、开始写xtrabackup_binlog_info文件,此处推测,获取执行过的GTID值和位点信息的语句在general log里面有记录

2、执行引擎的日志刷新,也就是把日志刷新到磁盘

3、最后的检查点是2643232字节的位置,也就是数据持久化到的LSN

4、停止拷贝线程

5、扫描日志文件到2643241

6、执行UNLOCK TABLES,释放全局读锁

7、开始拷贝ib_buffer_pool,直到拷贝完成,这是一堆数字,不知道做什么用处,了解的童鞋给我科普下,谢谢。

修正:拷贝缓冲池里的数据,以备恢复后,可以快速加载和预热访问量最高的数据。

8、打印出备份结束的位点和执行过的GTID值

9、写backup-my.cnf文件

10、写xtrabckup_info

11、LSN从2643232到2643241的事务日志拷贝完成

12、打印备份成功的标志,completed OK!

二、实验–xtrabackup全备

1、事前准备

1.1、建用户及授权

CREATE USER 'bkpuser'@'localhost' IDENTIFIED BY 'bkpuser@1234';

GRANT RELOAD, LOCK TABLES, PROCESS, REPLICATION CLIENT,super ON *.* TO 'bkpuser'@'localhost';

FLUSH PRIVILEGES;

1.2、准备测试数据

CREATE DATABASE TEST;

USE TEST;

CREATE TABLE t(id int primary key, name varchar(16),insert_date datetime);

INSERT INTO t VALUES(1,'full1',now()),(2,'full2',now()),(3,'full3',now()),(4,'full4',now()),(5,'full5',now());

1.3、创建备份目录

 mkdir -p /data/backup/

2、全备

 xtrabackup --user=bkpuser --password="bkpuser@1234" --backup --target-dir=/data/backup/

 

 

 

备份目录下面的各项文件说明

1)xtrabackup_checkpoints —— 备份类型(如完全或增量)、备份状态(如是否已经为prepared状态)和LSN(日志序列号)范围信息;

2)每个InnoDB页(通常为16k大小)都会包含一个日志序列号,即LSN。LSN是整个数据库系统的系统版本号,每个页面相关的LSN能够表明此页面最近是如何发生改变的。

3)xtrabackup_binlog_info —— mysql服务器当前正在使用的二进制日志文件及至备份这一刻为止二进制日志事件的位置。

4)xtrabackup_binlog_pos_innodb —— 二进制日志文件及用于InnoDB或XtraDB表的二进制日志文件的当前position

5)xtrabackup_binary —— 备份中用到的xtrabackup的可执行文件;

6)backup-my.cnf —— 备份命令用到的配置选项信息;

3、Preparing a backup

The xtrabackup –prepare step makes the files perfectly consistent at a single instant in time, so you can run InnoDB on them.

You can run the prepare operation on any machine; it does not need to be on the originating server or the server to which you intend to restore. You can copy the backup to a utility server and prepare it there.

 xtrabackup --prepare --target-dir=/data/backup

 

 

4、Restoring a Backup

For convenience xtrabackup binary has an xtrabackup –copy-back option, which will copy the backup to the server’s datadir:

--停止目的端数据库

systemctl stop mysqld

--删除数据文件内容

cp -rf /fsl_data/datafile/ /fsl_data/datafile_bak

rm -rf /fsl_data/datafile/*

--恢复数据库

xtrabackup --copy-back --target-dir=/data/backup

--授权

chown -R mysql:mysql datafile

chmod -R 755 datafile

systemctl restart mysqld

 

 

5、重启后校验

 systemctl restart mysqld

 

三、实验–xtrabackup增备

1、基于全备的增备

1.1、插入测试数据

use test;

INSERT INTO t VALUES(6,'incr_1',now()),(7,'incr_2',now());

1.2、创建目录

 mkdir -p /data/backup_incr

1.3、基于全备的增备

Now that you have a full backup, you can make an incremental backup based on it. Use the following command

开始第一次增备,只要全备和多个增备的LSN号连续,那么就可以逐个进行恢复。可以再备份目录xtrabackup_checkpoints文件中看到,其中全备的from_lsn=0,增备的from_lsn应该等于上一个增备或者全备的to_lsn

xtrabackup --user=bkpuser --password="bkpuser@1234" --backup --target-dir=/data/backup_incr \

    --incremental-basedir=/data/backup/

说明:–incremental-basedir是上次全备或者增备出来的文件夹。当第一次增备的时候,一般填上次全备,第二次增备的时候,如果–incremental-basedir填上次全备,那么本次增备就会包含上次全备到现在变化的内容,相当于oracle依次做1级,2级,3级。。。增备如果–incremental-basedir填第一次增备的目录,那么该次增备只包含第一次增备到现在的变化,文件会更小,相当于oracle rman里面每次都做1级增备。

 

 

 

2、基于增备的增备

2.1、插入数据

use test;

INSERT INTO t VALUES(8,'incr_incr1',now()),(9,'incr_incr2',now());

2.2、创建目录

 mkdir -p /backup/backup_incr2

2.3、基于增备的增备

xtrabackup --user=bkpuser --password="bkpuser@1234" --backup --target-dir=/data/backup_incr2 \

    --incremental-basedir=/data/backup_incr xtrabackup --user=bkpuser --password="bkpuser@1234" --backup --target-dir=/data/backup_incr2 \    --incremental-basedir=/data/backup_incr

 

 

 

3、prepare

这里依然要做prepare,而且是做两次prepare,第一次是把全备给prepare,不过这次和上次不一样,这次要加入–apply-log-only参数,因为在每个备份过程中,都会碰到一些事务进来执行,而备份结束时可能有些事务并没有执行完毕,所以在默认prepare中这些事务就会被回滚(rollback),而加入了–apply-log-only就不会回滚这些事务,而是等待prepare下次增备。第二次prepare就是准备第一次增备的目录,这个prepare目的就是把第一次增备期间发生的变化写入到全备的目录中去,然后第一次增备的目录就没有用处了,因为我们最终拷贝表空间文件是把增备目录拷贝过去。无论多少个增备,最后prepare的那个增备是不能加–apply-log-only参数的,因为最后一次增备还没有完成的事务就要彻底回滚来保证一致性。

3.1、prepare全备

 xtrabackup --prepare --apply-log-only --target-dir=/data/backup

3.2、prepare第一次增备

 xtrabackup --prepare --apply-log-only --target-dir=/data/backup --incremental-dir=/data/backup_incr

3.3、prepare第二次增备

 xtrabackup --prepare --target-dir=/data/backup --incremental-dir=/data/backup_incr2

 

4、Restoring a Backup

For convenience xtrabackup binary has an xtrabackup –copy-back option, which will copy the backup to the server’s datadir:

--停止目的端数据库

systemctl stop mysqld

--删除数据文件内容

cp -rf /fsl_data/datafile/ /fsl_data/datafile_bak

rm -rf /fsl_data/datafile/*

--恢复数据库

xtrabackup --copy-back --target-dir=/data/backup

--授权

chown -R mysql:mysql datafile

chmod -R 755 datafile

systemctl restart mysqld

 

 

5、重启后校验

 systemctl restart mysqld

本文来自投稿,不代表展天博客立场,如若转载,请注明出处:https://www.me900.com/327011.html

(0)

相关推荐

  • 一二三四五六七的繁体字怎么写(繁体字零一二三四五六七八怎么写)

    提起大写的壹貮叁肆伍陆柒捌玖拾,估计会有一部分人仍会写错,这类大写是我们日常一二三四五汉字数字的复杂写法,用于记账和文件之中,同样是我国汉字文化的一部分,我们应该加以学习记忆,并且熟练书写。 关于汉字数字大写写法的历史渊源主要有三种说法,一说是由于明初的重大贪污案,朱元璋为扼制贪污腐败,而将一二三四五改为壹貮叁肆伍等,被誉为中国历史上金额数字大写的首创。第二…

    2021-12-28
  • chatgpt入口,chat gpt 3.5免费版

    《关于“chatgpt入口”的全面探讨》 一、什么是chatgpt入口? 也许你在互联网的海洋中畅游时,偶尔会听到“chatgpt入口”这个词汇。 它究竟是什么呢?从字面意思来看,“chatgpt”可能是指一个特定的人工智能聊天模型,而“入口”则像是进入这个神奇世界的通道。 我觉得它就像是一个神秘的大门,一旦找到并打开,就能够与这个强大的人工智能进行交互。 …

    投稿 2025-03-24
  • 最佳旅行攻略 了解巴西里约热内卢的最佳经验

    巴西的里约热内卢是世界上最美丽的城市之一,但每个人都知道它并不是最安全的地方。这是否意味着你别去这里旅游,当然不是!虽然巴西很漂亮,但你绝对应该提高警惕。在里约热内卢,你有两个规则:警惕和快乐!为了帮助你遵守这些规则,以下整理了一些重要的建议,让你在里约热内卢更好享受你的旅行。 1.从机场去市中心,如果你不得不乘坐出租车或机场巴士,选择黄色出租车。 6.如果…

    投稿 2023-06-01
  • 网上销售图书必须有实体店吗(网上售书)

    卖书还是一门好生意吗?从企业决策上看,答案可能相当积极。 比如卖书届两大老资历玩家京东和当当,就在世界读书日期间选择在线上大力促销的同时,或邀请名家领读,或把活动空间搬到线下——当当在北京三里屯街头设计了一间透明“厕所”,呼吁公众对阅读的关注。 也有一些新鲜面孔出现,拼多多在4月中旬宣布以5000万读书基金为部分图书进行专项补贴,并在部分搜索栏下方留出文字链…

    2021-11-29 投稿
  • 日本212狂喷奶水事件(212是什么意思啊)

    就在昨天,QQ群以及QQ空间都在热传一个话题“212视频”,但多数网友对于该事件是什么内容,如何发生的都一无所知,其实,这件事追根究底与2月12日凌晨,有营销号往QQ群QQ空间传色情视频有关。而随后,就出现了一则腾讯处罚“212事件”相关高官的假消息。 据悉,在2019年2月12日1时左右,发生2小时后,QQ运营团队相关单位才发现,并且制止行动启动慢,时间长…

    2022-01-10
  • 尼泊尔亚洲,尼泊尔是一个怎样的国家

      尼泊尔的全称叫做尼泊尔联邦民主共和国,是一个联邦制国家。尼泊尔地处喜马拉雅山南麓,夹在中国”龙”与印度”巨象”之间,没有什么太大的存在感。在历史上,尼泊尔曾是清王朝的藩属国之一,后来被英国人占领。 尼泊尔是一个南亚地区的内陆山国,位于喜马拉雅山中段南麓,十分封闭和贫穷。在1971年时,联合国曾将尼…

    2023-07-05 投稿
  • 现在最佳旅游地,现在旅游必须去的地方推荐

    在你的印象里,中国哪些地方最美呢?有人会说是**,也有人会说是新疆,还有人最向往云南的四季如春和贵州的奇异山峦,甚至,还有多彩的四川。然而,被《孤独星球》评选出的,亚洲最佳的旅游地,却是甘肃! 没错,就是那个在很多人的印象里尽是沙漠的甘肃,正是那个“大漠孤烟直,长河落日圆”的甘肃。但是,甘肃绝不仅仅有沙漠,应该说,除了海洋,它拥有了我国全部的地貌,包括湖泊和…

    2022-05-03 投稿
  • 画家张也简历及个人资料(张也个人资料及图片)

    有人说,中国画家的作假,以张大千最厉害,他当时曾以做石涛等人的假画骗过许多有眼力的人,同时张也从中获利不少。到了几十年后的今天,在近现代画家中被人作假最多的画家竟然是张大千,真是报应。假画多的还有齐白石、黄宾虹、李可染等,主要是这些画家的画销路好,连假画都能卖高价。作假者无法无天,无本万利。 有人说,张大千不过是作假高手,不能称什么大师。这话有点偏颇了。张大…

    2022-01-02 投稿
  • 牙科价目收费表(牙齿补个洞大概多少钱)

    (接上回)上回说到小李紧邻上次拔牙的那颗牙的后牙又牙痛,疼的小李没办法,只得又去看牙,换了一个牙科,牙医罗大夫,又给他看了牙,钻了洞,把牙神经给杀死了。 牙神经被杀死了,牙是不痛了。可是过了一段时间,还得去补牙洞。 从上次去看牙,已经过去二十多天了,该去补牙洞了,今天刚好礼拜天,借助休息天,小李来到了牙科,见到罗大夫。罗大夫正在忙着看呀,小李只能在外面等着。…

    2023-04-16
  • 今年做什么生意好赚钱?疫情后做什么生意赚钱快

    商业的本质就是,满足那些“未被满足”的需求。 因此,只要新事物不断出现,就一定需要新的技能来满足。 今天讲讲2022年的7个赚钱机会,希望给你一点启发。 关于消费 消费大概会形成一个两级分化的趋势,一部分人消费升级,另一部分人消费降级。 根据以往的商业逻辑,更多的人会关注消费升级,但是其实消费降级也是一个很大的市场。 在某音上,二手奢侈品变成了一个很火的赛道…

    2022-04-22 创业项目
  • 公司没有生产许可证可以生产吗(工厂没有生产许可证可以生产吗)

    企业没有安全生产许可证能生产吗?能够提出这样的问题,就意味着对方抱有侥幸心理。这种心理极不可取。在没有安全许可证的情况下违规生产,会造成严重后果,轻者被罚,重者停业整改。 一、会被吊销营业执照 如果企业在没有安全生产许可证的情况下,因为抱有侥幸心理而继续生产,一旦被有关部门发现,就会受到严厉的处罚,就会被吊销营业执照。这种情况比比皆是,并不少见。 二、会被处…

    投稿 2021-12-05
  • 12岁学生党如何快速赚钱,学生怎样快速赚钱

    大家都知道学生党的生活费是比较有限的,那学生党们都是怎么样赚取生活费的呢? 今日来给大家概括适合学生党赚钱小方法 一、发传单 这是认为这是最可靠的。在学校周围都有需要人发传单的店。大概是几十块钱一天,在冬天最适合做。夏季太热。发传单既不需要你有什么技能,也不需要其他的条件。 二、送外卖、代取快递 外卖这个也是很靠谱的。价格你要和老板商量,一般都是一元钱一个外…

    2022-04-27