热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

percona-xtrabackup实现数据库完全,增量的备份和还原(含一些版本问题与坑)

xtrabackup版本升级到2.4后,相比之前的2.1有了比较大的变化:innobackupex功能全部集成到xtrabackup里面,只有一个binary程序,另外为了兼容考虑,innobackupex作为xtrabackup的软链接,即xtrabacku现在支持非Innodb表备份,并且Innobackupex在下一版本中移除,建议通过xtrabackup替换innobackupex

注意:版本变化

xtrabackup版本升级到2.4后,相比之前的2.1有了比较大的变化:

innobackupex 功能全部集成到 xtrabackup 里面,只有一个 binary程序,另外为了兼容考虑,innobackupex作为 xtrabackup 的软链接,即xtrabacku现在支持非Innodb表备份,并且 Innobackupex 在下一版本中移除,建议通过xtrabackup替换innobackupex

这里mariadb5.5,为centos7默认版本,更高版有很多版本问题很严重

个人测试数据库版本10以上均无法使用xtrabackup

本次使用数据库5.5版本恢复主机10.4版本可行

首先安装xtrabackup

yum install percona-xtrabackup 在EPEL源中
  • >最新版本下载安装:

    https://www.percona.com/downloads/XtraBackup/LATEST/
  • >本次实验使用 2.4 版本
    下载地址: https://www.percona.com/downloads/Percona-XtraBackup-2.4/LATEST/

percona-xtrabackup实现数据库完全,增量的备份和还原(含一些版本问题与坑)

yum install /root/percona-xtrabackup-24-2.4.13-1.el7.x86_64.rpm #用yum解决依赖性

percona-xtrabackup实现数据库完全,增量的备份和还原(含一些版本问题与坑)

使用方法 :备份

备份:innobackupex [option] BACKUP-ROOT-DIR

选项说明:

--user:该选项表示备份账号

--password:该选项表示备份的密码

--host:该选项表示备份数据库的地址

--databases:该选项接受的参数为数据库名,如果要指定多个数据库,彼此间需要以空格隔开;如:"xtra_test dba_test",同时,在指定某数据库时,也可以只指定其中的某张表。如:"mydatabase.mytable"。该选项对innodb引擎表无效,还是会备份所有innodb表

--defaults-file:该选项指定从哪个文件读取 MySQL 配置,必须放在命令行第一个选项位置

--incremental:该选项表示创建一个增量备份,需要指定--incremental-basedir

--incremental-basedir:该选项指定为前一次全备份或增量备份的目录,与--incremental同时使用

--incremental-dir:该选项表示还原时增量备份的目录

--include=name:指定表名,格式:databasename.tablename

--apply-log:一般情况下,在备份完成后,数据尚且不能用于恢复操作,因为备份的数据中可能会包含尚未提交的事务或已经提交但尚未同步至数据文件中的事务。因此,此时数据文件仍处理不一致状态。此选项作用是通过回滚未提交的事务及同步已经提交的事务至数据文件使数据文件处于一致性状态--use-memory:和--apply-log选项一起使用prepare 备份时,做crashrecovery分配的内存大小,单位字节,也可1MB,1M,1G,1GB等,推荐1G

--export:表示开启可导出单独的表之后再导入其他Mysql中

--redo-only:此选项在prepare base full backup,往其中合并增量备份时候使

用,但不包括对最后一个增量备份的合并

还原

还原:innobackupex --copy-back [选项] BACKUP-DIR

选项

innobackupex --move-back [选项] [--defaults-group=GROUP-NAME] BACKUP-DIR

选项说明:

--copy-back:做数据恢复时将备份数据文件拷贝到MySQL服务器的datadir

--move-back:这个选项与--copy-back相似,唯一的区别是它不拷贝文件,

而是移动文件到目的地。这个选项移除backup文件,用时候必须小心。使用场

景:没有足够的磁盘空间同事保留数据文件和Backup副本

  • 还原注意事项:

    1. datadir 目录必须为空 。除非指定innobackupex --force-non-emptydirectorires选项指定,否则--copy-backup选不会覆盖

    2.在restore之前, 必须shutdown MySQL实例 ,不能将一个运行中的实例restore到datadir目录中

    3.由于文件属性会被保留,大部分情况下需要在启动实例之前将文件的属主改为mysql,这些文件将属于创建备份的用户chown -R mysql:mysql /data/mysql以上需要在用户调用innobackupex之前完成

    4--force-non-empty-directories:指定该参数时候,使得innobackupex --copy-back或--move-back选项转移文件到非空目录,已存在的文件不会被覆盖。如果--copy-back和--move-back文件需要从备份目录拷贝一个在datadir已经存在的文件,会报错失败

  • 备份生成的相关文件

