首页 > 问答 > 关键词  > MySQL最新资讯  > 正文

MySQL数据备份及恢复教程 巧用xtrabackup工具备份恢复

2020-07-06 13:53 · 稿源:数据库干货铺
文章目录

本文将通过应用更为普遍的物理备份工具xtrabackup来演示数据备份及恢复的第二篇内容。

1. xtrabackup 工具的安装

1.1 安装依赖包

/*xtrabackup的使用需要安装相关的依赖包否则使用过程中会报相关错误*/yuminstall-yrsyncperllperl-Digest-MD5perlperl-devellibaiolibaio-develperl-Time-HiResperl-DBD-MySQL

1.2 下载及安装

去percona官网下载对应版本的安装包 https://www.percona.com/downloads , 因为每个版本对应的数据库版本不同,因此需要根据数据库的版本选择对应的xtrabackup的安装包.

当前测试使用的数据库为MySQL5.7 因此下载2. 4 版本https://www.percona.com/downloads/Percona-XtraBackup-2.4/LATEST/

另外,2.4. 10 及以后版本中,对libgcrypt进行了区分,因此也需要查询自己服务器的libgcrypt版本,然后选择对应的安装包

查看libgcrypt方法:

[root@testdb~]#yumlistinstalled|greplibgcrypt
libgcrypt.x86_641.5.3-14.el7@anaconda

然后下载对应包

/*二进制包*/wgethttps://www.percona.com/downloads/Percona-XtraBackup-2.4/Percona-XtraBackup-2.4.18/binary/tarball/percona-xtrabackup-2.4.18-Linux-x86_64.libgcrypt153.tar.gz/*rpm包*/wgethttps://www.percona.com/downloads/Percona-XtraBackup-2.4/Percona-XtraBackup-2.4.18/binary/redhat/7/x86_64/Percona-XtraBackup-2.4.18-r29b4ca5-el7-x86_64-bundle.tar

二进制包解压后即可使用,rpm包下载解压后 rpm -ivh 安装即可。操作均很简单,此处略过

xtrabackup通常使用innobackupex命令, 可以使用 innobackupex --help 命令查看参数及说明。

其中常用参数及说明如下:

--defaults-file待备份mysql实例的配置文件--user=USER备份用户,默认为当前系统用户,建议使用备份专用账号--password=PASSWD备份用户密码--port=PORT数据库端口,默认3306--host=HOST需备份数据库的IP--apply-log前滚、回滚日志,恢复前用--database指定需要备份的数据库,多个数据库之间以空格分开--copy-back将备份数据复制到目标路径--incremental增量备份,后面接的参数值为指定的增量备份的路径--incremental-basedir=DIRECTORY增量备份时使用指向上一次的增量备份所在的目录--incremental-dir=DIRECTORY增量备份还原的时候用来合并增量备份到全量,用来指定全备路径--redo-only对增量备份进行合并--rsync加快本地文件传输,适用于non-InnoDB数据库引擎。不与--stream共用--no-timestamp生成的备份文件不以时间戳为目录

1.3 创建备份账号

备份的账号建议单独创建,并授予相关权限

mysql>CREATEUSER'backup'@'localhost'IDENTIFIEDBY'Backup@123.com';
mysql>GRANTSUPER,RELOAD,LOCKTABLES,PROCESS,REPLICATIONCLIENTON*.*TO'backup'@'localhost';
mysql>FLUSHPRIVILEGES;

2. 全量备份

2.1 本地全量备份,不压缩

后续会以此为基础进行增量备份

/*创建备份结果的目录,此步骤也可以省略*/mkdirall_backup/*开始全量备份*//root/xtrabackup/bin/innobackupex--defaults-file=/app/data/mysql3306/etc/my.cnf--socket=/app/data/mysql3306/tmp/mysql.sock--port=3306--user=backup--password='Backup@123.com'--no-timestampall_backup

备份的结果存放在指定的目录 all_backup里,内容如下:

注: 如果没有添加阻塞DDL操作的参数,备份过程中如有DDL操作,备份将终止。因此建议日常备份放在从库中进行。

2.2 本地tar方式压缩备份

