首页 > 数据库 >教你玩转MySQL8物理备份利器Xtrabackup

教你玩转MySQL8物理备份利器Xtrabackup

时间:2024-09-26 09:44:49浏览次数:1  
标签:MySQL8 data 备份 -- Xtrabackup 玩转 mysql test root

教你玩转MySQL8物理备份利器Xtrabackup

原创 我科绝伦 小周的数据库进阶之路    2024年09月22日 00:00 重庆

热衷于分享各种干货知识,大家有想看或者想学的可以评论区留言,秉承着“开源知识来源于互联网,回归于互联网”的理念,分享一些日常工作中能用到或者频率比较的内容,希望大家能够喜欢,并提出宝贵地意见,我们一起提升,守住自己的饭碗。

小周的数据库进阶之路 致力于dba数据库经验分享、新手入门、原理解读、踩坑指南 171篇原创内容 公众号

一、Xtrabackup介绍

xtrabackup是由Percona公司开发的一个用于MySQL数据库物理热备的工具,开源免费,目前官方最新版本是8.0.35,也支持8.0.37版本数据库,本文已经过测试。另外8.1,8.2和8.3也支持。它具有如下优点:

(1)备份速度快,物理备份可靠;

(2)在备份期间不间断地处理事务; 

(3)支持备份压缩,节约磁盘空间和网络带宽; 

(4)自动校验备份。

xtrabackup支持流式输出、压缩、增量备份、加密,是目前各个备份厂商普遍使用的MySQL备份工具。

二、Xtrabackup备份原理

1、xtrabackup开始,记录lsn ,同时启动后台进程监控redo日志的变化,且将变化实时记录到xtrabackup_logfile中;

2、复制ibdata1,.ibd数据文件;

3、全局读锁,执行LOCK INSTANCE FOR BACKUP(8.0取代了 FLUSH TABLES WITH READ LOCK); 

4、复制非InnoDB的表和文件;

5、获取binlog位置信息; 

6、停止复制redo log,即停止记录xtrabackup_logfile;

7、执行UNLOCK INSTANCE释放锁; 

8、复制buffer pool; 

9、备份完成。

图片

三、下载软件

官网地址:https://www.percona.com/downloads Percona XtraBackup 8.0 只支持MySQL 8.0的版本 

Percona XtraBackup 2.4 支持MySQL 5.11 , 5.5, 5.6 和5.7的版本

大家按需下载对应的版本

图片

当然,也可以从网盘下载

链接: https://pan.baidu.com/s/1cWZ_Vbf8d-eUaAsawA2lUg 

提取码: sfka

图片

四、Xtrabackup安装

上传安装包至/usr/local目录下,并重命名为xtrabackup目录

[root@mysql local]# tar -xvf percona-xtrabackup-8.0.35-31-Linux-x86_64.glibc2.17.tar.gz
[root@mysql local]# mv percona-xtrabackup-8.0.35-31-Linux-x86_64.glibc2.17 xtrabackup
[root@mysql local]# echo "export PATH=\$PATH:/usr/local/xtrabackup/bin" >>/etc/profile
[root@mysql local]# source /etc/profile
[root@mysql local]#which xtrabackup
[root@myoracle local]#xtrabackup --version
[root@myoracle local]#yum install perl-Digest-MD5 -y #安装依赖,要不然备份会报错
图片

五、xtrabackup常用参数

--user:指定连接数据库的用户名。
--password:指定连接数据库的密码。
--backup:执行备份操作。
--prepare:执行备份准备操作。
--copy-back:将备份恢复到原来的数据目录。
--datadir:指定数据目录的路径。
--target-dir:指定备份文件存储目录。
--incremental:执行增量备份操作。
--incremental-lsn:指定增量备份的LSN号。
--tables:仅备份特定的表。
--databases:仅备份特定的数据库。
--compress:压缩备份文件。#开启备份压缩,根据数据内容不同,压缩比可以在50%~60%
--stream=xbstream #开启流式备份,备份出来的数据输出到stdout
--remote-host=user@ip DST_DIR #备份到远程主机

六、备份

新建备份目录

[root@mysql ~]# mkdir -p /data/backup
[root@mysql ~]# chown -R mysql:mysql /data/backup/

新增测试数据

