docker mysql数据备份xtrabackup

发布时间:2020-11-16 10:08:22编辑:admin阅读(2700)

    一、概述

    线上有一个mysql,是在docker里面运行的。

    关于docker封装mysql镜像,请参考链接:https://www.cnblogs.com/xiao987334176/p/11984692.html

     

    为了避免数据丢失,需要做数据备份,但是不能影响mysql运行。所以这里采用xtrabackup

    xtrabackup介绍

    对于MySQL数据库的热备,xtrabackup是除了MySQL enterprise backup之外的不二之选。该工具提供了基于innodb存储引擎的热备,支持全量,增量备份,部分备份,时点恢复以及使用xtrabackup备份来重做slave等。xtrabackup工具包包含一个innobackupex命令行工具,同时支持InnoDB引擎以及MyISAM引擎。本文主要描述的是trabackup的备份原理并给出了相关演示。

     

    xtrabackup工作原理

    InnoDB引擎很大程度上与Oracle类似,使用redo,undo机制,因此在热备期间需要考虑对于日志缓冲区在线事物日志及时写出到文件的问题。如果log buffer没有及时写出将被日志的循环写特性覆盖。xtrabackup在启动时会记住log sequence number(LSN),然后一页一页地复制InnoDB的数据。与此同时,监控log buffer中的日志情况,一旦log buffer发生变化,即数据发生了不一致,该过程会立即被捕获并把变化的页面复制到xtrabckup log,直到全部innoDB数据文件复制完成之后,停止监控log buffer及日志复制。
        xtrabackup在恢复期间对提交的事务前滚,未提交或失败的事务进行回滚,从而保证数据的一致性。因此对于InnoDB表在备份期间不会锁表。由于XtraBackup其内置的InnoDB库打开文件的时候是rw的,所以运行XtraBackup的用户,必须对InnoDB的数据文件具有读写权限。

    1.png

     

    extrabackup的备份步骤

    1.png

     

    二、xtrabackup运行

    环境说明

    操作系统:centos 7.6

    ip地址:192.168.31.250

    mysql数据目录(宿主机):/home/data

    mysql备份目录(宿主机):/home/backup

     

    说明:mysql容器和xtrabackup容器运行在同一台服务器上,因为xtrabackup运行过程中,需要读取mysql数据目录。

     

    有3种方案安装xtrabackup,分别是:

    编译安装
    在线安装
    docker封装

    这里选择第3种方案,使用docker部署比较方案,方便迁移。

     

    下载xtrabackup

    下载地址:https://www.percona.com/downloads/

    找到Percona XtraBackup

    1.png

     

     这里选择2.4版本,8.0版本太新了。

     

    选择centos7,下载percona-xtrabackup-24-2.4.20-1.el7.x86_64.rpm

    1.png

     

    镜像封装

    这里以centos:7.8.2003作为基础镜像。

    新建目录

    mkdir -p /opt/centos7.8_xtrabackup

    最终目录结构如下:

    ./
    ├── dockerfile
    └── percona-xtrabackup-24-2.4.20-1.el7.x86_64.rpm

    dockerfile

    FROM centos:7.8.2003
    ADD percona-xtrabackup-24-2.4.20-1.el7.x86_64.rpm /
    RUN yum install -y /percona-xtrabackup-24-2.4.20-1.el7.x86_64.rpm && \
        yum clean all && \
        rm -rf /percona-xtrabackup-24-2.4.20-1.el7.x86_64.rpm

    生成镜像

    docker build -t centos7.8_xtrabackup:v1 .

     

    运行镜像

    docker run -it -d \
      --name centos7.8_xtrabackup \
      --restart=always \
      -e TZ=Asia/Shanghai \
      -v /home/backup:/backup \
      -v /home/data:/data \
      centos7.8_xtrabackup:v1


    完整备份

    进入docker

    docker exec -it centos7.8_xtrabackup /bin/bash

     

    执行以下命令

    innobackupex --user=root --password=12456 --port=3306 --host=192.168.31.250 --socket=/data/mysql/data/mysqld.sock --datadir=/data/mysql/data --stream=tar /backup |gzip>/backup/mysql.tar.gz

    输出:

    ...
    201110 15:39:17 [00] Streaming <STDOUT>
    201110 15:39:17 [00]        ...done
    xtrabackup: Transaction log of lsn (295739637) to (295739646) was copied.
    201110 15:39:17 completed OK!
    有输出completed OK,表示备份成功。

     

    参数说明:

    --user     #指定数据库备份用户
    –password  #指定数据库备份用户密码
    –port      #指定数据库端口
    –host      #指定备份主机
    –socket    #指定socket文件路径
    --datadir  #指定mysql datadir路径
    --stream   #指定流的格式做备份,–stream=tar,将备份文件归档

     

    查看备份文件

    [root@a241640e14f2 ]# ll /backup/
    total 35548
    -rw-r--r-- 1 root root 36400167 Nov 10 15:39 mysql.tar.gz
    会发现,多了一个mysql.tar.gz

     

     

    本文参考链接:

    https://blog.csdn.net/leshami/article/details/41043269

    https://www.cnblogs.com/nmap/p/6722400.html


关键字