------------------

  • Xtrabakcup工作原理
  • 1、xtrabackup介绍
  • 2、Xtrabakcup安装
  • 3、Xtrabakcup使用
    • 3.1、用户权限说明
      • 1、系统用户
      • 2、数据库内部用户
    • 3.2、常用命令格式和参数
      • 1、命令格式:
      • 2、常用参数
  • 4、Xtrabakcup完整备份和还原
    • 1、完整备份
    • 2、数据还原
  • 5、Xtrabakcup增量备份和还原
    • 1、查看完整备份的LSN
    • 2、以全备创建增量备份
      • 增量备份
      • 数据还原

Xtrabakcup工作原理


(1)innobackupex启动后,会先fork一个进程,用于启动xtrabackup,然后等待xtrabackup备份ibd数据文件;
(2)xtrabackup在备份innoDB数据是,有2种线程:redo拷贝线程和ibd数据拷贝线程。xtrabackup进程开始执行后,会启动一个redo拷贝的线程,用于从最新的checkpoint点开始顺序拷贝redo.log;再启动ibd数据拷贝线程,进行拷贝ibd数据。这里是先启动redo拷贝线程的。在此阶段,innobackupex进行处于等待状态(等待文件被创建)
(4)xtrabackup拷贝完成ibd数据文件后,会通知innobackupex(通过创建文件),同时xtrabackup进入等待状态(redo线程依旧在拷贝redo.log)
(5)innobackupex收到xtrabackup通知后哦,执行FLUSH TABLES WITH READ LOCK(FTWRL),取得一致性位点,然后开始备份非InnoDB文件(如frm、MYD、MYI、CSV、opt、par等格式的文件),在拷贝非InnoDB文件的过程当中,数据库处于全局只读状态。
(6)当innobackup拷贝完所有的非InnoDB文件后,会通知xtrabackup,通知完成后,进入等待状态;
(7)xtrabackup收到innobackupex备份完成的通知后,会停止redo拷贝线程,然后通知innobackupex,redo.log文件拷贝完成;
(8)innobackupex收到redo.log备份完成后,就进行解锁操作,执行:UNLOCK TABLES;
(9)最后innbackupex和xtrabackup进程各自释放资源,写备份元数据信息等,innobackupex等xtrabackup子进程结束后退出。

1、xtrabackup介绍

Xtrabackup是一个开源的免费的热备份工具,在Xtrabakcup包中主要有Xtrabackup和innobakcupex两个工具。其中Xtrabackup只能备份InnoDB和XtraDB两种引擎;Innobackup则是封装了Xtrabakcup,同时增加了备份MylSAM引擎功能。
Xtrabakcup备份时不能备份表结构、触发器等等,也不能智能区分.idb数据库文件。另外innobakcup还不能完全支持增量备份,需要和Xtrabakcup结合起来实现全备的功能

2、Xtrabakcup安装

1)下载安装包

  • Xtrabakcup下载地址:https://www.percona.com/downloads/ 选择自己的版本下载

https://downloads.percona.com/downloads/Percona-XtraBackup-2.4/Percona-XtraBackup-2.4.21/binary/redhat/7/x86_64/Percona-XtraBackup-2.4.21-r5988af5-el7-x86_64-bundle.tar

  • 依赖包下载,下载地址:http://rpmfind.net/linux/atrpms/el6-x86_64/atrpms/stable/libev-4.04-2.el6.x86_64.rpm

2)解压安装

[root@k8s-master01 ~]# ls
libev-4.04-2.el6.x86_64.rpm  Percona-XtraBackup-2.4.21-r5988af5-el7-x86_64-bundle.tar
[root@k8s-master01 ~]# yum localinstall libev-4.04-2.el6.x86_64.rpm -y
[root@k8s-master01 ~]# tar xf Percona-XtraBackup-2.4.21-r5988af5-el7-x86_64-bundle.tar     # 解压完之后出出现三个rpm
[root@k8s-master01 ~]# yum install percona-xtrabackup-24-2.4.21-1.el7.x86_64.rpm -y

3)配置文件

  • 修改配置文件/etc/my.cnf,保证[mysqld]模块存在参数datadir=/var/lib/mysql(指向数据目录),因为xtrbackup是根据/etc/my.cnf配置文件来获取需要备份的文件

4)重启mysqld

3、Xtrabakcup使用

一般使用的是innobackupex脚本,因为innobackupex是perl脚本对xtrbackup的封装和功能扩展