root@localhost:(none)>CREATE DATABASE test;
root@localhost:test>use test;
root@localhost:test>droptableifexists test;
root@localhost:test>CREATETABLE test ( id intNOTNULL AUTO_INCREMENT PRIMARY KEY comment '自增主键',
dept tinyint notnull comment '部门id',
age tinyint notnull comment '年龄',
name varchar(30) comment '用户名称',
create_time datetime notnull comment '注册时间',
last_login_time datetime comment '最后登录时间'
) comment '测试表';
root@localhost:test>insertinto test values(1,1,25,'zhangsan','2024-09-01 00:00:00','2024-09-01 12:00:00');
root@localhost:test>set@i=1;
root@localhost:test>insertinto test(dept, age, name, create_time, last_login_time)selectleft(rand()*10,1)as dept,
FLOOR(20+RAND()*(50-20+1))as age, concat('user_',@i:=@i+1),
date_add(create_time,interval+@i*cast(rand()*100assigned)SECOND),
date_add(date_add(create_time,interval+@i*cast(rand()*100assigned)SECOND),interval+cast(rand()*1000000assigned)SECOND)from test;
root@localhost:test>selectcount(1)from test;
root@localhost:test>create index idx_dept on test(dept);create index idx_create_time on test(create_time);
root@localhost:test>create index idx_last_login_time on test(last_login_time);
图片

以上步骤准备继续后,开始全量备份。

(一)全量备份

赋予账号备份权限

root@localhost:(none)>grant BACKUP_ADMIN on *.* to 'root'@'%';
root@localhost:(none)>FLUSH PRIVILEGES;

开始全备

[root@mysql backup]# xtrabackup --defaults-file=/etc/my.cnf --backup --target-dir=/data/backup/db_`date +%F`   --user=root --password=123456 --socket=/tmp/mysql.sock  >/data/backup/db_full_`date +%F`.log 2>&1
图片

(二)增量备份

新增数据

root@localhost:test>set@i=1;
root@localhost:test>insertinto test(dept, age, name, create_time, last_login_time)selectleft(rand()*10,1)as dept,
FLOOR(20+RAND()*(50-20+1))as age, concat('user_',@i:=@i+1),
date_add(create_time,interval+@i*cast(rand()*100assigned)SECOND),
date_add(date_add(create_time,interval+@i*cast(rand()*100assigned)SECOND),interval+cast(rand()*1000000assigned)SECOND)from test;
root@localhost:test>selectcount(1)from test;
图片

开始增量备份

新建增量备份目录 

[root@mysql ~]# mkdir -p /data/backup/incremental

[root@mysql ~]# xtrabackup --defaults-file=/etc/my.cnf --user=root --password=123456 --no-lock --backup --socket=/tmp/mysql.sock --target-dir=/data/backup/incremental --incremental-basedir=/data/backup/db_`date +%F` #先不演示流式备份

图片图片

注:--incremental-basedir 首次增量备份,就指定全量备份路径。如果是第二次增量备份,就指定第一次增量备份路径。 

再次插入数据

root@localhost:test>set@i=1;
root@localhost:test>insertinto test(dept, age, name, create_time, last_login_time)selectleft(rand()*10,1)as dept,
FLOOR(20+RAND()*(50-20+1))as age, concat('user_',@i:=@i+1),
date_add(create_time,interval+@i*cast(rand()*100assigned)SECOND),
date_add(date_add(create_time,interval+@i*cast(rand()*100assigned)SECOND),interval+cast(rand()*1000000assigned)SECOND)from test;
root@localhost:test>selectcount(1)from test;

新建增量备份的目录并进行备份

[root@mysql incremental]# mkdir -p /data/backup/incremental2
[root@mysql incremental]# xtrabackup --defaults-file=/etc/my.cnf --user=root --password=123456 --no-lock --backup --socket=/tmp/mysql.sock --target-dir=/data/backup/incremental2 --incremental-basedir=/data/backup/incremental
图片图片

六、恢复

(一)全量恢复

这里我们演示删掉数据盘进行恢复。

