前言

通常我们都是使用xtrabackup工具来备份数据库,它是一个专业的备份工具,先来简单介绍下它。

Xtrabackup

percona提供的mysql数据库备份工具,惟一开源的能够对innodb和xtradb数据库,它的增量备份不是基于二进制日志文件来还原数据的,是基于mysql数据块。

特点:

  • 备份还原过程快速、可靠
  • 备份过程不会打断正在执行的事务
  • 能够基于压缩等功能节约磁盘空间和流量
  • 自动实现备份检验
  • 开源,免费

Xtrabackup用法

备份时选项

xtrabackup --backup

--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

Prepare于准备选项

prepare

--apply-log:此选项作用是通过回滚未提交的事务及同步已经提交的事务至数据文件使数据文件处于一致性状态

--use-memory:该选项表示和--apply-log选项一起使用,prepare 备份的时候,xtrabackup做crash recovery分配的内存大小,单位字节。也可(1MB,1M,1G,1GB),推荐1G

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

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

还原时选项

--copy-back:复制

--move-back:移动

备份生产的相关文件

1)xtrabackup_info:innobackupex工具执行时的相关信息,包括版本,备份选项,备份时长,备份LSN,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.datadir目录必须为空。除非指定innobackupex --force-non-emptydirectorires选项指定,否则--copy-backup选项不会覆盖

2.restore还原之前,必须shutdown停止 MySQL服务,不能将一个运行中的实例restore到datadir目录中

3.修改恢复文件的权限为mysql

4.最后一次增量备份还原要回滚事务

5.二进制安装的mysql要是出现停止不了服务就用killall –9 mysqld 杀掉进程进而实现停止服务

实战

规划

1、两台主机17和37,其中17当主mysql服务器,37用来还原的主机,

2、目录,1个存放完整备份的目录,N个存放增量备份的目录

说明:

full目录:  存放完全备份

inc1目录:存放第一次的增量备份

inc2目录:存放第二次的增量备份

备份阶段

1、完全备份数据库

xtrabackup -pcentos --backup --target-dir=/backups/full/
# --backup表示备份
# --target-dir=填写备份到哪里

2、往表中增加数据

mysql -pcentos hellodb -e "insert students (name,age) values('gaodao01',20)"



3、第一次增量备份

xtrabackup –pcentos --backup --target-dir=/backups/inc1/ --incremental-basedir=/backups/full
# --incremental-basedir表示基于谁的增量备份,写上上一次的备份路径
#

4、再次修改数据表

mysql -pcentos hellodb -e "insert students (name,age) values('gaodao02',21)"

5、第二次增量备份

xtrabackup -pcentos --backup --target-dir=/backups/inc2/ --incremental-basedir=/backups/inc1/

还原阶段

说明:还原的时候我们要考虑到前几次不要回滚,最后一次还原要回滚,还原主机要安装xtrabackup工具

1、把备份的目录传送到要还原的主机上

scp -r /backups/ 192.168.43.37:/

2、停服务并清空mysql数据