使用innobackupex备份时,其会调用xtrabackup备份所有的InnoDB表,复制所有关于表结构定义的相关文件(.frm)、以及MyISAM、MERGE、CSV和ARCHIVE表的相关文件,同时还会备份触发器和数据库配置信息相关的文件。这些文件会被保存至一个以时间命名的目录中,在备份时,innobackupex还会在备份目录中创建如下文件:

(1)xtrabackup_info:innobackupex工具执行时的相关信息,包括版本,备份选项,

备份时长,备份LSN(log sequence number日志序列号),BINLOG的位置

(2)xtrabackup_checkpoints:备份类型(如完全或增量)、备份状态(如是否已经为

prepared状态)和LSN范围信息,每个InnoDB页(通常为16k大小)都会包含一个日志序

列号LSN。LSN是整个数据库系统的系统版本号,每个页面相关的LSN能够表明此页面

最近是如何发生改变的

(3)xtrabackup_binlog_info:MySQL服务器当前正在使用的二进制日志文件及至备份

这一刻为止二进制日志事件的位置,可利用实现基于binlog的恢复

(4)backup-my.cnf:备份命令用到的配置选项信息

(5)xtrabackup_logfile:备份生成的日志文件

1完全备份还原

  • 1查看当前数据库列表
root:~ # mysqlshow 
+--------------------+
|     Databases      |
+--------------------+
| hellodb            |
| information_schema |
| mysql              |
| performance_schema |
| test               |
+--------------------+
  • 2创建备份文件夹
root:~ # mkdir /xbackup
#备份时确保xbackup文件夹空
  • 3备份
root:~ # xtrabackup --backup --target-dir=/xbackup

......

190506 12:38:27 Executing UNLOCK TABLES
190506 12:38:27 All tables unlocked
190506 12:38:27 Backup created in directory '/xbackup/'
190506 12:38:27 [00] Writing /xbackup/backup-my.cnf
190506 12:38:27 [00]        ...done
190506 12:38:27 [00] Writing /xbackup/xtrabackup_info
190506 12:38:27 [00]        ...done
xtrabackup: Transaction log of lsn (1628321) to (1628321) was copied.
190506 12:38:27 completed OK!

percona-xtrabackup实现数据库完全,增量的备份和还原(含一些版本问题与坑)

  • 二进制日志位置

    percona-xtrabackup实现数据库完全,增量的备份和还原(含一些版本问题与坑)
root:~ # mysql -e 'show master logs;'
+------------------+-----------+
| Log_name         | File_size |
+------------------+-----------+
| mysql-bin.000001 |       245 |
+------------------+-----------+
  • 开始结束的lsn号
    percona-xtrabackup实现数据库完全,增量的备份和还原(含一些版本问题与坑)
  • 版本信息
root:~ # cat /xbackup/xtrabackup_info 
uuid = c991e905-6fb9-11e9-83d3-000c29f89546
name = 
tool_name = xtrabackup
tool_command = --backup --target-dir=/xbackup
tool_version = 2.4.13
ibbackup_version = 2.4.13
server_version = 5.5.60-MariaDB
start_time = 2019-05-06 12:45:33
end_time = 2019-05-06 12:45:35
lock_time = 0
binlog_pos = filename 'mysql-bin.000001', position '245'
innodb_from_lsn = 0
innodb_to_lsn = 1628321
partial = N
incremental = N
format = file
compact = N
compressed = N
encrypted = N
  • 4还原

注意:还原时必须停止服务

在另一台主机上

root:~ # systemctl stop  mariadb.service 
root:~ # rm -rf /var/lib/mysql/*
  • 5把文件拷至目标主机
    root:~ # scp -rp /xbackup/ 192.168.64.141:/data/backup/
  • 6还原
    1)预准备:确保数据一致,提交完成的事务,回滚未完成的事务
    root:~ # xtrabackup --prepare --target-dir=/data/backup/xbackup

    percona-xtrabackup实现数据库完全,增量的备份和还原(含一些版本问题与坑)

2)复制到数据库目录

注意:数据库目录必须为空,MySQL服务不能启动

root:~ # xtrabackup --copy-back --target-dir=/data/backup/xbackup --datadir=/var/lib/mysql
  • 7改权限

percona-xtrabackup实现数据库完全,增量的备份和还原(含一些版本问题与坑)

chown -R mysql:mysql /var/lib/mysql/

percona-xtrabackup实现数据库完全,增量的备份和还原(含一些版本问题与坑)

  • 8启动服务

一些高版本备份出现的问题