有时为了考虑磁盘空间问题,会在备份的时候直接压缩用以节约磁盘空间或解决磁盘空间不足以存放全量非压缩文件的问题。

/*gzip方式压缩*//root/xtrabackup/bin/innobackupex--defaults-file=/app/data/mysql3306/etc/my.cnf--socket=/tmp/mysql.sock--port=3306--user=backup--password='Backup@123.com'--stream=tar/tmp|gzip>all_backup.tar.gz

中间过程省略

备份后的结果是一个压缩文件,经过对比,压缩后数据约为非压缩情况下的20%,压缩比还是比较高的。

不过,压缩备份的方式速度相对较慢,且消耗CPU,该影响因素需要大家考虑到,视情况选择是否压缩。

注意: 如果有单表过大 而/tmp路径空间不足的情况备份过程中可能会报错,因此可以指定其他空间较大的目录

2.3 本地xbstream方式压缩备份

gzip的压缩方式备份可能会有bug(案例可以自行寻找),出现如下错误:

xtrabackup:error:Thetransactionlogfileiscorrupted.
xtrabackup:error:ThelogwasnotappliedtotheintendedLSN!

因此可以采用xbstream方式进行备份,备份命令如下:

/root/xtrabackup/bin/innobackupex--defaults-file=/app/data/mysql3306/etc/my.cnf--socket=/tmp/mysql.sock--port=3306--user=backup--password='Backup@123.com'/app/backup--tmpdir=/app/backup--stream=xbstream|gzip->all_backup.xbstream.gz

xbstream压缩备份的过程和tar一致,就不再解释了。

2.4 远程备份到其他机器

远程备份与本地备份的相比 需要额外的配置远程主机的免密登录权限

/*在备份所在用户的主机下配置连接目标主机的免密*/ssh-keygenssh-copy-id-iuser@'target_ip'

之后就可以将类似于本地备份的模式 将备份结果发送到远程机器

/root/xtrabackup/bin/innobackupex--defaults-file=/app/data/mysql3306/etc/my.cnf--socket=/tmp/mysql.sock--port=3306--user=backup--password='Backup@123.com'--stream=tar/tmp--no-timestamp|sshuser@'target_ip'"cat->/app/backup/remote_backup.tar"

备份过程中可以在目标机器看到对应的备份文件,完成后如下

注:

  • 远程备份的目录需要有写入权限
  • 另外,和备份备份一样,如果存在大表或超大事务运行时不建议使用/tmp目录

3. 增量备份

3.1 第一次增量备份

可以先根据2. 1 的本地全备的基础上进行增量备份,首次增量备份脚本如下:

/root/xtrabackup/bin/innobackupex--defaults-file=/app/data/mysql3306/etc/my.cnf--socket=/tmp/mysql.sock--port=3306--user=backup--password='Backup@123.com'--incremental/app/backup/--incremental-basedir=/app/backup/all_backup

此时,备份的结果放在/app/backup目录下,由于没指定no-timestamp参数,备份的结果存在在已三期时间命名的目录下:

备份的过程和全量备份很相似,但是备份结果是不一样的

结果如下

注:增量备份仅能应用于InnoDB或XtraDB表等事务表,对于MyISAM表而言,执行增量备份时依旧进行全量备份

3.2 第二次增量备份

第二次增量备份是在第一次增量备份的基础上进行,因此incremental-basedir参数内容指定为上一次增量备份的目录即可

/root/xtrabackup/bin/innobackupex--defaults-file=/app/data/mysql3306/etc/my.cnf--socket=/tmp/mysql.sock--port=3306--user=backup--password='Backup@123.com'--incremental/app/backup/--incremental-basedir=/app/backup/2020-03-25_14-47-37

完成后生成一个新的目录

4. 恢复

4.1 基于全量备份的恢复

4.1.1 回放日志

备份后的文件不能直接用作恢复,还需要先使用apply-log 做前滚和回滚

/root/xtrabackup/bin/innobackupex--defaults-file=./backup-my.cnf--apply-log/app/backup/all_backup

注: 回放日志的时候 defaults-file 选择备份目录里的即可

4.2.2 恢复至目标实例

本次恢复至一个新实例中(如果恢复至现有的实例需要先关闭目标实例,删除数据目录及相关日志存储的目录。不建议直接恢复至现有实例 ,除非实际需要)

