首页 > 数据库 >MySQL实现备份(3)之xtrabackup 备份工具

MySQL实现备份(3)之xtrabackup 备份工具

时间:2022-09-20 15:34:08浏览次数:118  
标签:-- backup 备份 MySQL xtrabackup mysql root

xtrabackup工具:

是percona公司开发的一个用于对MySQL进行备份的工具。相对于mysqldump,xtrabackup支持增量备份、差异备份等。

使用手册;https://www.percona.com/doc/percona-xtrabackup/LATEST/index.html
下载链接;https://www.percona.com/downloads/

xtrabackup版本:
  • Xtrabackup2.4之前

  • Xtrabackup2.4:能用来备份MySQL5.5、5.6和5.7

  • Xtrabackup8.0:只能用来备份MySQL8.0

xtrabackup的组成:

Xtrabackup2.4之前:有四个可执行文件
  • innobackupex: Perl 脚本(InnoDB 表和非innodb表都可以备份)

  • xtrabackup: C/C++,编译的二进制程序(用来备份 InnoDB 表的,不能备份非 InnoDB 表)

  • xbcrypt: 加解密

  • xbstream: 支持并发写的流文件格式

Xtrabackup2.4及以后:
  • innobackupex和xtrabackup合二为一为xtrabackup
安装xtrabackup:
  • 通过官网下载对应的rpm包或者deb包。

  • 然后通过yum 或者apt进行安装,这样能解决依赖问题。

范例

1.使用xtrabackup实现完全备份
1.安装对应的安装包

2.创建存放备份文件的目录
[root@CentOS8 ~]# mkdir /backup

3.执行完全备份操作
[root@CentOS8 ~]# xtrabackup -uroot  --backup --target-dir=/backup/base
xtrabackup: Transaction log of lsn (26887058) to (26887068) was copied.
220920 14:15:36 completed OK!

4.数据还原操作
(1)预准备:确保数据一致,提交完成的事务,回滚未完成的事务
[root@CentOS8 ~]# xtrabackup --prepare --target-dir=/backup/base  #base这个目录文件可以不用创建,会自动生成
Shutdown completed; log sequence number 26887180
220920 14:19:44 completed OK!

(2)复制到数据库目录(数据库目录必须为空,MySQL服务不能启动)
[root@CentOS8 ~]# systemctl stop mysqld.service 

[root@CentOS8 ~]# rm -rf /var/lib/mysql/*

[root@CentOS8 ~]# rm -rf  /data/logbin/* #二进制日志存放位置

[root@CentOS8 ~]# xtrabackup --copy-back --target-dir=/backup/base

220920 14:22:22 [01] Copying ./mysql.ibd to /var/lib/mysql/mysql.ibd
220920 14:22:22 [01]        ...done
220920 14:22:22 completed OK!

(3)更改复制文件的所有者和所属组
[root@CentOS8 ~]# chown -R mysql.mysql /var/lib/mysql/

[root@CentOS8 ~]# chown -R mysql.mysql /data/logbin/

(4)启动数据库
[root@CentOS8 ~]# systemctl start mysqld.service

(5)检查
--copy-back:#做数据恢复时将备份数据文件拷贝到MySQL服务器的datadir(会自动从配置文件中找到mysql数据存放的目录)

-u,--user:指定mysql用户名

-p,--password:指定用户的密码

--host:指定数据库的地址,默认为本机

--target-dir:指定备份文件所在位置

--prepare:回滚未完成的事务
还原注意事项:
  1. datadir 目录必须为空。除非指定innobackupex --force-non-empty-directorires选项指定,否则--copy-back选项不会覆盖

  2. 在restore之前,必须shutdown MySQL实例,不能将一个运行中的实例restore到datadir目录中

  3. 由于文件属性会被保留,大部分情况下需要在启动实例之前将文件的属主改为mysql,这些文件将属于创建备份的用户

执行chown -R mysql:mysql /data/mysql,以上需要在用户调用innobackupex之前完成
案例: 利用xtrabackup8.0 完全,增量备份及还原MySQL8.0
修改数据:mysql> insert into teachers values(null,'da wang','20','F');
Query OK, 1 row affected (0.18 sec)

mysql> insert into teachers values(null,'wang cai','10','F');
Query OK, 1 row affected (0.00 sec)

#第一次增量备份
[root@centos8 ~]#xtrabackup -uroot -pmagedu --backup --target-dir=/backup/inc1 --incremental-basedir=/backup/base
xtrabackup: Transaction log of lsn (26916221) to (26916231) was copied.
220920 14:44:23 completed OK!


第二次:
[root@CentOS8 ~]# xtrabackup -uroot  --backup   --target-dir=/backup/inc2  --incremental-basedir=/backup/inc1
xtrabackup: Transaction log of lsn (26917096) to (26917106) was copied.
220920 14:47:10 completed OK!


还原:
#项--apply-log-only 阻止回滚未完成的事务
[root@centos8 ~]# xtrabackup --prepare --apply-log-only --target-dir=/backup/base

合并第1次增量备份到完全备份
[root@centos8 ~]# xtrabackup --prepare --apply-log-only --target-dir=/backup/base --incremental-dir=/backup/inc1

合并第2次增量备份到完全备份:最后一次还原不需要加选项--apply-log-only
[root@centos8 ~]# xtrabackup --prepare --target-dir=/backup/base  --incremental-dir=/backup/inc2


