没有所谓的捷径
一切都是时间最平凡的累积

mysql备份工具xtrabackup(innobackupex)备份以及迁移数据恢复

本文最后更新:2022年8月23日,已超过610天未更新,如果文章内容失效,请留言反馈本站。

相关简介

Xtrabackup有两个主要的工具:xtrabackupinnobackupex
(1)xtrabackup只能备份InnoDB和XtraDB两种数据表,而不能备份MyISAM数据表.
(2)innobackupex-1.5.1则封装了xtrabackup,是一个脚本封装,所以能同时备份处理innodb和myisam,但在处理myisam时需要加一个读锁.

适用场景:

数据量比较大,通常以G计算,常规sql导入导出数据庞大容易出错。需要本机备份,或者迁移到其他服务器,这时候就可以考虑使用innobackupex来备份迁移,迁移到其他服务器恢复,需要将备份文件scp迁移过去。

先决条件:

linux系统服,需要服务器都能支持ssh登陆,新旧服务器都需要安装innobackupex。

安装:

wget https://downloads.percona.com/downloads/Percona-XtraBackup-2.4/Percona-XtraBackup-2.4.21/binary/redhat/7/x86_64/percona-xtrabackup-24-2.4.21-1.el7.x86_64.rpm
yum -y install perl perl-devel libaio libaio-devel perl-Time-HiRes perl-DBD-MySQL  #安装依赖包
rpm -ivh percona-xtrabackup-24-2.4.21-1.el7.x86_64.rpm --nodeps --force

innobackupex常用选项:  

   --host     指定主机

   --user     指定用户名

   --password    指定密码

   --port     指定端口

   --databases     指定数据库

   --incremental    创建增量备份

   --incremental-basedir   指定包含完全备份的目录

   --incremental-dir      指定包含增量备份的目录,增量备份目录   

   --apply-log        对备份进行预处理操作,一般情况下,在备份完成后,数据尚且不能用于恢复操作,因为备份的数据中可能会包含尚未提交的事务或已经提交但尚未同步至数据文件中的事务。因此,此时数据文件仍处理不一致状态。“准备”的主要作用正是通过回滚未提交的事务及同步已经提交的事务至数据文件也使得数据文件处于一致性状态。

   --redo-only      不回滚未提交事务

   --copy-back     恢复备份目录

一些常用的其他可选参数:

--lock-wait-query-type   该参数允许用户指定,哪类的SQL语句是需要Flush table with read lock等待的

--lock-wait-threshold    运行超过这个时间的查询才算长查询

--lock-wait-timeout   等待长查询多少时间后再尝试FTWRL,一旦Flush table with read lock被阻塞超过预定时间,则XtraBackup出错返回退出,参数允许用户指定了超过该阈值时间的查询会被Kill,同时也允许用户指定Kill

全量备份:

innobackupex --user=root --password=xxxx --datadir=/var/lib/mysql  /mysql_bkup/   

#datadir是mysql数据data存储路径,可以到my.cnf里面查看。mysql_bkup备份存放路径。默认会以时间命名备份目录。

#合并数据,使数据文件处于一致性的状态:

innobackupex --apply-log   /mysql_bkup/2022-08-03_21-14-37/  

异机恢复准备:

1、使用scp命令将/mysql_bkup/2022-08-03_21-14-37/转移到目标新服务器数据库。

2、新服务器mysql服务关停。将datadir数据存储目录下的数据删除。这里建议改名,然后再新建一个(datadir路径可从my.cnf配置文件里面查看)。

恢复数据:

按上面做好了恢复准备,使用命令恢复。

innobackupex --copy-back  /mysql_bkup/2022-08-03_21-14-37/ 

或者:

innobackupex --copy-back --datadir=/var/lib/mysql /mysql_bkup/2022-08-03_21-14-37/

恢复以后注意使用chown重置目录权限,然后将mysql服务重新启动。

如果数据库迁移过程是在运行的,数据有更新,就需要增量备份。

增量备份:

--incremental 创建增量备份

--incremental-basedir 指定包含完全备份的目录

--incremental-dir 指定包含增量备份的目录

#合并全备数据目录,确保数据的一致性

innobackupex --apply-log --redo-only /mysql_bkup/2022-08-03_21-14-37/ 

#创建增量备份