root:~ # xtrabackup --backup --target-dir=/data/backup/
xtrabackup: recognized server arguments: 
xtrabackup: recognized client arguments: --backup=1 --target-dir=/data/backup/ 
190506 12:07:38  version_check Connecting to MySQL server with DSN 'dbi:mysql:;mysql_read_default_group=xtrabackup' (using password: NO).
190506 12:07:38  version_check Connected to MySQL server
190506 12:07:38  version_check Executing a version check against the server...
190506 12:07:38  version_check Done.
190506 12:07:38 Connecting to MySQL server host: localhost, user: not set, password: not set, port: not set, socket: not set
Using server version 10.4.4-MariaDB
xtrabackup version 2.4.13 based on MySQL server 5.7.19 Linux (x86_64) (revision id: 3e7ca7c)
xtrabackup: uses posix_fadvise().
xtrabackup: cd to /var/lib/mysql/
xtrabackup: open files limit requested 0, set to 1024
xtrabackup: using the following InnoDB configuration:
xtrabackup:   innodb_data_home_dir = .
xtrabackup:   innodb_data_file_path = ibdata1:12M:autoextend
xtrabackup:   innodb_log_group_home_dir = ./
xtrabackup:   innodb_log_files_in_group = 2
xtrabackup:   innodb_log_file_size = 50331648
InnoDB: Number of pools: 1
InnoDB: Unsupported redo log format. The redo log was created with MariaDB 10.4.4. Please follow the instructions at http://dev.mysql.com/doc/refman/5.7/en/upgrading-downgrading.html

2增量备份与完全备份组合

准备:

root:~ # mkdir /xbackup/{base,inc1,inc2}
root:~ # tree /xbackup/
/xbackup/
├── base  #完全备份
├── inc1  #第一次增量备份
└── inc2   #第二次增量备份

3 directories, 0 files

1完全备份

root:~ # xtrabackup --backup --target-dir=/xbackup/base

2第一次修改数据,添加两条记录

insert teachers (name,age)value('xiaoming',30);
insert teachers (name,age)value('xiaoqiang',40);

3第一次增量备份

root:~ # xtrabackup --backup --target-dir=/xbackup/inc1 --incremental-basedir=/xbackup/base

----------------------------
xtrabackup: Transaction log of lsn (1628972) to (1628972) was copied.
190506 13:34:40 completed OK!

4第二次修改数据,添加两条记录

insert teachers (name,age)value('xiaohong',20);
insert teachers (name,age)value('xiaowang',30);
MariaDB [hellodb]> select * from teachers;
+-----+---------------+-----+--------+
| TID | Name          | Age | Gender |
+-----+---------------+-----+--------+
|   1 | Song Jiang    |  45 | M      |
|   2 | Zhang Sanfeng |  94 | M      |
|   3 | Miejue Shitai |  77 | F      |
|   4 | Lin Chaoying  |  93 | F      |
|   5 | xiaoming      |  30 | NULL   |
|   6 | xiaoqiang     |  40 | NULL   |
|   7 | xiaohong      |  20 | NULL   |
|   8 | xiaowang      |  30 | NULL   |
+-----+---------------+-----+--------+

5第二次增量备份

root:~ # xtrabackup --backup --target-dir=/xbackup/inc2 --incremental-basedir=/xbackup/inc1

6拷贝文件

root:~ # scp -r /xbackup/* 192.168.64.141:/data/backup

7在目标主机整理文件

  • 关闭mariadb

    1)预准备完全备份,此选项--apply-log-only 阻止回滚未完成的事务

    root:~ # xtrabackup --prepare --apply-log-only --target-dir=/data/backup/base

    2)合并第1次增量备份到完全备份

    root:~ # xtrabackup --prepare --apply-log-only --target-dir=/data/backup/base --incremental-dir=/data/backup/inc1

    3)合并第2次增量备份到完全备份:最后一次还原不需要加选项--apply-log-only

root:~ # xtrabackup --prepare --target-dir=/data/backup/base --incremental-dir=/data/backup/inc2

4)将整理好的文件复制到mariadb目录

root:~ # rm -rf /var/lib/mysql/* 
root:~ # xtrabackup --copy-back --target-dir=/data/backup/base --datadir=/var/lib/mysql

5)还原属性:chown -R mysql:mysql /var/lib/mysql

6)启动服务:systemctl start mariadb

percona-xtrabackup实现数据库完全,增量的备份和还原(含一些版本问题与坑)

以上所述就是小编给大家介绍的《percona-xtrabackup实现数据库完全,增量的备份和还原(含一些版本问题与坑)》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 我们 的支持!


