MySQL备份恢复工具Xtrabackup
参考文档https://www.cnblogs.com/youkanyouxiao/p/8335173.html
Xtrabackup介绍
Xtrabackup是由percona开源的免费数据库热备份软件,它能对InnoDB数据库和XtraDB存储引擎的数据库非阻塞地备份(对于MyISAM的备份同样需要加表锁);mysqldump备份方式是采用的逻辑备份,其最大的缺陷是备份和恢复速度较慢,如果数据库大于50G,mysqldump备份就不太适合。
Xtrabackup安装完成后有4个可执行文件,其中2个比较重要的备份工具是innobackupex、xtrabackup
1)xtrabackup 是专门用来备份InnoDB表的,和mysql server没有交互;
2)innobackupex 是一个封装xtrabackup的Perl脚本,支持同时备份innodb和myisam,但在对myisam备份时需要加一个全局的读锁。
3)xbcrypt 加密解密备份工具
4)xbstream 流传打包传输工具,类似tar
Xtrabackup优点
Xtrabackup优点
1)备份速度快,物理备份可靠
2)备份过程不会打断正在执行的事务(无需锁表)
3)能够基于压缩等功能节约磁盘空间和流量
4)自动备份校验
5)还原速度快
6)可以流传将备份传输到另外一台机器上
7)在不增加服务器负载的情况备份数据
Xtrabackup备份原理
备份原理
备份开始时首先会开启一个后台检测进程,实时检测mysq redo的变化,一旦发现有新的日志写入,立刻将日志记入后台日志文件xtrabackup_log中,之后复制innodb的数据文件一系统表空间文件ibdatax,复制结束后,将执行flush tables with readlock,然后复制.frm MYI MYD等文件,最后执行unlock tables,最终停止xtrabackup_log
Xtrabackup增量备份介绍
xtrabackup增量备份的原理是:
1)、首先完成一个完全备份,并记录下此时检查点LSN;
2)、然后增量备份时,比较表空间中每个页的LSN是否大于上次备份的LSN,若是则备份该页并记录当前检查点的LSN。
增量备份优点:
1)、数据库太大没有足够的空间全量备份,增量备份能有效节省空间,并且效率高;
2)、支持热备份,备份过程不锁表(针对InnoDB而言),不阻塞数据库的读写;
3)、每日备份只产生少量数据,也可采用远程备份,节省本地空间;
4)、备份恢复基于文件操作,降低直接对数据库操作风险;
5)、备份效率更高,恢复效率更高。
Xtrabackup安装
环境查看
下载
1 | wget https: / / www.percona.com / downloads / XtraBackup / Percona - XtraBackup - 2.4 . 12 / binary / redhat / 7 / x86_64 / Percona - XtraBackup - 2.4 . 12 - r170eb8c - el7 - x86_64 - bundle.tar |
解压
1 | tar - xf Percona - XtraBackup - 2.4 . 12 - r170eb8c - el7 - x86_64 - bundle.tar |
安装依赖包
1 2 | yum install - y perl - DBD - MySQL yum - y install perl - Digest - MD5 |
安装
1 | rpm - ivh percona - xtrabackup - 24 - 2.4 . 12 - 1.el7 .x86_64.rpm |
如果安装提示错误
1 | 需要:libmysqlclient.so.18(libmysqlclient_18)(64bit) |
则使用以下方法解决
1 2 | # wget http://www.percona.com/redir/downloads/Percona-XtraDB-Cluster/5.5.37-25.10/RPM/rhel6/x86_64/Percona-XtraDB-Cluster-shared-55-5.5.37-25.10.756.el6.x86_64.rpm # rpm -ivh Percona-XtraDB-Cluster-shared-55-5.5.37-25.10.756.el6.x86_64.rpm |
查看是否正常安装
MySQL创建测试数据库
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | mysql> create database test; Query OK, 1 row affected ( 0.00 sec) mysql> use test; Database changed mysql> create table T1 (name varchar( 10 ) not null,sex varchar( 10 ) not null); Query OK, 0 rows affected ( 0.15 sec) mysql> insert into T1 values( 'zhang' , 'man' ); Query OK, 1 row affected ( 0.01 sec) mysql> insert into T1 values( 'zhan' , 'man' ); Query OK, 1 row affected ( 0.01 sec) mysql> insert into T1 values( 'sun' , 'woman' ); Query OK, 1 row affected ( 0.00 sec) |
Xtrabackup全量备份与恢复
全备
1 | innobackupex - - defaults - file = / etc / my.cnf - - user = root - - password = '123456' - - backup / root |
--defaults-file指定配置文件 --user指定用户名 --password指定密码,需要单引号否则可能报错 --backup指定备份路径
在文件夹/root下面生成一个已当天日志命名的文件夹
#使用此参数使用相关数据性文件保持一致性状态
1 | innobackupex - - apply - log / root / 2018 - 12 - 07_15 - 07 - 18 / |
测试全备恢复,删除表T1
恢复数据,需要保持数据目录是空的状态,把/var/lib/mysql里面文件及文件夹全备删除
1 | innobackupex - - defaults - file = / etc / my.cnf - - copy - back / root / 2018 - 12 - 07_15 - 07 - 18 / |
默认数据文件的属主为root需要修改成mysql
1 | chown - R mysql.mysql / var / lib / mysql / * |
启动mysql
1 | systemctl start mysql |
查看数据回来了
Xtrabackup增量备份与恢复
#需要注意的是,增量备份仅能应用于InooDB或XtraDB表,对于MyISAM表,增量与全备相同
数据库新增几条数据用于测试增量备份
1 2 3 4 5 6 7 8 | mysql> insert into T1 values( 'susun' , 'man' ); Query OK, 1 row affected ( 0.02 sec) mysql> insert into T1 values( 'sige' , 'man' ); Query OK, 1 row affected ( 0.01 sec) mysql> insert into T1 values( 'mgg' , 'man' ); Query OK, 1 row affected ( 0.01 sec) |
创建用于增量备份的数据,用来模拟删除掉了全备后的数据,能否通过增量备份文件来恢复
1 | innobackupex - - defaults - file = / etc / my.cnf - - user = root - - password = '123456' - - incremental / backup / - - incremental - basedir = / root / 2018 - 12 - 07_15 - 07 - 18 / |
--incremental指定增量备份的路径,--incremental-basedir指定上一次全备的路径
删除一条数据用于测试增量备份
1 | delete from T1 where name = 'susun' ; |
增量恢复操作过程如下
1 2 | innobackupex - - apply - log - - redo - only / root / 2018 - 12 - 07_15 - 07 - 18 / innobackupex - - apply - log - - redo - only / root / 2018 - 12 - 07_15 - 07 - 18 / - - incremental - dir = / backup / 2018 - 12 - 07_15 - 25 - 56 / |
恢复全部数据,同样需要删除/var/lib/mysql下所有文件
1 | innobackupex - - defaults - file = / etc / my.cnf - - copy - back / root / 2018 - 12 - 07_15 - 07 - 18 / |
设置mysql用户权限重启mysql
查看是否恢复
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!