root@localhost:test>show variables like 'datadir';
[root@mysql ~]# mv /data/mysql/ /data/mysql.bak
[root@mysql incremental2]# xtrabackup --defaults-file=/etc/my.cnf --prepare --target-dir=/data/backup/db_2024-09-22 #备份文件一致性检查
图片
[root@mysql incremental2]#xtrabackup --defaults-file=/etc/my.cnf --copy-back --target-dir=/data/backup/db_2024-09-22 #将备份文件从restore_dir拷贝到work_dir目录
图片

给恢复的数据目录赋予mysql权限

[root@mysql data]# chown -R mysql.mysql mysql
图片

启动数据库

[root@mysql data]# ps -ef|grep mysql
[root@mysql data]# service mysql start #如果起不来,需要杀掉之前的进程。
图片

验证数据

root@localhost:(none)>use test;
root@localhost:test>select count(1) from test;
图片

(二)使用binlog恢复数据

[root@mysql db_2024-09-22]# cat xtrabackup_binlog_info
mysql-bin.000005 197 5c4a9483-781b-11ef-84a6-000c29f8db3f:1-17
图片
[root@mysql db_2024-09-22]# mysqlbinlog -vv --start-position=197 /data/mysql.bak/mysql-bin.000005 > recoverdata.sql
root@localhost:(none)>source /data/backup/db_2024-09-22/recoverdata.sql
root@localhost:test>select count(1) from test;
图片

(三)利用增量备份数据恢复

[root@mysql db_2024-09-22]# xtrabackup --prepare --apply-log-only --target-dir=/data/backup/db_2024-09-22 #准备数据
图片
[root@mysql db_2024-09-22]# xtrabackup --prepare --apply-log-only --target-dir=/data/backup/db_2024-09-22 --incremental-dir=/data/backup/incremental ## 把增量备份的数据合并到完整备份里面
图片
[root@mysql db_2024-09-22]#xtrabackup --defaults-file=/etc/my.cnf --user=root --password=123456 --prepare --target-dir=/data/backup/db_2024-09-22 #备份文件一致性检查
[root@mysql db_2024-09-22]#xtrabackup --defaults-file=/etc/my.cnf --user=root --password=123456 --copy-back --target-dir=/data/backup/db_2024-09-22 # 恢复数据
图片

修改权限,启动

[root@mysql data]# chown -R mysql.mysql mysql
[root@mysql data]# service mysql start
图片

验证数据

root@localhost:(none)>use test;
root@localhost:test>select count(1) from test;
图片

七、总结

这篇文章主要讲述如何安装Xtrabackup和备份恢复数据库。后面会分享一键备份和恢复脚本,也会分享基于时间点和各种场景的应急恢复。

大家如果想要测试异机备份,一键安装脚本可以参考以下连接

MySQL数据库一键安装脚本,适合任何版本

全网首例!MySQL8 MGR多主一键搭建脚本分享

实战!MySQL主从复制一键搭建脚本分享

小周的数据库进阶之路 致力于dba数据库经验分享、新手入门、原理解读、踩坑指南 171篇原创内容 公众号

 

文中的概念来源于互联网,如有侵权,请联系我删除。

欢迎关注公众号:小周的数据库进阶之路,一起交流数据库、中间件和云计算等技术。如果觉得读完本文有收获,可以转发给其他朋友,大家一起学习进步!感兴趣的朋友可以加我微信,拉您进群与业界的大佬们一起交流学习。

 

 

我科绝伦

赞赏二维码喜欢作者

MySQL5 备份恢复7 日常运维10 MySQL · 目录 下一篇MySQL8物理一键备份和恢复脚本分享 个人观点,仅供参考 阅读 710   ​ 喜欢此内容的人还喜欢   使用OGG 21版本完成Oracle19C到MySQL8的实时同步     我看过的号 小周的数据库进阶之路   不看的原因   MySQL分库分表:如何优雅地解决唯一主键的挑战?     我看过的号 架构经纬   不看的原因   一款轻量级、功能强大的可协作Excel在线表格,适用于Vue、React     前端学研社   不看的原因 写留言             小周的数据库进阶之路     写留言 留言  

暂无留言

标签:MySQL8,data,备份,--,Xtrabackup,玩转,mysql,test,root
From: https://www.cnblogs.com/cheyunhua/p/18432846

