(1)备份开始时会开启一个后台检测进程,实时检测mysql redo(已提交的事务)的变化,一旦发现redo中有新日志写入,立刻将日志记入后台日志文件xtrabackup_log中,

(2)复制InnoDB的数据文件和系统表空间文件ibdata1,

(3)待复制结束后,执行flush tables with read lock操作,复制.frm、.MYI、.MY等文件

(4)执行flush tables with read lock的目的是为了防止数据表发生DML操作,并且在这一时刻获得binlog的位置,

(5)最后会发出unlock tables,把表设置为可读写状态,

(6)最终停止xtrabackup_log。

4.为什么要用XtraBackup

因为当数据库超过100G的话,用mysqldump就没有XtraBackup有优势,工作中mysqldump备份大的数据还会出现卡住,断开的可能性,XtraBackup支持完整备份,增量备份,完整恢复,增量恢复,对于innodb引擎备份时不锁表进行热备份。

二、XtraBackup安装

1.xtrabackup官网有很多个版本,有1.6、2.0-2.4和8.0,每个版本都有不同,根据自己需要下载安装,如:

xtrabackup1.6版本支持MySQL 5.0、5.1和5.5。

xtrabackup2.2和2.3版本支持备份MySQL 5.1 、5.5和5.6。

xtrabackup2.4版本支持MySQL 5.1、5.5、5.6和5.7。

xtrabackup8.0版本只支持MySQL8.0,不支持8.0之前的。

本文章使用xtrabackup2.3。

2.下载安装

官网有源码包下载,二进制包、还有存储库,官网推荐存储库下载,我这里环境用Centos7,所以用yum安装,这里选择安装yum install -y percona-xtrabackup.x86_64

1 yum install http://www.percona.com/downloads/percona-release/redhat/0.1-4/percona-release-0.1-4.noarch.rpm

2 yum list | greppercona3 percona-xtrabackup.x86_64 2.3.10-1.el7 percona-release-x86_644 percona-xtrabackup-22.x86_64 2.2.13-1.el7 percona-release-x86_645 percona-xtrabackup-22-debuginfo.x86_64 2.2.13-1.el7 percona-release-x86_646 percona-xtrabackup-24.x86_64 2.4.18-1.el7 percona-release-x86_647 percona-xtrabackup-24-debuginfo.x86_64 2.4.18-1.el7 percona-release-x86_648 percona-xtrabackup-80.x86_64 8.0.9-1.el7 percona-release-x86_649 percona-xtrabackup-80-debuginfo.x86_64 8.0.9-1.el7 percona-release-x86_6410 percona-xtrabackup-debuginfo.x86_64 2.3.10-1.el7 percona-release-x86_6411 percona-xtrabackup-test.x86_64 2.3.10-1.el7 percona-release-x86_6412 percona-xtrabackup-test-22.x86_64 2.2.13-1.el7 percona-release-x86_6413 percona-xtrabackup-test-24.x86_64 2.4.18-1.el7 percona-release-x86_6414 percona-xtrabackup-test-80.x86_64 8.0.9-1.el7 percona-release-x86_64

安装之后,可以检查xtrabackup版本,我本地的数据库版本是5.6

1 xtrabackup --version2 xtrabackup version 2.3.6 based on MySQL server 5.6.24 Linux (x86_64) (revision id: )

3.工具介绍

Xtrabackup安装完成后有4个可执行文件,其中2个比较重要的备份工具是innobackupex、xtrabackup

innobackupex

innobackupex是一个封装xtrabackup的Perl脚本。。

xtrabackup

编译后的C二进制文件,提供了使用MyISAM,InnoDB和XtraDB表备份整个MySQL数据库实例的功能。

xbcrypt加密

用于加密和解密备份文件的实用程序。

xbstream

允许以流的形式从xbstream格式提取文件,类似tar。

xbcloud

用于从云中下载xbstream归档的全部或部分或将其上传到云。

官网说明:innobackupex仍然像2.2版本一样支持所有功能和语法,但是现在已弃用,并且将在下一个主要版本中删除,Percona XtraBackup 2.3版本的推荐方式采取的备份是使用xtrabackup脚本,这篇文章介绍innobackupex脚本,差别不大。

4.innobackupex命令参数

