zoukankan      html  css  js  c++  java
  • Percona Xtrabackup备份mysql全库及指定数据库(完整备份与增量备份)

    原文地址:http://www.tuicool.com/articles/RZRnq2

    Xtrabackup简介

    Percona XtraBackup是开源免费的MySQL数据库热备份软件,它能对InnoDB和XtraDB存储引擎的数据库非阻塞地备份(对于MyISAM的备份 同样需要加表锁)。XtraBackup支持所有的Percona Server、MySQL、MariaDB和Drizzle。

    XtraBackup优势 :

    1、无需停止数据库进行InnoDB热备

    2、增量备份MySQL

    3、流压缩到传输到其它服务器

    4、能比较容易地创建主从同步

    5、备份MySQL时不会增大服务器负载

    Xtrabackup安装

    这里只介绍Ubuntu-12.04下的安装方法,其它系统的安装方法请参考 http://www.percona.com/doc/percona-xtrabackup/2.1/installation.html

    apt-key adv --keyserver keys.gnupg.net --recv-keys 1C4CBDCDCD2EFD2A

    在/etc/apt/sources.list加入:

    2
    3
    deb http://repo.percona.com/apt precise main
    deb-src http://repo.percona.com/apt precise main

    执行update及安装操作

    2
    3
    apt-get update
    apt-get install percona-xtrabackup

    注:precise是Ubuntu-12.04的版本代号,如果是其它系统版本,需要更换。

    Xtrabackup工具介绍

    安装XtraBackup后,其实会有几个工具:

    innobackupex:这个是其实是下面三个工具的一个perl脚本封装,可以备份MyISAM, InnoDB, XtraDB表。但在处理Myisam时需要加一个读锁。

    xtrabackup:一个由C编译而来的二进制文件,只能备份InnoDB和XtraDB数据。

    xbcrypt:用来加密或解密备份的数据。

    xbstream:用来解压或压缩xbstream格式的压缩文件。

    建议使用perl封装的innobackupex来作数据库备份,因为比较容易使用。所以下面只介绍innobackupex的使用。其它的使 用参考: http://www.percona.com/doc/percona-xtrabackup/2.1/manual.html

    innobackupex使用方法

    完整的选项使用请执行innobackupex –help,这里只介绍使用常用的选项进行完整备份及增量备份和还原。

    innobackupex Options 这里只对常用参数进行描述

    –defaults-file 数据库的配置文件路径,感觉本地备份不写也可以,远程没测试过。

    –apply-log 准备在一个备份上启动mysql服务。

    –copy-back 从备份目录拷贝数据,索引,日志到my.cnf文件里规定的初始位置。

    –no-timestamp 创建备份时不自动生成时间目录,可以自定义备份目录名例如: /backups/mysql/base

    –databases 用于指定要备份的数据库, 多个库文件使用方法: “database1 database2″

    –incremental 在全备份的基础上进行增量备份,后跟增量备份存贮目录路径

    –incremental-basedir=DIRECTORY 增量备份所需要的全备份路径目录或上次做增量备份的目录路径

    –incremental-dir=DIRECTORY 增量备份存贮的目录路径

    –redo-only 用于准备增量备份内容把数据合并到全备份目录,配合–incremental-dir 增量备份目录使用。

    –force-non-empty-directories 如果是特定库备份还原,不需要删掉整个mysql目录,只是特定库的及相关文件就可以,还原时加上此参数就不会报错。

    其他具体参数可以参考:http://www.percona.com/doc/percona-xtrabackup/2.1/innobackupex/innobackupex_option_reference.html

    完整备份及还原

    一、全部数据库

    备份:

    innobackupex --user=root --password=root --defaults-file=/etc/mysql/my.cnf /data/mysql_backup/full_backup

    还原:

    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    service mysql stop
     
    rm -rf /var/lib/mysql
     
    mkdir /var/lib/mysql
     
    innobackupex --apply-log /data/mysql_backup/full_backup --use-memory=1G --user=root --password=root
     
    innobackupex --copy-back /data/mysql_backup/full_backup
     
    chown mysql:mysql -R /var/lib/mysql
     
    service mysql start

    查看恢复的数据库

    二、指定数据库

    备份:

    假如我们要备份centos和aabb数据库。

    innobackupex --user=root --password=root --defaults-file=/etc/mysql/my.cnf --databases="centos aabb" /data/mysql_backup/

    这样就会在/data/mysql_backup生成一个带时间的目录,如果不需要带时间,可以使用选项–no-timestamp。

    如果想备份成压缩文件,可以使用如下语句:

    innobackupex --user=root --password=root --defaults-file=/etc/mysql/my.cnf --databases="centos aabb" --no-timestamp --stream=tar ./ | gzip - > centos-aabb.bz.tar.gz

    还原:

    假如完整备份的路径为/data/mysql_backup/full_backup,如果完整备份是压缩文件,需要先解压再还原。

    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    service mysql stop
     
    rm -rf /var/lib/mysql/ibdata*
     
    rm -rf /var/lib/mysql/ib_logfile*
     
    rm -rf /var/lib/mysql/centos
     
    rm -rf /var/lib/mysql/aabb
     
    innobackupex --apply-log /data/mysql_backup/centos_aabb_full_backup
     
    innobackupex --copy-back --defaults-file=/etc/mysql/my.cnf /data/mysql_backup/centos_aabb_full_backup
     
    chown -R mysql:mysql /var/lib/mysql
     
    service mysql start

    增量备份及还原

    在这里全库的增量备份方法就不多讲了,只是针对特定数据库进行讲解,其实是同理的就是把下面参数中的–databases 选项去掉就可以,感兴趣的可以自己试下。

    增量备份是建立在完整备份的基础上的,所以首先确保已经完整备份了一次。

    完整备份:

    innobackupex --user=root --password=root --databases="centos" --no-timestamp /data/mysql_backup/centos_full_backup

    现在完整备份的目录为/data/mysql_backup/centos_full_backup。

    增量备份:

    第一次增量备份:

    innobackupex --incremental /data/mysql_backup/inc1 --no-timestamp --incremental-basedir=/data/mysql_backup/centos_full_backup --user=root --password=root --defaults-file=/etc/mysql/my.cnf

    第二次增量备份:需要把–incremental-basedir指定到上次做增量备份的目录,这里应该知道/data/mysql_backup/inc1

    innobackupex –incremental /data/mysql_backup/inc2 –no-timestamp –incremental-basedir=/data/mysql_backup/inc1 –user=root –password=root –defaults-file=/etc/mysql/my.cnf

    选项–incremental是指定作增量备份 –incremental-basedir选项是指定上一次增量备份的目录(如果是第一次作增量备份,则为完整备份的目录)。

    还原:

    增量备份的还原操作跟完整的还原有点不一样,首先必须使用–apply-log –redo-only对完整备份的目录及所有增量备份目录进行操作,然后就可以像还原完整备份时的操作了。

    对每个备份目录作apply-log redo-only操作(包括完整备份)

    3
    4
    5
    6
    7
    innobackupex --apply-log --redo-only /data/mysql_backup/centos_full_backup --user=root --password=root
     
    innobackupex --apply-log --redo-only /data/mysql_backup/centos_full_backup --incremental-dir=/data/mysql_backup/inc1 --user=root --password=root
     
    innobackupex --apply-log --redo-only /data/mysql_backup/centos_full_backup --incremental-dir=/data/mysql_backup/inc2 --user=root --password=root

    看到有文章在恢复增量备份的时候提到在做最后一个读取增量记录的时候不使用–redo-only 参数, 经过测试,使用了此参数后恢复的数据库也都运行正确,我使用的是2.17版本xtrabackup, 至于以前版本就没测试过。有知道的可以在这里分享下。

    下面就跟还原完整备份时一样了:

    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    service mysql stop
     
    rm -rf /var/lib/mysql/ibdata*
     
    rm -rf /var/lib/mysql/ib_logfile*
     
    rm -rf /var/lib/mysql/centos
     
    innobackupex --apply-log /data/mysql_backup/centos_full_backup --use-memory=1G --user=root --password=root
     
    ##--use-memory 能够定义读取备份时的内存大小,以便快速的完成还原准备工作。
     
    innobackupex --copy-back --defaults-file=/etc/mysql/my.cnf /data/mysql_backup/centos_full_backup
     
    chown mysql:mysql -R /var/lib/mysql
     
    service mysql start

    现在全部增量恢复就完成了,可以登录数据库查看下恢复的数据了

  • 相关阅读:
    Math.floor,Math.ceil,Math.rint,Math.round用法
    double类型转换为int类型四舍五入工具类
    精度更高的double类型计算工具类(借助BigDecimal类型)
    Java中float和double转换的问题
    Java对数
    iPhone内存溢出——黑白苹果
    VBS猜数游戏
    HTML_1
    MySQL学习
    Python进制转换
  • 原文地址:https://www.cnblogs.com/longshiyVip/p/5128777.html
Copyright © 2011-2022 走看看