相关文章

  • 从0开始玩转机械臂----认识总线舵机(一)
    目录一、总线舵机简介二、总线舵机工作原理三、总线舵机接线三、上位机调试上位机正常界面上位机基本使用教程1.配置舵机id号2.读取舵机角度四、stm32读取舵机角度1、接线图2、实现代码最近在搞机械臂机械视觉的项目,想着写篇博客来记录一下自己的成长和记录自......
  • 【基础岛·第2关】8G 显存玩转书生大模型 Demo
    目录创建开发机环境配置CliDemo部署InternLM2-Chat-1.8B模型创建开发机我们选择10%的开发机,镜像选择为Cuda-12.2。在输入开发机名称后,点击创建开发机环境配置在/root/share/pre_envs中配置好了预置环境icamp3_demo可以通过如下指令进行激活:condaactivate/root......
  • 解读MySQL8.0数据字典重构源码
    摘要:本文对社区MySQL5.7到8.0演进过程中数据字典DD的重构(缓存,持久化),AtomicDDL的关键实现进行了分析。本文分享自华为云社区《【华为云MySQL技术专栏】MySQL8数据字典重构源码解读》,作者:GaussDB数据库1.背景介绍在MySQL5.7版本的使用实践过程中,我们很容易遇到DDL崩溃后导致数......
  • Python 路径管理新纪元:pathlib 模块带你玩转文件系统
    引言在早期的Python版本中,处理文件路径往往需要依赖于os和os.path模块,虽然它们功能强大,但复杂的API设计使得代码可读性较差。随着Python3.4的发布,pathlib模块正式登场,它以对象导向的方式简化了路径操作,使得代码更加直观易懂。本文旨在通过一系列实例帮助你快速上手pa......
  • mysql8.4:搭建主从复制(mysql 8.4.1)
    一,主库上:修改配置文件1,配置文件:/etc/my.cnf中,增加:server-id=1说明:无需指明logbin的值,因为它的默认值就是打开的,SHOWVARIABLESLIKE'log_bin';返回:说明:主库的server-id要和从库的server-id区分开,一般主库用1,其他各从库用2及以后的数字二,主库上:创建备份账号1,......
  • MySQL8.4.0安装
    1.官网下载压缩包官网地址:https://downloads.mysql.com/archives/community/2.选取需要的包上传Linux下载完成:解压完成:从中选取下列rpm包:上传至linux:这里上传到路径:/usr/local/mysql(cd/usr/local/;sudomkdirmysql#没有就创建 )3.按顺序下载(rpm)  ......
  • mysql8版本将用户host中的localhost不小心改掉后解决的办法
    在昨天因为某些原因需要给其他外部ip连接我的mysql,所以就上网找了怎么办,找到的办法是将host中localhost改成'%',这确实是可行的。但是由于本人小脑一抽决定先改成其他的试一试,后果就是直接gg,直接报错没有权限无法连接了(由于本人已经解决这个问题了,没有图放了)。下面来说一下解......
  • 2024三掌柜赠书活动第三十期:秒懂AI小红书:7招玩转素人博主变现
    目录前言打工人下班搞自媒体副业?7招玩转素人博主变现1. 智能选题,紧跟潮流2. 个性化内容创作3. 精准投放,高效引流4. 合作推广,双赢变现5. 直播带货,互动变现6. 社群运营,增强粘性7. 持续学习,紧跟AI步伐关于《秒懂AI小红书:7招玩转素人博主变现》编辑推荐内容简......
  • EC2机器上MySQL8 修改关闭binlog以及修改保存时间
    从库清空binlog因为MySQL8.0要修改配置文件,在mysqld下面增加skip-log-bin,且需要重启,所以换种思路直接将其设置为3分钟。##单位秒setglobalbinlog_expire_logs_seconds=180;##flushlogs;showbinarylogs;##清理日志,别一下全删完了,删到倒数第二个purgebinarylogs......
  • Liunx安装mysql8.0.39版本以及如何远程连接Navicat保姆级教学
    前言:对于MySQL数据库的安装,我们将要使用安装方式rpm进行安装通过百度网盘分享的文件:mysql-8.0.39-1.el7.x86_64.rpm-bundl...链接:https://pan.baidu.com/s/1uAOqAeH03eU7t8T1_ekXXA?pwd=obce 提取码:obce其他版本链接:MySQL::DownloadMySQLCommunityServer1:检测当前......