systemctl stop mysqld
rm -rf /app/mysql/*

3、完全备份的预处理

xtrabackup  --prepare --apply-log-only --target-dir=/backups/full
# --prepare 表示还原
# --apply-log-only 表示不回滚

4、第一次增量备份预处理

xtrabackup --prepare --apply-log-only --target-dir=/backups/full --incremental-dir=/backups/inc1
# 同样不回滚

5、第二次增量备份预处理

xtrabackup --prepare  --target-dir=/backups/full --incremental-dir=/backups/inc2
# 这是最后一次,所以要回滚不完整的事务

6、复制处理好的数据到真正的存放数据库目录下

xtrabackup --copy-back --target-dir=/backups/full
# 它会根据你的配置文件my.cnf来读取存放位置

7、修改数据库文件权限

chown -R mysql.mysql /app/mysql/

以上还原到了备份时的状态,我们备份完二次增量后又加了条记录,还没来得急三次增量备份就宕机了,所以再次利用二进制日志文件还原到最新状态

8、通过二进制文件还原到最新状态

1)以下图中文件记录了还原到的位置

2)从原主机导出二进制文件日志

mysqlbinlog --start-position=1039 /app/logs/mysql-bin.000003 >/app/binlog.sql

3)scp传送到目标主机来还原

  • 首先在配置文件中加入禁止所有人访问选项
skip-networking
  • 启动服务
systemctl start mysqld
  • 导入二进制日志
mysql -pcentos <binlog.sql

4)进入数据库验证

5)OK 恢复完成,删除配置文件中的skip-networking并重启服务

systemctl restart mysqld

更多精彩内容请移步

http://www.cnblogs.com/xsuid/

MySQL-Xtrabackup备份还原的更多相关文章

  1. MySQL数据库备份还原(基于binlog的增量备份)

    MySQL数据库备份还原(基于binlog的增量备份) 一.简介 1.增量备份      增量备份 是指在一次全备份或上一次增量备份后,以后每次的备份只需备份与前一次相比增加或者被修改的文件.这就意味 ...

  2. c# Process cmd 执行完回调 Proc_OutputDataReceived mysql mysqldump mysql source备份还原数据

    c# Process 执行完回调 Proc_OutputDataReceived mysql mysqldump mysql source备份还原数据 直接贴代码 前提:mysql5.7 vs2017 ...

  3. xtrabackup备份还原MySQL数据库

    mysqldump 备份鉴于其自身的某些特性(锁表,本质上备份出来insert脚本或者文本,不支持差异备份),不太适合对实时性要求比较高的情况Xtrabackup可以解决mysqldump存在的上述的 ...

  4. mysql xtrabackup 备份恢复实现,mysql命令备份数据库,打包压缩数据库

    简介 Xtrabackup是由percona提供的mysql数据库备份工具,据官方介绍,这也是世界上惟一一款开源的能够对innodb和xtradb数据库进行热备的工具.特点: (1)备份过程快速.可靠 ...

  5. xtrabackup备份还原mariadb数据库

    一.xtrabackup 简介 xtrabackup 是由percona公司开源免费的数据库热备软件,它能对InnoDB数据库和XtraDB存储引擎的数据库非阻塞地备份,对于myisam的备份同样需要 ...

  6. MySQL数据库备份还原

    本文以CentOS 7 yum安装的MariaDB-server5.5为例,说明MySQL的几种 备份还原方式 将服务器A(192.168.1.100)上的数据库备份,还原到B(192.168.1.2 ...

  7. 使用mysqldump进行mysql数据库备份还原

    mysqldump是mysql自带的备份还原工具,默认在安装目录的bin下 可通过cmd命令行启动,然后运行: 还原一个数据库: mysql -h 主机 -u 用户名 -p密码 数据库名 < 指 ...

  8. MySql的备份还原

    备份数据是数据库管理最常用的操作.为了保证数据库中数据的安全,数据管理员需要定期进行数据备份.一旦数据库遭到破坏,便可通过备份的文件来还原数据库.因此,数据备份是一项很重要的工作. 数据备份 使用my ...

  9. java实现mysql的备份还原

    此文章是基于 1. 搭建Jquery+SpringMVC+Spring+Hibernate+MySQL平台 2. jquery+springMVC实现文件上传 一. 简介 备份和导入是一个互逆的过程. ...

  10. ubuntu docker 搭建 mongodb,开启授权访问 redis,mysql mssql 备份还原

    命令安装docker 如果您想从Ubuntu存储库安装docker版本,则可以运行下面的apt命令. sudo apt install docker.io等到安装完成后,您可以启动Docker并使用s ...

随机推荐

  1. ip route,ip rule, iptables和docker的端口映射

    iptables 默认5个表, 不可增加其他表 raw 用于配置数据包,raw 中的数据包不会被系统跟踪. filter 是用于存放所有与防火墙相关操作的默认表. nat 用于 网络地址转换(例如:端 ...

  2. UiAutomator环境配置

    前提:下载jdk以及adt 一.配置java开发环境 1.新建系统变量 -——变量名:JAVA_HOME      变量值:C:\Program Files\Java\jdk1.7.0_80 2.编辑 ...

  3. 牛客网Java刷题知识点之插入排序(直接插入排序和希尔排序)、选择排序(直接选择排序和堆排序)、冒泡排序、快速排序、归并排序和基数排序(博主推荐)

    不多说,直接上干货! 插入排序包括直接插入排序.希尔排序. 1.直接插入排序: 如何写成代码: 首先设定插入次数,即循环次数,for(int i=1;i<length;i++),1个数的那次不用 ...

  4. 如何在Eclipse中正确安装Jetty插件并初步使用(图文详解)

    不多说,直接上干货! 最近在做一个Storm项目,需要用到Jetty来进行展示.它类似于Tomcat. 一.eclipse中jetty插件安装 打开eclipse,依次点击菜单Help->Ecl ...

  5. placeholder-shown

    一般我们常见placeholder伪类选择器用来修改默认样式及文案,忽然发现placeholder-shown伪类选择器,比较官方的解释是 CSS伪类表示任何显示占位符文本的form元素. 简单来说就 ...

  6. 有限状态机在单片机和 Arduino 编程中的应用

    有限状态机在单片机和 Arduino 编程中的应用,个人认为在实际中这是一种思想,意味着解决一类问题. 本帖最后由 张飞 于 2015-3-4 20:18 编辑 在单片机编程中,如果在不使用操作系统的 ...

  7. Windows安全认证是如何进行的?[NTLM篇]

    <上篇>中我们介绍Kerberos认证的整个流程.在允许的环境下,Kerberos是首选的认证方式.在这之前,Windows主要采用另一种认证协议——NTLM(NT Lan Manager ...

  8. IE6/IE7下只设置margin-left,左右都有边距问题

    CSS代码 div { border: 1px solid red; } .inner { width: 80px; height: 80px; float: left; position: rela ...

  9. Duplicate Emails

    Write a SQL query to find all duplicate emails in a table named Person. +----+---------+ | Id | Emai ...

  10. C# 常见的字符串操作

    例1: 遍历字符串中的每一个字符: string src = "aa-b - c-a - d-e- d-e- a- a-b-cc"; foreach(char c in src) ...