1.安装工具

需要在被备份的mysql数据库上安装第三方备份工具percona-xtrabackup,此程序需要的rpm包较多。所以我们需要下载此安装包

percona-xtrabackup-24-2.4.15-1.el7.x86_64.rpm

(适用于mysql5.7版本)

下载地址
https://repo.percona.com/yum/release/7/RPMS/x86_64/percona-xtrabackup-24-2.4.15-1.el7.x86_64.rpm

2.下载后上传到需要备份的服务器

去对应的目录

[root@localhost mnt]# ll
总用量 7712
drwxr-x--- 5 root root 87 10月 13 21:36 mysqlbak
-rw-r--r-- 1 root root 7893808 10月 12 10:15 percona-xtrabackup-24-2.4.15-1.el7.x86_64.rpm [root@localhost mnt]# yum install -y percona-xtrabackup-24-2.4.15-1.el7.x86_64.rpm 出现complete!才算安装完成 验证是否安装完成 输入
innobackupex –version
出现版本号则安装OK

全备

1.安装完成后我们进行数据库备份执行以下命令

(注意mysql数据库的密码要写正确才能进行备份)

参数--backup 为我们需要备份的目录.出现completedOK!备份完成
innobackupex --defaults-file=/etc/my.cnf --user=root --password="***" --socket=/tmp/mysql.sock --backup /mnt/mysqlbak/

可以看到整个备份过程:连接数据库,开始拷贝redo log,拷贝innodb表文件,锁表、拷贝非innodb表文件,停止拷贝redo log,解锁。

2.查看备份的数据

cd /mnt/mysqlbak && ll

这个是第一次全备

其中,mysql/, performance_schema/, sys/ ,school/ 下存放的是数据库文件。

backup-my.cnf,备份命令用到的配置选项信息;

ib_buffer_pool, buffer pool 中的热数据,当设置 innodb_buffer_pool_dump_at_shutdown=1 ,在关闭 MySQL 时,会把内存中的热数据保存在磁盘里 ib_buffer_pool 文件中,位于数据目录下。

ibdata1,备份的共享表空间文件;

xtrabackup_binlog_info,mysql服务器当前正在使用的二进制日志文件及至备份这一刻为止二进制日志事件的位置;

xtrabackup_checkpoints,备份类型(如完全或增量)、备份状态(如是否已经为prepared状态)和LSN(日志序列号)范围信息;

xtrabackup_info,记录备份的基本信息,uuid、备份命令、备份时间、binlog、LSN、以及其他加密压缩等信息。

xtrabackup_logfile,备份的重做日志文件。

3.进入数据库,删除一个测试库

4.删除school库

5.备份数据目录

创建一个数据目录

将/var/lib/mysql/data/ 目录下的所有文件移到备份目录去

6.恢复数据库

恢复数据之前要先关闭数据库

  • 首先执行以下命令,此命令是告诉系统我们要在此备份基础上启动mysql服务

    其中/mnt/mysqlbak/2022-10-14_10-59-30就是前面备份的数据库

innobackupex --apply-log --use-memory=500M /mnt/mysqlbak/2022-10-14_10-59-30

直到出现completed OK!

#--apply-log ( /data/pxb/2017-04-24_02-46-11/ 为备份目录,执行之后 xtrabackup_checkpoints 文件中的 backup_type = full-prepared )

7.执行命令恢复数据库

innobackupex --defaults-file=/etc/my.cnf --copy-back /mnt/mysqlbak/2022-10-14_10-59-30

直到出现completed OK!才算恢复完成

恢复后,一定要去数据目录,把所有的文件修改用户为mysql

8.验证数据库是否恢复成功

登录数据库后 show databases;


增量备份

我们刚才已经有了全量备份。现在我们创建一些新的表插入一些数据进行增量备份;

1.登录数据库

创建一个表,插入数据
use school;
create table t1(id int);
insert into t1 values(1);
insert into t1 values(11);

2.备份增量

现在进行第一次增量备份;其中标红的为全量备份的目录,----incremental后面为我们的增量备份的目录