推荐阅读
  • 在使用 PHP 通过 SSL 安全连接到 MySQLi 数据库服务器时,遇到了一些技术难题。我的环境包括一个 Web 服务器和一个数据库服务器,两者均使用 OpenSSL 生成了证书。尽管证书内容一致,但在尝试从 Web 服务器使用 `mysql` 命令进行连接时,仍然遇到了问题。为了确保连接的安全性和稳定性,需要进一步检查证书配置和 PHP 的 SSL 设置,以排除潜在的配置错误或兼容性问题。 ... [详细]
  • 在Linux系统中避免安装MySQL的简易指南
    在Linux系统中避免安装MySQL的简易指南 ... [详细]
  • 您的数据库配置是否安全?DBSAT工具助您一臂之力!
    本文探讨了Oracle提供的免费工具DBSAT,该工具能够有效协助用户检测和优化数据库配置的安全性。通过全面的分析和报告,DBSAT帮助用户识别潜在的安全漏洞,并提供针对性的改进建议,确保数据库系统的稳定性和安全性。 ... [详细]
  • 在 CentOS 6.5 系统上部署 VNC 服务器的详细步骤与配置指南
    在 CentOS 6.5 系统上部署 VNC 服务器时,首先需要确认 VNC 服务是否已安装。通常情况下,VNC 服务默认未安装。可以通过运行特定的查询命令来检查其安装状态。如果查询结果为空,则表明 VNC 服务尚未安装,需进行手动安装。此外,建议在安装前确保系统的软件包管理器已更新至最新版本,以避免兼容性问题。 ... [详细]
  • 本文详细介绍了在 CentOS 7 系统中配置 fstab 文件以实现开机自动挂载 NFS 共享目录的方法,并解决了常见的配置失败问题。 ... [详细]
  • 在CentOS 7环境中安装配置Redis及使用Redis Desktop Manager连接时的注意事项与技巧
    在 CentOS 7 环境中安装和配置 Redis 时,需要注意一些关键步骤和最佳实践。本文详细介绍了从安装 Redis 到配置其基本参数的全过程,并提供了使用 Redis Desktop Manager 连接 Redis 服务器的技巧和注意事项。此外,还探讨了如何优化性能和确保数据安全,帮助用户在生产环境中高效地管理和使用 Redis。 ... [详细]
  • SecureCRT是一款功能强大的终端仿真软件,支持SSH1和SSH2协议,适用于在Windows环境下高效连接和管理Linux服务器。该工具不仅提供了稳定的连接性能,还具备丰富的配置选项,能够满足不同用户的需求。通过SecureCRT,用户可以轻松实现对远程Linux系统的安全访问和操作。 ... [详细]
  • 本文详细介绍了在CentOS 6.5 64位系统上使用阿里云ECS服务器搭建LAMP环境的具体步骤。首先,通过PuTTY工具实现远程连接至服务器。接着,检查当前系统的磁盘空间使用情况,确保有足够的空间进行后续操作,可使用 `df` 命令进行查看。此外,文章还涵盖了安装和配置Apache、MySQL和PHP的相关步骤,以及常见问题的解决方法,帮助用户顺利完成LAMP环境的搭建。 ... [详细]
  • 如何高效地安装并配置 PostgreSQL 数据库系统?本文将详细介绍从下载到安装、配置环境变量、初始化数据库、以及优化性能的全过程,帮助读者快速掌握 PostgreSQL 的核心操作与最佳实践。文章还涵盖了常见问题的解决方案,确保用户在部署过程中能够顺利解决遇到的各种挑战。 ... [详细]
  • 在Ubuntu系统中配置Python环境变量是确保项目顺利运行的关键步骤。本文介绍了如何将Windows上的Django项目迁移到Ubuntu,并解决因虚拟环境导致的模块缺失问题。通过详细的操作指南,帮助读者正确配置虚拟环境,确保所有第三方库都能被正确识别和使用。此外,还提供了一些实用的技巧,如如何检查环境变量配置是否正确,以及如何在多个虚拟环境之间切换。 ... [详细]
  • 如何在Linux系统上部署MySQL 5.7.28
    本文详细介绍了在Linux系统上部署MySQL 5.7.28的具体步骤。通过官方下载页面获取最新安装包后,按照提供的指南进行配置和安装。文章内容实用性强,适合初学者和有经验的管理员参考。 ... [详细]
  • 篇首语:本文由编程笔记#小编为大家整理,主要介绍了实现MySQL半同步架构相关的知识,希望对你有一定的参考价值。默认情况下,MySQL的复制功能是异步的, ... [详细]
  • mysql--mariadb--postgresql官网简介https:www.postgresql.org使用的镜像名称centospostgresql-96-centos7 ... [详细]
  • 开发笔记:Linux 系统安装下安装 mysql5.7(glibc版)
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了Linux系统安装下安装mysql5.7(glibc版)相关的知识,希望对你有一定的参考价值。 ... [详细]
  • PDO MySQL
    PDOMySQL如果文章有成千上万篇,该怎样保存?数据保存有多种方式,比如单机文件、单机数据库(SQLite)、网络数据库(MySQL、MariaDB)等等。根据项目来选择,做We ... [详细]
author-avatar
男人要走火_293
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有