运维管理
MrDoc 速记插件
Docker 安装 mrdoc (开源版)
Docker-compose 安装 mrdoc
Linux之smartctl命令磁盘检测运维
Nginx配置服务并开机启动
yum安装与卸载软件常见命令「建议收藏」
yum 命令使用讲解
Nginx 映射本地静态文件
CentOS7.9 Docker部署Leanote
Nginx配置中的log_format
修改或者隐藏Nginx的版本号
centos编译安装方式升级snmpwalk命令到5.9.1从而支持SHA-512鉴权协议测试
PVE的local和local-lvm
markdown之群晖自建图床
Wireshark介绍及抓包分析
自定义数据推送到pushgateway及推送数据的注意事项
Prometheus监控实战系列十四:Pushgateway
使用 PushGateway 进行数据上报采集
RHEL6.0 yum安装报warning: rpmts_HdrFromFdno: Header V3 RSA/SHA256 Signature, key ID fd431d51: NOKEY错误-CSDN博客
烂泥:openvpn配置文件详解-烂泥行天下
RHEL系统以FTP服务器搭建yum源_rhel9 安装 ftp yum
详解用Navicat工具将Excel中的数据导入Mysql中 - Steven* - 博客园
Linux禁止ping以及开启ping的方法 - chenshoubiao - 博客园
MobaXterm设置无密码登录丨Pro Linux 基础篇
CentOS 安装 MySQL8,超详细!
percona-xtrabackup备份及恢复mysql操作
教你玩转MySQL8物理备份利器Xtrabackup
PVE浏览器中文设置
2024年PVE8最新安装使用指南|新手入门|安装|优化|Proxmox VE 8.1__什么值得买
sendmail发邮件注意事项
如何使用sqlite将db文件转成txt文件
一文让你学会,开源WAF雷池SafeLine
iptables按照指定国家屏蔽(GEOIP模块的安装与使用)
py3 容器适配conda24.3.0
CentOS7 配置 nginx 和 php 方案
Sakura Panel搭建教程-搭建属于自己的FRP管理面板
markdown之群晖自建图床
Debian12安装教程(保姆级)
CentOS 6.9密码修改
CentOS7如果忘记密码,密码重置详细步骤,保姆级教程。
利用CertBot实现免费SSL证书的自动签发与续签
证书3月一换很麻烦?一行命令让你解放双手
阿里云域名自动签发泛域名证书配置(最新篇)
Certimate证书自动续签
Auto-SSL
ubuntu忘记密码问题解决
Ubantu启动失败,提示“Started GNOME Display Manager”
kali网络配置(及配置ssh远程连接)
SSL证书--Let’s Encrypt和TrustAsia哪个好
PVE安装ikuai、openwrt以及lxc容器安装docker
Fail2Ban安全配置与应用
本文档使用 MrDoc 发布
-
+
首页
教你玩转MySQL8物理备份利器Xtrabackup
### 一、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和备份恢复数据库。后面会分享一键备份和恢复脚本,也会分享基于时间点和各种场景的应急恢复。
adouk
2024年11月27日 14:19
转发文档
收藏文档
上一篇
下一篇
手机扫码
复制链接
手机扫一扫转发分享
复制链接
Markdown文件
分享
链接
类型
密码
更新密码