innobackupex --defaults-file=/etc/my.cnf --user=root --password="***" --incremental /mnt/mysqlbak --socket=/tmp/mysql.sock --incremental-basedir=/mnt/mysqlbak/2022-10-14_10-59-30

出现completed ok!就是备份完成

--incremental 表示告诉mysql进行增量备份
--incremental-basedir 告诉MySQL基于哪个位置点进行增量备份

3.再插入一些数据

insert into t1 VALUES (2);
insert into t1 VALUES(22);

4.进行第二次增量备份

红色为我们上次增量备份的目录

innobackupex --defaults-file=/etc/my.cnf --user=root --password="***" --incremental /mnt/mysqlbak --socket=/tmp/mysql.sock --incremental-basedir=/mnt/mysqlbak/2022-10-14_16-02-08

出现completed ok! 为备份完成

现在查看备份目录,已经有一次全备,两次增备的数据

5.删除数据

mysql> drop table t1;
Query OK, 0 rows affected (0.01 sec)

6.关闭mysql

[root@localhost mysql]# service mysql stop
Shutting down MySQL.... SUCCESS! [root@localhost mysql]# mv data/* bak/ #将数据目录下的文件移走备份目录下去

7.恢复数据

执行以下命令,应用全量备份。目录为全量备份的目录

 #准备一个全备
innobackupex --apply-log --redo-only --use-memory=500M /mnt/mysqlbak/2022-10-14_10-59-30
>出现completed ok 为备份完成 ---
#将增量1应用到完全备份
innobackupex --apply-log --redo-only --use-memory=500M /mnt/mysqlbak/2022-10-14_10-59-30 --incremental-dir=/mnt/mysqlbak/2022-10-14_16-02-08
#incremental-dir 为增量备份的数据
>出现completed ok 为备份完成 ---
#再执行应用第二个增量备份。最后一个增量备份,不需要加redo-only选项
innobackupex --apply-log --use-memory=500M /mnt/mysqlbak/2022-10-14_10-59-30 --incremental-dir=/mnt/mysqlbak/2022-10-14_16-29-56
#最后一个增量备份,不需要加redo-only选项
>出现completed ok 为备份完成 ---
#执行全量恢复
innobackupex --defaults-file=/etc/my.cnf --copy-back /mnt/mysqlbak/2022-10-14_10-59-30
>出现completed ok 为备份完成

8.启动mysql

启动之前需要将数据目录的用户调整为mysql

数据恢复成功

参考https://www.cnblogs.com/waynechou/p/xtrabackup_backup.html

最新文章

  1. windows server 2003(64位)上利用iis6部署32位应用
  2. 用Python套接字创建HTTP客户与服务器程序
  3. Frame练习-打开图片
  4. 文件头 MAGE_FILE_HEADER
  5. Genealogical tree(拓扑结构+邻接表+优先队列)
  6. JAVA设计模式之---工厂模式
  7. JS基础三
  8. PTA_Have fun with numbers(C++)
  9. WordCount
  10. webpack 4.0 配置文件 webpack.config.js文件的放置位置
  11. SQL SERVER数据库级的触发器
  12. python字符编码与文件打开
  13. AspNetCore+Swagger 生成Model描述
  14. linux 的常用命令---------第九阶段
  15. ApiCloud开发经验总结
  16. vnc xfce tab自动补全失效的解决方法
  17. 1.scrapyd部署相关问题
  18. 算法 - Catalan数 (卡特兰)
  19. ASP.NET#LinqDataSource控件配置对象模型时遇到的问题
  20. JNI中GetStringChars函数中的isCopy

热门文章

  1. KingbaseES V8R6集群部署案例之---Windows环境配置主备流复制(同一主机)
  2. 【金九银十必问面试题】站在架构师角度分析问题,如何解决TCC中的悬挂问题
  3. Java访问Scala中的Int类型
  4. c#中容易被忽视的foreach
  5. 前端实现docx、pdf格式文件在线预览
  6. CentOS7部署FastDFS+nginx模块
  7. #Lua:Lua调用C++生成的DLL库
  8. centos下如何获取某个命令的源代码?
  9. 面向制造企业普适性ERP、MES类产品为什么那么难找?
  10. Skywalking Swck Agent注入实现分析