--user=#指定数据库备份用户--password=#指定数据库备份用户密码--port=#指定数据库端口--host=#指定备份主机--socket=#指定socket文件路径--databases=        #备份指定数据库,多个空格隔开,如--databases="dbname1 dbname2",不加备份所有库--defaults-file=#指定my.cnf配置文件--apply-log     #日志回滚--incremental=#增量备份,后跟增量备份路径--incremental-basedir=#增量备份,指上次增量备份路径--redo-only     #合并全备和增量备份数据文件--copy-back     #将备份数据复制到数据库,数据库目录要为空--no-timestamp #生成备份文件不以时间戳为目录名--stream=   #指定流的格式做备份,--stream=tar,将备份文件归档,--stream=xbstream--remote-host=user@ip DST_DIR #备份到远程主机--use-memory=#该参数在prepare的时候使用,控制prepare时innodb实例使用的内存量--parallel        #用于复制数据文件的线程数。配合-stream=xbstream--compress        #压缩功能,配合-stream=xbstream--compress-threads=4    #用于并行数据压缩的线程数。此选项的默认值为1。配合-stream=xbstream--throttle=         #限制innobackupex读写InnoDB数据的速率

三、用innobackupex进行完整备份1.执行完整备份命令

innobackupex --defaults-file=/usr/local/mysql/my.cnf --user=root --password="123456" --socket=/tmp/mysql.sock --no-timestamp /data/backup/$(date +%F)/full

最后输出下面信息表示成功备份

xtrabackup: Transaction log of lsn (42677124128) to (42677124128) was copied.

200127 13:21:18 completed OK!

在/data/backup目录下面生成一个当前日期命名的目录,时间目录下面的full目录里面存放着备份出来的文件

1 [root@devops 13:17:24/data/backup/]# ll2 total 2535576

3 drwx------ 3 root root 4096 Jan 27 13:17 2020-01-27

介绍一下目录的文件信息

1 [root@devops 13:21:18/data/backup/]# ll 2020-01-27/full/

2 total 141364

3 -rw-r----- 1 root root 388 Jan 27 13:21 backup-my.cnf #备份命令用到的配置信息4 -rw-r----- 1 root root 144703488 Jan 27 13:17ibdata1      #备份的表空间的文件5 drwx------ 2 root root 4096 Jan 27 13:21mysql #备份出来的mysql、performance_schema、test数据库6 drwx------ 2 root root 4096 Jan 27 13:21performance_schema7 drwx------ 2 root root 4096 Jan 27 13:21test8 -rw-r----- 1 root root 21 Jan 27 13:21xtrabackup_binlog_info #binlog日志信息9 -rw-r----- 1 root root 121 Jan 27 13:21xtrabackup_checkpoints #这个比较重要,里面存放着lsn(日志序列号)10 -rw-r----- 1 root root 602 Jan 27 13:21xtrabackup_info #存放一些工具版本、数据库版本、执行开始结束时间等信息11 -rw-r----- 1 root root 2560 Jan 27 13:21 xtrabackup_logfile #重做日志文件

2.模拟删除整个数据目录

cd /data/ && rm -rf mysqldata

3.kill掉mysql进程

pgrep mysql | xargs kill

4.准备

准备(prepare)一个完全备份

一般情况下,在备份完成后,数据尚且不能用于恢复操作,因为备份的数据中可能会包含尚未提交的事务或已经提交但尚未同步至数据文件中的事务。因此,此时数据文件仍处理不一致状态。“准备”的主要作用正是通过回滚未提交的事务及同步已经提交的事务至数据文件也使得数据文件处于一致性状态。

innobackupex命令的-apply-log选项可用于实现上述功能

不建议在准备时中断xtrabackup过程,因为这可能会导致数据文件损坏并且备份将变得不可用。如果准备过程中断,则不能保证备份的有效性。

innobackupex --apply /data/backup/2020-01-27/full/

最后输出:200127 13:44:47 completed OK!

5.查看xtrabackup_checkpoints文件

查看合并后的 checkpoints 其中的类型变为 full-prepared 即为可恢复。

backup_type = full-prepared

6.执行恢复之前要在my.cnf指定数据目录

恢复备份之前,datadir必须为空。要注意在执行还原之前需要关闭MySQL服务器。不能还原到正在运行的mysqld实例的数据目录(导入部分备份时除外)

1 cat /usr/local/mysql/my.cnf | grepdatadir2 datadir = /data/mysqldata

7.执行恢复命令

innobackupex --defaults-file=/usr/local/mysql/my.cnf --copy-back /data/backup/2020-01-27/full

200127 13:56:37 completed OK!

如果恢复最后输出OK就没问题

8.修改权限

由于将保留文件的属性,因此在大多数情况下,mysql在启动数据库服务器之前,需要将文件的所有权更改为mysql

chown -R mysql.mysql /data/mysqldata

9.启动

service mysqld start

10.检查数据

总结:这篇文章介绍xtrabackup完整备份和还原,后面还会继续写,如果那里写得不好,请多多指教,谢谢