innobackupex --user=root --password=xxx --incremental /mysql_bkup_add/ --incremental-basedir=/mysql_bkup/2022-08-03_21-14-37/ 

#将增量备份数据合并到全备数据目录当中

innobackupex --apply-log  /mysql_bkup/2022-08-03_21-14-37/ --incremental-dir=/mysql_bkup_add/增量备份/

#数据一致性

innobackupex --apply-log /mysql_bkup/2022-08-03_21-14-37

#恢复数据:

innobackupex --copy-back /mysql_bkup/2022-08-03_21-14-37 

#恢复到异地也是需要scp迁移到新服务器,按上面说明先停止服务,删除data数据再操作。

增量备份可以是多次,以下是多次增量备份示例:

#进行第一次全备

[root@ebs~]#innobackupex --datadir=/var/lib/mysql --user=root --password=xxx ./bkup

#进行第一次增备,基于上次的全备

[root@ebs ~]#innobackupex --datadir=/var/lib/mysql --user=root --password=xxx --incremental ./bkup/incer1 --incremental-basedir=./bkup/2022-04-23_11-39-31

#进行第二次全备,基于第一次增备

[root@ebs ~]#innobackupex --datadir=/var/lib/mysql --user=root --password=xxx --incremental ./bkup/incer2 --incremental-basedir=./bkup/incer1/2022-04-23_11-47-10

--incremental 创建增量备份

--incremental-basedir 指定包含完全备份的目录

--incremental-dir 指定包含增量备份的目录

##########################恢复时进行数据整合####################################################

#对整合的开始备份集——全备集应用日志,并指定"--redo-only"表示开始进入日志追加

innobackupex --apply-log --redo-only ./bkup/2022-04-23_11-39-31/

#对第一个增备集进行"准备",将其追加到全备集中

innobackupex --apply-log --redo-only ./bkup/2022-04-23_11-39-31/ --incremental-dir=./bkup/incer1/2022-04-23_11-47-10/

#对第二个增备集进行"准备",将其追加到全备集中,但是不再应用"--redo-only",表示整合的结束点

innobackupex --apply-log ./bkup/2022-04-23_11-39-31/ --incremental-dir=./bkup/incer2/2022-04-23_11-53-19/

#对整合完成的全备集进行一次整体的"准备"

innobackupex --apply-log  ./bkup/2022-04-23_11-39-31/

###################进行数据的恢复#############################

innobackupex --copy-back --datadir=/var/lib/mysql ./bkup/2022-04-23_11-39-31/ 

#如果是异地恢复,需要scp迁移过去再执行。

###############修改目录权限并启动mysql###########

chown mysql:mysql -R /usr/local/mysql/data && systemctl start mysqld

官方文档给出的恢复步骤:

innobackupex --apply-log --redo-only BASE-DIR

innobackupex --apply-log --redo-only BASE-DIR --incremental-dir=INCREMENTAL-DIR-1

innobackupex --apply-log BASE-DIR --incremental-dir=INCREMENTAL-DIR-2

innobackupex --apply-log BASE-DIR

innobackupex --copy-back BASE-DIR

» 站长码字辛苦,有用点个赞吧,也可以打个
» 若转载请保留本文转自:豫章小站 » 《mysql备份工具xtrabackup(innobackupex)备份以及迁移数据恢复》
» 本文链接地址:https://blog.mydns.vip/4542.html
» 如果喜欢可以: 点此订阅本站 有需要帮助,可以联系小站
赞(0) 打赏 【豫章小站原创文章】
声明:本站发布的内容(图片、视频和文字)以原创、转载和分享网络内容为主,若涉及侵权请及时告知,将会在第一时间删除,联系邮箱:contact@mydns.vip。文章观点不代表本站立场。本站原创内容未经允许不得转载,或转载时需注明出处:豫章小站 » mysql备份工具xtrabackup(innobackupex)备份以及迁移数据恢复
分享到: 更多 (0)

评论 2


  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址
  1. #1

    博主,交换友情链接吗?

    admin2年前 (2022-09-01) 23:57回复

智慧源于勤奋,伟大出自平凡

没有所谓的捷径,一切都是时间最平凡的累积,今天所做的努力都是在为明天积蓄力量

联系我们赞助我们

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

微信扫一扫打赏