/*创建新实例的相关目录*/
mkdir-p/app/data/mysql3307/{data,logs,tmp,etc}/*生产配置文件,本次直接拷贝其他实例的配置文件修改对应端口等*/cp/app/data/mysql3306/etc/my.cnf/app/data/mysql3307/etc/sed-i"s#3306#3307#g"my.cnf/*创建错误日志*/touch/app/data/mysql3307/logs/mysqld.log

然后拷贝至新实例中

/root/xtrabackup/bin/innobackupex--defaults-file=/app/data/mysql3307/etc/my.cnf--copy-back/app/backup/all_backup

修改目标实例相关目录的权限

chown-Rmysql:mysql/app/data/mysql3307

启动新实例即可

/usr/local/mysql5.7/bin/mysqld_safe--defaults-file=/app/data/mysql3307/etc/my.cnf&

恢复完毕

4.2 基于增量备份的恢复

如果是基于第一次增量备份的恢复,操作如下

/*使用合并增量备份的方式进行回放日志,先进行全量备份的合并*//root/xtrabackup/bin/innobackupex--apply-log--redo-only/app/backup/all_backup/*再合并第一次增量备份*/
/root/xtrabackup/bin/innobackupex--apply-log--redo-only/app/backup/all_backup--incremental-dir=/app/backup/2020-03-25_14-47-37

如果基于多次增量备份的恢复,则在全量备份及第一次增量备份的基础上继续合并后续的备份即可

/*基于第二次增量备份的合并*//root/xtrabackup/bin/innobackupex--apply-log--redo-only/app/backup/all_backup--incremental-dir=/app/backup/2020-03-25_15-06-28

之后的操作和全量备份的恢复一样即可。

5. 小结

基于xtrabackup2. 4 版本备份MySQL5. 7 数据库的主要方法及过程常用情况均已演示,结尾处再总结一下xtrabackup的主要优点:

  • 物理备份,备份速度快
  • 热备份、无需停机
  • 恢复速度快
  • 自动会对备份文件进行验证

本文只介绍了常用操作,还是有很多情况未做介绍,比如rds上的数据备份及还原等,请各位小伙伴自行探索,也可以与我讨论。