3.1、用户权限说明

备份数据库时会涉及到两个用户:系统用户与数据库内部的用户

1、系统用户

  • 需要在datadir(配置文件内设置的目录)上具有读写执行权限(rwx)。

2、数据库内部用户

  • RELOAD和LOCK TABLES权限,执行FLUSH TABLES WITH READ LOCA;
  • REPLICATION CLIENT权限,获取binary log(二进制日志文件)位置;
  • CREATE TABLEPACE权限,导入表,用户表级别的恢复;
  • SUPER权限,在slave环境下备份用来启用和关闭slave线程。

3.2、常用命令格式和参数

1、命令格式:

innobackupex [参数] [目的地址] [源地址]

2、常用参数

--user                   # 以什么用于身份进行操作
--password              # 数据库用户的密码
--port                  # 数据库的端口号,默认3306
--stream                # 打包(数据流)
--defaults-file         # 指定默认配置文件,默认读取/etc/my.cnf
--no-timestamp          # 不创建时间戳文件,而改用目的地址(可以自动创建)
--copy-back             # 备份还原的主要选项
--incremental           # 使用增量备份,默认使用的完整备份
--incremental-basedir   # 与--incremental选项联合使用,该参数指定上一级备份的地址来做增量备份

4、Xtrabakcup完整备份和还原

1、完整备份

[root@k8s-master01 ~]# innobackupex --user=root --password=chinaedu /home/mysqlbackup/        # 备份的时候有大量的日志信息
[root@k8s-master01 ~]# ls /home/mysqlbackup/
2021-01-29_11-17-03
[root@k8s-master01 ~]# innobackupex --user=root --password=chinaedu /home/mysqlbackup/  2>> /home/mysqlbackup/bakcup.log       # 将备份输出信息保存到文件
[root@k8s-master01 ~]# innobackupex --user=root --password=chinaedu --no-timestam /home/mysqlbackup/test 2>> /home/mysqlbackup/bakcup-test.log     # 不使用时间戳创建目录,可自动创建目的地址
[root@k8s-master01 ~]# ls /home/mysqlbackup/       # 可以看到有自己创建的test目录
2021-01-29_11-17-03  2021-01-29_11-21-52  bakcup.log  test bakcup-test.log

2、数据还原

  • 注意:innobackupex -copy-back不会覆盖已存在的文件。而且还原时需要先关闭服务,如果服务是启动的,那么久不能还原到datadir
[root@k8s-master01 ~]# systemctl stop mysqld
[root@k8s-master01 ~]# rm -rf /var/lib/mysql/*     # 危险操作,请在测试环境测试
[root@k8s-master01 ~]# innobackupex --copy-back /home/mysqlbackup/2021-01-29_11-25-59/
[root@k8s-master01 ~]# ll /var/lib/mysql/
总用量 12324
-rw-r----- 1 root root      436 1月  29 11:27 ib_buffer_pool
-rw-r----- 1 root root 12582912 1月  29 11:27 ibdata1
drwxr-x--- 2 root root     4096 1月  29 11:27 mysql
drwxr-x--- 2 root root     8192 1月  29 11:27 performance_schema
drwxr-x--- 2 root root     8192 1月  29 11:27 sys
drwxr-x--- 2 root root       20 1月  29 11:27 test1
drwxr-x--- 2 root root       48 1月  29 11:27 test2
-rw-r----- 1 root root      475 1月  29 11:27 xtrabackup_info
[root@k8s-master01 ~]# chown -R mysql.mysql /var/lib/mysql/
[root@k8s-master01 ~]# systemctl start mysqld
[root@k8s-master01 ~]# mysql -uroot -p
Enter password:
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 2
Server version: 5.7.33-log MySQL Community Server (GPL)Copyright (c) 2000, 2021, Oracle and/or its affiliates.Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| sys                |
| test1              |
| test2              |
+--------------------+
6 rows in set (0.01 sec)

5、Xtrabakcup增量备份和还原

  • 增量备份的实现,依赖于innodb也上面的LSN(log sequence number),每次对数据库的修改都会导致LSN自增。增量备份会复制指定LSN<日志序列号>之后的所有数据页。

1、查看完整备份的LSN