mysql数据库物理备份_MySQL数据库之xtrabackup物理备份(一)相关推荐

  1. mysql 备份_MySQL数据库备份实操

    本文基于mysql(8.0.20)及xtrabackup(8.0.13)最新版本,实现了完整的mysqldump逻辑备份.binlog增量备份.xtrabackup物理备份恢复,帮你快速掌握操作要点 ...

  2. mysql试题百度云_MySQL数据库无完整备份删库,除了跑路还能怎么办?

    1.背景 前段时间,由于运维同事的一次误操作,清空了内网核心数据库,导致了公司内部管理系统长时间不可用,大量知识库内容由于没有备份险些丢失. 结合这两天微盟的删库跑路事件,我们可以看到,数据库的备份与 ...

  3. mysql 本地备份_MYSQL数据库自动本地/异地双备份/MYSQL增量备份

    构建高安全电子商务网站之(网站文件及数据库自动本地/异地双备份)架构图 继续介绍Linux服务器文件备份,数据库备份,数据安全存储相关的电子商务系统架构.针对安全性有多种多样的解决方案,其中数据备份是 ...

  4. mysql 备份文件太大_mysql数据库太大了怎么备份

    本地: 1.进入MySQL目录下的bin文件夹:e:回车:e:\>cd mysql\bin 回车2.导出数据库:mysqldump -u?用户名 -p 数据库名 > 导出的文件名范例:my ...

  5. mysql异地备份_MySQL数据库异地备份与还原方法

    一.传统的MySQL数据库备份和恢复数据方法: 生成duSQL脚本 在控制zhi台使用mysqldump命令可以用来生成指定数据库的dao脚本文本,但要注意,脚本文本中只包含数据库的内容,而不会存在创 ...

  6. mysql全表重命名备份_Mysql数据库和表的常用操作以及数据备份恢复

    数据库 查看所有数据库 show databases; 使用数据库 use 数据库名; 查看当前使用的数据库 select database(); 创建数据库 create database 数据库名 ...

  7. mysql数据库压缩备份_MySQL数据库之mysql数据库备份命令分享(mysql压缩数据库备份)...

    本文主要向大家介绍了MySQL数据库之mysql数据库备份命令分享(mysql压缩数据库备份) ,通过具体的内容向大家展现,希望对大家学习MySQL数据库有所帮助. 备份MySQL数据库的命令 复制代 ...

  8. mysql数据库表复制备份_mysql数据库的备份以及表格数据之间的复制

    #####-------------mysql数据备份以及表间数据的复制-------------------##### ##----------------我的mysql学习(二)--------- ...

  9. mysql全表重命名备份_MySQL数据库重命名的快速且安全方法(3种)

    MySQL数据库重命名的方法 Innodb引擎的表如何改数据库名,MyISAM引擎又该如何操作. 如果表是MyISAM引擎可以直接去到数据库目录mv重命名文件夹就可以. Innodb完全不行,会提示相 ...

最新文章

  1. 规模化敏捷中的“三要”和“三不要”
  2. An Error Correction and DeNovo Assembly Approach for Nanopore Reads Using Short Reads
  3. 理解三次握手和四次挥手
  4. SQLite FTS5使用小技巧
  5. 1.3 用神经网络进行监督学习-深度学习-Stanford吴恩达教授
  6. grouping Function
  7. nacos 启动_【Nacos源码之配置管理 一】阅读源码第一步,本地启动Nacos
  8. 软件外包项目管理3点体会
  9. JavaWeb_EL表达式存储数据及获得项目路径
  10. 如何区别***工具与病毒
  11. QT的QWebEngineView内存泄漏
  12. 2021年 考研数学一 第17题
  13. qt.qpa.xcb: could not connect to display解决
  14. 第二章笔记:计数初步
  15. 情商高手比智商高手要可怕多了
  16. Python的门面担当 - Tkinter
  17. echarts动态循环出多个相同图表但不同数据动态渲染图表
  18. 声网首席科学家钟声:感知实时互联网
  19. 小陈java学习笔记IO
  20. 在pycharm中直接安装第三方包时出错提示无合适版本---解决方案

热门文章

  1. 五、唱歌不如跳舞(下)
  2. Linux脚本自动安装软件,一个快速自动安装Apache及其相关软件的Shell脚本
  3. 用100元买100支笔c语言,用C编程!有100块钱,买100支笔,其中钢笔3元,圆珠笔2元,铅笔0.5元,问各买多少支?...
  4. linux arm current_thread_info定义,linux中arm/mips架构current_thread_info定义
  5. linux和unix文件没有创建时间,Linux中没有文件创建时间的概念
  6. kepserver 三菱fx_#电工培训# #plc培训# PLC培训 学在智通 赢在职场【三菱plc吧】
  7. linux开放2280端口,威联通推出适用于NAS/PC的双端口 M.2 2280 PCIe NVMe SSD含双端口2.5GbE扩展卡...
  8. Linux strace 跟踪进程信息
  9. 我使用过的Linux命令之trap - 在脚本中处理信号
  10. python骨灰教学_python+mongodb+flask的基本使用