复制到数据库目录,注意数据库目录必须为空,MySQL服务不能启动
[root@CentOS8 ~]# rm -rf /var/lib/mysql/*
[root@CentOS8 ~]# rm -rf /data/logbin/*

还原属性:
[root@CentOS8 ~]# chown -R mysql:mysql /var/lib/mysql
[root@CentOS8 ~]# chown -R mysql:mysql /data/logbin/
启动服务:
[root@CentOS8 ~]# systemctl start mysqld.service

总结:

xtrabackup工具备份和还原,需要三步实现
  1. 备份:对数据库做完全或增量备份

  2. 预准备: 还原前,先对备份的数据,整理至一个临时目录

  3. 还原:将整理好的数据,复制回数据库目录中

备份格式:
innobackupex [option] BACKUP-ROOT-DIR

参数:
--user:#该选项表示备份账号

--password:#该选项表示备份的密码

--host:#该选项表示备份数据库的地址

--databases:#该选项接受的参数为数据库名,如果要指定多个数据库,彼此间需要以空格隔开;
如:"xtra_test dba_test",同时,在指定某数据库时,也可以只指定其中的某张表。
如:"mydatabase.mytable"。该选项对innodb引擎表无效,还是会备份所有innodb表

--defaults-file:#该选项指定从哪个文件读取MySQL配置,必须放在命令行第一个选项位置

--incremental:#该选项表示创建一个增量备份,需要指定--incremental-basedir

--incremental-basedir:#该选项指定为前一次全备份或增量备份的目录,与--incremental同时使用

--incremental-dir:#该选项表示还原时增量备份的目录

--include=name:#指定表名,格式:databasename.tablename
Prepare预准备格式:
innobackupex --apply-log [option] BACKUP-DIR

参数:
--apply-log:

#一般情况下,在备份完成后,数据尚且不能用于恢复操作,因为备份的数据中可能会包含尚未提交的事务或已经提交但尚未同步至数据文件中的事务。因此,此时数据文件仍处理不一致状态。

#此选项作用是通过回滚未提交的事务及同步已经提交的事务至数据文件使数据文件处于一致性状态
还原格式:
innobackupex --copy-back [选项] BACKUP-DIR

innobackupex --move-back [选项] [--defaults-group=GROUP-NAME] BACKUP-DIR

参数:
--copy-back:#做数据恢复时将备份数据文件拷贝到MySQL服务器的datadir

--move-back:#这个选项与--copy-back相似,唯一的区别是它不拷贝文件,而是移动文件到目的地。
注意事项:
  1. datadir 目录必须为空

  2. 在restore之前,必须停止mysql

  3. 更改文件属性

标签:--,backup,备份,MySQL,xtrabackup,mysql,root
From: https://www.cnblogs.com/heyongshen/p/16711202.html

相关文章

  • MySQL架构原理之存储引擎InnoDB存储结构
    从MySQL5.5版本开始默认使用InnoDB作为引擎,它擅长处理事务,具有自动奔溃恢复的特性,在日常开发中使用非常广泛。其具体架构,参考官方提供的相关图示如下:从......
  • MySQL维护之日志文件
    MySQL数据库中常见的日志文件有错误日志(ErrorLog)、二进制日志(BinaryLog)、慢查询日志(SlowQueryLog)、全查询日志(GeneralQueryLog)、中继日志(RelayLog)和事务日志。......
  • Docker安装部署Mysql8(以作数据持久化)
    1.创建容器并进行持久化处理#拉取镜像dockerpullmysql:8.0.20#启动镜像,用于拷贝配置文件到宿主机dockerrun-p3306:3306--namemysql-eMYSQL_ROOT_PASSWORD=12......
  • 【MySQL】MySQL导出用户权限信息
    $vimMyDatabaseUSers.sql#!/bin/bashGRANT_CMDS=/tmp/ShowGrantsToExport.sqlGRANT_FILE=MyDatabaseUSers.sqlMYSQL_USER=rootMYSQL_PASS=rootMYSQL_CONN="-u${MY......
  • mysql创建分区表(转载)
    一、   mysql分区简介数据库分区数据库分区是一种物理数据库设计技术。虽然分区技术可以实现很多效果,但其主要目的是为了在特定的SQL操作中减少数据读写的总量以......
  • Mysql系列---【使用慢日志查询分析sql语句】
    1.查看慢日志是否开启mysql>showvariableslike'slow_query%';+---------------------------+----------------------------------+|Variable_name|......
  • k8s部署MySQL主从数据库
    参考:https://kubernetes.io/zh-cn/docs/tasks/run-application/run-replicated-stateful-application/我的测试集群root@master:~/mysql#kubectlgetnodes-owideNA......
  • delete语句嵌套-mysql
    需求:我需要从tableA之中找到name字段的Filter的记录,得到此记录的id,然后根据id删除tableA中的该条记录;--但是我使用如下xql语句的时候deletefromtableAwhereidin(s......
  • Java学习-第一部分-第三阶段-第三节:MySQL基础
    零基础学MySQL笔记目录:(https://www.cnblogs.com/wenjie2000/p/16378441.html)一个问题淘宝网,京东、微信,抖音都有各自的功能,那么当我们退出系统的时候,下次再访问时,为什......
  • MySQL实现备份案例(2)
    案例1:MySQL8.0实现数据库冷备份和还原10.0.0.10--MySQL8.0#停止数据库[[email protected]]#systemctlstopmysqld.service#备份数据[root@CentOS8~]#scp-......