[root@k8s-master01 ~]# innobackupex --user=root --password=chinaedu /home/mysqlbackup/
[root@k8s-master01 ~]# cd /home/mysqlbackup/2021-01-29_11-31-32
[root@k8s-master01 2021-01-29_11-31-32]# cat xtrabackup_checkpoints
backup_type = full-backuped        # 代表完整备份
from_lsn = 0
to_lsn = 2747432
last_lsn = 2747441
compact = 0
recover_binlog_info = 0
flushed_lsn = 2747441

2、以全备创建增量备份

  • 创建一些数据,以2021-01-29_11-31-32时间戳创建第一个增量备份,并查看LSN

增量备份

[root@k8s-master01 2021-01-29_11-31-32]# mysql -uroot -p
mysql> create database test3;
mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| sys                |
| test1              |
| test2              |
| test3              |
+--------------------+
7 rows in set (0.14 sec)
mysql> create table test3.user(id int,name varchar(20));
Query OK, 0 rows affected (0.09 sec)
mysql> insert into test3.user values(1,'test');
Query OK, 1 row affected (0.16 sec)mysql> select * from test3.user;
+------+------+
| id   | name |
+------+------+
|    1 | test |
+------+------+
1 row in set (0.00 sec)
[root@k8s-master01 2021-01-29_11-31-32]# innobackupex --user=root --password=chinaedu --incremental /home/mysqlbackup/ --incremental-basedir=/home/mysqlbackup/2021-01-29_11-31-32      # 创建增量备份
[root@k8s-master01 2021-01-29_11-31-32]# cat 2021-01-29_13-52-49/xtrabackup_checkpoints
backup_type = incremental      # 表示增量备份
from_lsn = 2747432
to_lsn = 2752047
last_lsn = 2752056
compact = 0
recover_binlog_info = 0
flushed_lsn = 2752056

数据还原

1)把全量备份进行一次apply

[root@k8s-master01 mysqlbackup]# innobackupex --apply-log --redo-only /home/mysqlbackup/2021-01-29_11-31-32/

2)应用第一次增量备份到全量备份(把全量备份跟增量备份进行一个结合)

[root@k8s-master01 mysqlbackup]# innobackupex --apply-log --redo-only /home/mysqlbackup/2021-01-29_11-31-32/ --incremental-dir=/home/mysqlbackup/2021-01-29_13-52-49

3)查看全量备份xtrabackup_checkpoints

[root@k8s-master01 mysqlbackup]# cat 2021-01-29_11-31-32/xtrabackup_checkpoints
backup_type = log-applied
from_lsn = 0
to_lsn = 2752047
last_lsn = 2752056
compact = 0
recover_binlog_info = 0
flushed_lsn = 2752056
  • 对之前查看的第一次增量备份的.latest_lsn位置,在应用第一次增量备份到全量后,可以看到last_lsn已经被应用和第一次全量备份的位置相同了

4)停止mysqld服务并移除数据目录(生产环境建议用mv)

[root@k8s-master01 mysqlbackup]# systemctl stop mysqld
[root@k8s-master01 mysqlbackup]# rm -rf /var/lib/mysql/*

5)使用–copy-back参数恢复拷贝到data目录

 [root@k8s-master01 mysqlbackup]# innobackupex --copy-back /home/mysqlbackup/2021-01-29_11-31-32/

6)验证数据还原

[root@k8s-master01 mysqlbackup]# ls /var/lib/mysql
ib_buffer_pool  mysql               sys    test2  xtrabackup_binlog_pos_innodb  xtrabackup_master_key_id
ibdata1         performance_schema  test1  test3  xtrabackup_info

7)授权并启用MySQL

[root@k8s-master01 mysqlbackup]# chown -R mysql.mysql /var/lib/mysql/
[root@k8s-master01 mysqlbackup]# systemctl start mysqld
[root@k8s-master01 mysqlbackup]# mysql -uroot -p
mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| sys                |
| test1              |
| test2              |
| test3              |
+--------------------+
7 rows in set (0.00 sec)mysql> select * from test3.user;
+------+------+
| id   | name |
+------+------+
|    1 | test |
+------+------+
1 row in set (0.01 sec)