本文转载自微信公众号【数据库干货铺】。

  • 相关推荐
  • 大家在看
  • 三星Galaxy S22 Ultra-dummy单元出现在实拍中

    我们已经看到了三星即将推出的Galaxy S22系列的渲染,其中S22 Ultra系列呈现了一个有趣的背面设计,并有传闻说是s笔槽。现在,xleaks7和CoverPigtou联手让我们第一次看到了银河系S22 Ultra的一个虚拟单元,这是在现场照片。三星Galaxy S22超虚拟单元(图片:xleaks7 x CoverPigtou)该设备的整体形状与去年的Galaxy Note20 Ultra非常相似,这进一步强调了最近的传言,即它可能最终成为Note22 Ultra。基于OnLeaks的渲染,S22 Ultra/

  • 苹果AI主管Samy Bengio确认将出席Nvidia年度GTC会议

    在 11 月举行的 Nvidia 年度 GTC 会议上,苹果公司人工智能和机器学习研究高级主管萨米·本吉奥(Samy Bengio)将上台发言。NVIDIA 本周三宣布了参与本次会议的顶级发言人,除了 Bengio 之外还有来自 PayPal, Snap, Amazon, Facebook, Google 和 Epic Games 的高管们。NVIDIA 年度 GTC 会议将于 2021 年 11 月 8 日至 11 日举行,在活动中写道:“发言人分享最新的突破,这些突破正在改变世界上一些最大的行业,如医疗保健、运输、制

  • AirPods耳机的Find My寻物功能已被推迟至秋末上线

    苹果最近更新了其 iOS 15 功能页面,相关变化包括针对 AirPods Pro 和 AirPods Max 耳机 Find My 寻物功能的延迟上线。尽管这家库比蒂诺科技巨头没有给出具体的解释,但这并不意味着该功能无缘 iOS 15 的初始版本,只是被延期到了今年秋末而已。(图自:Apple 官网)与 AirPods 寻物功能一起跳票的,还有 SharePlay、Legacy Contacts、以及将驾照或各种颁发的身份证件添加到钱包 App 等功能。此外上个月的时候,苹果还将 iCloud Pr

  • 苹果Find My服务今天凌晨出现短暂故障 现已修复

    由于 Find My 服务的故障,部分 iPhone 用户无法使用硬件定位服务,不过苹果很快解决了这个问题。苹果公司的系统状态网页的更新告知 Find My 服务故障已经修复,故障时间为今天凌晨 3 点 30 分至 5 点 15 分。部分用户受到影响,无法使用这项服务。苹果公司通常不提供系统问题纠正的估计时间,但似乎苹果公司处理该问题的时间总共不到两小时。苹果公司通过 Twitter 确认,它“知道并正在修复查找我的问题”,并建议“密切关注”状?

  • 部分iPhone13用户反应新MagSafe Wallet无法连接到Find My

    据外媒macrumors报道,在推出新iPhone 13机型的同时,苹果还推出了内置Find My的MagSafe Wallet的更新版本。新MagSafe Wallet的设计是为了在它从iPhone上滑落或从口袋里掉出来时更容易找到,但一些新MagSafe Wallet的用户却无法连接Find My。根据Reddit上的信息,受影响的用户在将MagSafe Wallet连接到iPhone上时无法获得适当的Find My弹出窗口。这个问题似乎特别影响到了iPhone 13机型,不过也有一些来自iPhone 12用户的投诉。正?

  • Myeong香港宫廷荟,带你解锁宫廷中药新护肤方式!

    如果说中医药是中国古代历史长河遗留下的瑰宝,那么宫廷中医护肤作为传统护肤发展的顶峰,可以说是令世界都瞩目的中华国粹。近几年宫廷护肤深受消费者追捧,但目前市场护肤品牌质量参差不齐,消费者难免眼花缭乱,难以抉择。推荐来自中国香港的Myeong香港宫廷荟,汇集中国千年历史的嫩肌古方,还原各朝代最精湛的护肤智慧,结合现代天然的炼制技术,深受中高端女性消费者的喜欢。 Myeong香港宫廷荟汇集香港专业的中医药团队,炼制?

  • 苹果:部分iPhone 13系列恢复备份可能存在bug

    据国外媒体报道,苹果公司在今天发布的一份新的支持文件中表示,iPhone13型号、 iPad9或 iPad mini6恢复备份可能会遇到一个苹果音乐的bug。

  • 苹果承认部分iPhone 13备份恢复存在bug 建议进行软件更新

    据国外媒体报道,苹果9月15日凌晨推出的iPhone 12系列智能手机,已在24日正式发售,首批预定成功的消费者,都已陆续收到了他们期待的iPhone 13,但有部分用户满心欢喜的收到iPhone 13后,却发现存在bug,部分应用无法正常使用。

  • 苹果:从备份恢复可能会导致iPhone13上的Apple Music出错

    站长之家(ChinaZ.com)9月24日 消息:苹果在今天发布的一份新支持文件中表示,购买iPhone13系列、iPad9或iPad mini6并从备份中恢复新设备的客户可能会遇到影响Apple Music的错误。从备份恢复后,新的?iPad?可能无法访问 Apple Music?目录、?Apple Music?设置或使用同步库。为了解决这个问题,苹果表示必须更新设备,这可以通过转到“设置”“通用”“软件更新”来完成。已经收到设备的?iPhone13?用户确认需要安装第一天的iOS15安全

  • Stratifyd创始人汪晓宇:从战略层建立数据驱动型客户体验策略

    近日,斯图飞腾(Stratifyd Inc)公司创始人&CEO 汪晓宇(Derek Wang)接受Demand Gen Report采访,就B2B企业如何打造端到端的客户体验发表了自己的见解,采访中Derek强调了客户指标和AI对现代客户体验项目的影响以及领导力支持对推进新的客户体验工具和策略的重要性。 以下为访谈摘要: 如今越来越多的企业将买家反馈纳入客户体验(Customer Experience,CX)提升计划,客户体验已经从简单的数据收集演变为一种全面互动型策略。B2B买?

这篇文章对你有价值吗?

  • 热门标签

热文

  • 3 天
  • 7天