xtrabackup 备份及介绍
------------------
- 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 备份及介绍相关推荐
- xtrabackup备份数据库
xtrabackup备份数据库 介绍 一般来说,在生产部署服务的时候,需要考虑,生产数据库需要备份,在主从之外,恢复数据的话,需要可以手动配置的机制,防止出现极端情况,主从全崩. 本文主要参考:htt ...
- MySQL Xtrabackup备份和恢复
简介 Xtrabackup是由percona提供的mysql数据库备份工具,据官方介绍,这也是世界上惟一一款开源的能够对innodb和xtradb数据库进行热备的工具.特点: (1)备份过程快速.可靠 ...
- MySQL建表枚举分区SQL,【mysql备份】02、Xtrabackup备份mysql
一.Xtrabackup概述 1.Xtrabackup简介 Xtrabackup是由percona提供的mysql数据库备份工具,据官方介绍,这也是世界上惟一一款开源的能够对innodb和xtradb ...
- Percona Xtrabackup备份mysql大数据库(完整备份与增量备份)
Percona Xtrabackup备份mysql大数据库(完整备份与增量备份) 文章目录 [隐藏] Xtrabackup简介 Xtrabackup安装 Xtrabackup工具介绍 innoback ...
- xtrabackup备份mysql5.7_【 xtrabackup】CentOS7.x上基于 MySQL 5.7.x的XtraBackup 安装与备份还原...
MySQL的XtraBackup 备份与恢复 https://shockerli.net/post/xtrabackup-backup-recovery-mysql Percona XtraBacku ...
- MySQL · 物理备份 · Percona XtraBackup 备份原理
前言 Percona XtraBackup(简称PXB)是 Percona 公司开发的一个用于 MySQL 数据库物理热备的备份工具,支持 MySQl(Oracle).Percona Server 和 ...
- 想了解Xtrabackup备份原理和常见问题分析,看这篇就够了
摘要:本文来自华为云MySQL研发团队,主要分享了MySQL备份工具Xtrabackup的备份过程.华为云数据库团队对其做的优化改进,以及在使用中可能遇到的问题与解决方法. 本文分享自华为云社区< ...
- devops+备份mysql_使用Xtrabackup备份 MySQL 数据库
使用Xtrabackup备份 MySQL 数据库 mysql的备份无非有下面几种方式: 1.mysqldump 2.mysqlhotcopy 3.采用Linux LVM的 snapshot 功能进行数 ...
- innobackupex和Xtrabackup备份和恢复MySQL数据
innobackupex备份和恢复MySQL数据 当MySQL数据量很小时,我们可以使用mysqldump来备份,无论是myisam引擎还是innodb引擎都是没有问题的. 但数据量很大,比如上百GB ...
最新文章
- szu cf集训Codeforces Round #631 (Div. 2)A ~ D[贪心,数据结构,思维,dp]
- numpy.cov()和numpy.var()的用法
- Android Studio安装应用时报错 installation failed with message Failed to finalize session......
- 改善代码设计 —— 优化物件之间的特性(Moving Features Between Objects)
- linux编译安装含义,linux源码包编译安装详解
- Web后端学习笔记 Flask (14)redis
- mysql ----DML(掌握)
- OpenGL基础22:贴图
- ueditor-图片上传是报错
- 从 CCNA 到 CCIE
- Centos7安装WPS
- google地图设置语言
- 查找计算机所有图片文件夹,win10系统搜索电脑里的所有图片的操作方法
- Linux 通配符 与 正则表达式 的区别与详解
- Updating HP ESXi Hosts with VUM
- android开发 节省流量,流量节省程序模式 | Android 开源项目 | Android Open Source Project...
- 【MTK 6737】Modem编译
- 思绪,飘在青山绿水间
- 某电商用户行为分析-提升GMV
- .Net C# 如何读取Excel数据内容写入数据库并通过DataGridView控件动态刷新显示
热门文章
- Linux笔记之浅析linux重定向——输出重定向与输入重定向
- 动态二进制插桩的原理和基本实现过程(Pin/DynamoRIO/Frida)
- 夏天热过了,冬天就不会冷了
- php十进制转换为二进制
- java 抛物线_关于java中模拟抛物线轨迹的问题
- 《数位板这样玩——Photoshop+Painter数码手绘必修课(第2版)》—创建数字艺术工作室...
- 陪诊小程序开发|陪诊护理系统|陪护软件开发
- 聚观早报 | “问天” 实验舱成功升天;微博将显示MCN机构名称
- 【CF896E】Welcome home, Chtholly 暴力+分块+链表
- 【Java】继承 Thread 和 实现 Runnable 区别