xtrabackup 备份及介绍相关推荐

  1. xtrabackup备份数据库

    xtrabackup备份数据库 介绍 一般来说,在生产部署服务的时候,需要考虑,生产数据库需要备份,在主从之外,恢复数据的话,需要可以手动配置的机制,防止出现极端情况,主从全崩. 本文主要参考:htt ...

  2. MySQL Xtrabackup备份和恢复

    简介 Xtrabackup是由percona提供的mysql数据库备份工具,据官方介绍,这也是世界上惟一一款开源的能够对innodb和xtradb数据库进行热备的工具.特点: (1)备份过程快速.可靠 ...

  3. MySQL建表枚举分区SQL,【mysql备份】02、Xtrabackup备份mysql

    一.Xtrabackup概述 1.Xtrabackup简介 Xtrabackup是由percona提供的mysql数据库备份工具,据官方介绍,这也是世界上惟一一款开源的能够对innodb和xtradb ...

  4. Percona Xtrabackup备份mysql大数据库(完整备份与增量备份)

    Percona Xtrabackup备份mysql大数据库(完整备份与增量备份) 文章目录 [隐藏] Xtrabackup简介 Xtrabackup安装 Xtrabackup工具介绍 innoback ...

  5. xtrabackup备份mysql5.7_【 xtrabackup】CentOS7.x上基于 MySQL 5.7.x的XtraBackup 安装与备份还原...

    MySQL的XtraBackup 备份与恢复 https://shockerli.net/post/xtrabackup-backup-recovery-mysql Percona XtraBacku ...

  6. MySQL · 物理备份 · Percona XtraBackup 备份原理

    前言 Percona XtraBackup(简称PXB)是 Percona 公司开发的一个用于 MySQL 数据库物理热备的备份工具,支持 MySQl(Oracle).Percona Server 和 ...

  7. 想了解Xtrabackup备份原理和常见问题分析,看这篇就够了

    摘要:本文来自华为云MySQL研发团队,主要分享了MySQL备份工具Xtrabackup的备份过程.华为云数据库团队对其做的优化改进,以及在使用中可能遇到的问题与解决方法. 本文分享自华为云社区< ...

  8. devops+备份mysql_使用Xtrabackup备份 MySQL 数据库

    使用Xtrabackup备份 MySQL 数据库 mysql的备份无非有下面几种方式: 1.mysqldump 2.mysqlhotcopy 3.采用Linux LVM的 snapshot 功能进行数 ...

  9. innobackupex和Xtrabackup备份和恢复MySQL数据

    innobackupex备份和恢复MySQL数据 当MySQL数据量很小时,我们可以使用mysqldump来备份,无论是myisam引擎还是innodb引擎都是没有问题的. 但数据量很大,比如上百GB ...

最新文章

  1. szu cf集训Codeforces Round #631 (Div. 2)A ~ D[贪心,数据结构,思维,dp]
  2. numpy.cov()和numpy.var()的用法
  3. Android Studio安装应用时报错 installation failed with message Failed to finalize session......
  4. 改善代码设计 —— 优化物件之间的特性(Moving Features Between Objects)
  5. linux编译安装含义,linux源码包编译安装详解
  6. Web后端学习笔记 Flask (14)redis
  7. mysql ----DML(掌握)
  8. OpenGL基础22:贴图
  9. ueditor-图片上传是报错
  10. 从 CCNA 到 CCIE
  11. Centos7安装WPS
  12. google地图设置语言
  13. 查找计算机所有图片文件夹,win10系统搜索电脑里的所有图片的操作方法
  14. Linux 通配符 与 正则表达式 的区别与详解
  15. Updating HP ESXi Hosts with VUM
  16. android开发 节省流量,流量节省程序模式  |  Android 开源项目  |  Android Open Source Project...
  17. 【MTK 6737】Modem编译
  18. 思绪,飘在青山绿水间
  19. 某电商用户行为分析-提升GMV
  20. .Net C# 如何读取Excel数据内容写入数据库并通过DataGridView控件动态刷新显示

热门文章

  1. Linux笔记之浅析linux重定向——输出重定向与输入重定向
  2. 动态二进制插桩的原理和基本实现过程(Pin/DynamoRIO/Frida)
  3. 夏天热过了,冬天就不会冷了
  4. php十进制转换为二进制
  5. java 抛物线_关于java中模拟抛物线轨迹的问题
  6. 《数位板这样玩——Photoshop+Painter数码手绘必修课(第2版)》—创建数字艺术工作室...
  7. 陪诊小程序开发|陪诊护理系统|陪护软件开发
  8. 聚观早报 | “问天” 实验舱成功升天;微博将显示MCN机构名称
  9. 【CF896E】Welcome home, Chtholly 暴力+分块+链表
  10. 【Java】继承 Thread 和 实现 Runnable 区别