zoukankan      html  css  js  c++  java
  • PerconaXtraBackup-2.2.8手册翻译

    1.1.2 Percona Xtrabackup特性

    * 不停机创建Innodb数据库热备
    * 对Mysql数据库创建增量备份
    * 压缩数据流方式备份到异地服务器
    * 更加便捷创建新的mysql从库
    * 无需登录数据库执行mysql备份

    2.2 源码编译安装Percona Xtrabackup

    下载地址:http://www.percona.com/downloads/XtraBackup/XtraBackup-2.2.8/source/

    2.2.1 Linux上编译

    系统配置要求
    yum install cmake gcc gcc-c++ libaio libaio-devel automake autoconf bzr bison libtool ncurses5-devel
    Cmake编译
    cmake -DBUILD_CONFIG=xtrabackup_release && make -j4
    安装
    make install
    安装Percona XtraBackup 的全部二进制文件,默认安装目录到/usr/local/xtrabackup

    3.1 Percona XtraBackup 用户手册

    3.1.1 innobackupex 脚本

    innobackupex工具是Xtrabackup的一个插件,以支持对其他存储引擎(MyISAM等)数据库的备份

    前提
    连接和权限:使用--user 和 --password选项
    Connecting to the server
    $ innobackupex --user=DBUSER --password=PASSWORD /path/to/backup/dir/
    $ innobackupex --user=DBUSER --password=PASSWORD --stream=tar ./ | bzip2 -
    $ xtrabackup --user=DBUSER --password=PASSWORD --backup --target=/data/bkps/

    其他连接选项:
    -port
    -socket
    -host

    权限:
    * RELOAD LOCK TABLES
    * REPLICATION CLIENT
    * CREATE TABLESPACE
    * PROCESS
    * SUPER
    * CREATE
    * INSERT
    * SELECT

    mysql> create user 'bkpuser'@'localhost' identified by 'password';
    mysql> grant RELOAD,LOCK TABLES , REPLICATION CLIENT ON *.* to 'bkpuser'@'localhost';
    mysql> flush privileges;

    3.1.2 Backup Cycle之全备

    * 用innobackupex创建一个备份
    创建一个全备,除了需要连接服务器的参数外,还需要一个参数:存放备份文件的路径
    $ innobackupex --user=USER --password=PASSWORD /path/to/backup-dir/
    显示下面信息,表示备份成功:
    innobackupex: Backup created in directory '/path/to/backup-dir/2015-02-04_19-03-58'
    111225 19:03:58 innobackupex: completed OK!
    备份将会被保存在指定路径以一个时间戳命名的目录下,如:'/path/to/backup-dir/2015-02-04_19-03-58'

    其他可以考虑的选项:
    * --no-timestamp 选项 innobackupex不创建时间戳目录存放备份,而是备份文件放在backup-dir中
    $ innobackupex --user= --password= /path/to/backup-dir/ --no-timestamp
    innobackupex 将创建子目录存放在/path/to/backup-dir/ [注:backup-dir目录必须不存在]

    * --defaults-file 选项 指定配置文件路径,必须放在第一个参数
    $ innobackupex --defaults-file=/tmp/other-my.cnf --user= --password= /path/to/backup-dir/

    * 全备恢复-prepare
    创建备份后,这些数据并非可以直接执行恢复,可能存在未提交的事务在relay log中,执行这步补充操作可以使数据文件完整,而且是prepare stage的目的,一旦执行完,数据就可以用了。
    $ innobackupex --apply-log /path/to/backup-dir/
    检查输出的最后一行:
    111225 1:01:57 InnoDB: Shutdown completed; log sequence number 1609228
    111225 01:01:57 innobackupex: completed OK!

    其他可以考虑的选项:
    * --user-memory 选项 prepare操作可用内存大小,原则上越大越快
    $ innobackupex --apply-log --use-memory=4G /path/to/backup-dir/

    * 全备恢复-restore
    为了方便,innobackupex 有一个--copy-back的选项,可以执行恢复数据到数据库服务器的datadir目录
    $ innobackupex --copy-back /data/to/back-dir/
    检查输出最后一行:
    innobackupex: Finished copying back files.
    111225 01:08:13 innobackupex: completed OK!
    NOTE:datadir目录必须为空,innobackupex --copy-back并不会复制并覆盖原有文件,而且执行时,数据库服务器必须是shutdown状态
    数据恢复后,需要修改数据文件的属性
    $ chown -R mysql:mysql /var/lib/mysql

    3.1.3 innobackupex 执行增量备份

    在两次全备之间并非所有的数据都发生了改变,所以增量备份可以减少备份文件的大小
    在innodb上可以执行增量的原因是,每个innodb的页都有一个log sequence number (LSN),作为整个数据库的版本号,每次当数据库发生改变时,这个值都会发生变化。

    * 创建一次全备
    [root@server databak]# innobackupex --defaults-file=/usr/local/mysql/my.cnf --user=root --password=redhat --no-timestamp /data/mysql/databak/14-46-00
    查看xtrabackup-checkpoints文件
    [root@server 14-46-00]# cat xtrabackup_checkpoints
    backup_type = full-backuped
    from_lsn = 0
    to_lsn = 1603094
    last_lsn = 1603094
    compact = 0

    * 在全备基础上创建一次增量备份
    [root@server 14-46-00]# innobackupex --defaults-file=/usr/local/mysql/my.cnf --user=root --password=redhat --incremental /data/mysql/databak/ --incremental-dir /data/mysql/databak/14-46-00/
    查看
    [root@server databak]# cat 2015-02-05_14-57-54/xtrabackup_checkpoints
    backup_type = incremental
    from_lsn = 1603094
    to_lsn = 1603094
    last_lsn = 1603094
    compact = 0

    * 在上一次增量备份的基础上再做一次增量备份
    [root@server databak]# innobackupex --defaults-file=/usr/local/mysql/my.cnf --user=root --password=redhat --incremental /data/mysql/databak/ --incremental-dir /data/mysql/databak/2015-02-05_14-57-54/
    查看
    [root@server databak]# cat 2015-02-05_15-00-47/xtrabackup_checkpoints
    backup_type = incremental
    from_lsn = 1603094
    to_lsn = 1603203
    last_lsn = 1603203
    compact = 0

    警告:
    这个过程只影响XtraDB或者InnoDB引擎表,其他引擎表(如:Myisam)只复制整个库

    * 增量备份-prepare
    prepare工作和全备份略有不同,下面两点需要注意:
    * 首先,只有已经提交的事务必须重做在每次备份中,将删除base全备中未提交的事务
    * 其次,未提交的事务必须回滚,使数据处于ready-to-use状态

    如果在全备中重做已经提交的事务,同时回滚未提交的事务,将无法添加增量备份数据;如果在增量备份中这样做,将不能添加增量备份中数据。
    上面的内容铭记于心,使用--redo-only选项在base backup中
    [root@server 14-46-00]# innobackupex --apply-log --redo-only /data/mysql/databak/14-46-00/

    然后第一个增量备份applay到base Backup中:
    [root@server 2015-02-05_15-00-47]# innobackupex --apply-log --redo-only --incremental /data/mysql/databak/14-46-00/ --incremental-dir=/data/mysql/databak/2015-02-05_15-00-47/
    如果不指定--incremental-dir ,innobackupex将指定最新生成的子目录

    重复上面的操作,继续恢复增量备份数据
    [root@server 2015-02-05_15-02-47]# innobackupex --apply-log --incremental /data/mysql/databak/14-46-00/ --incremental-dir=/data/mysql/databak/2015-02-05_15-02-47/

    Note:--redo-only 应该被使用在merging除了最后一个外的所有的增量备份文件,Even if the --redo-only was used on the last step,backup would stilll be consistent but in that case server would perform the roolback phase.
    可以使用上面的步骤添加更多的增量备份文件,只要是按顺序执行的,否则base backup 将失效,如果无法确定文件的具体顺序,可以查看xtrabackup_checkpoints。

    在base backup中执行完merge所有的增量备份文件后,就可以准备回滚未提交的事务:
    [root@server 14-46-00]# innobackupex --apply-log --redo-only /data/mysql/databak/14-46-00/
    现在base backup立刻可以被还原了

    Note:iblog*文件将不会被innobackupex创建,如果想创建他,在目录下执行xtrabackup-prepare,另外,这些文件在数据库服务启动的时候会被自动创建。

    * 增量备份数据restore
    [root@server data]# innobackupex --defaults-file=/usr/local/mysql/my.cnf --copy-back /data/mysql/databak/14-46-00/

    3.1.4 使用xbstream和tar执行增量流备份

    使用流参数xbstream参数实现增量流备份

    执行一次base备份:
    innobackupex /data/backups
    执行一次本地备份:
    innobackupex --incremental --incremental-lsn=LSN-number --stream=xbstream ./ > incremental.xbstream
    不打包备份:
    xbstream -x < incremental.xbstream
    压缩传送本地备份到远程:
    innobackupex --incremental --incremental-lsn=LSN-number --stream=xbstream ./ | ssh user@hostname "cat - | xbstream -x -C > /backup-dir/"

    3.1.5 部分备份

    可以备份特定的表或者是库,备份的表必须在单独的表空间中,即开启innodb_file_per_table选项。

    需要注意的一点:不要直接复制prepared backup文件,必须使用import恢复部分备份,而不是用--copy-back选项

    创建部分备份:有三种方法:--include; --table-file; --databases

    * 使用--include选项:采用正则表达式匹配
    $ innobackupex --include='^mydatabase[.]mytable' /path/to/backup

    上面的命令将创建一个时间戳目录,只有匹配的data文件被创建
    [root@server databak]# innobackupex --defaults-file=/usr/local/mysql/my.cnf --user=root --password=redhat --include='^test.students' /data/mysql/databak/
    [root@server databak]# ls 2015-02-05_16-41-59/
    backup-my.cnf ibdata1 mysql performance_schema test xtrabackup_checkpoints xtrabackup_info xtrabackup_logfile
    只有test目录下有数据文件和表结构文件

    * 使用--tables-file选项:text file提供选项参数,包含需要备份的表
    $ echo "test.students" > table.txt
    $ innobackupex --tables-file=/tmp/table.txt /path/to/backup/

    [root@server databak]# innobackupex --defaults-file=/usr/local/mysql/my.cnf --user=root --password=redhat --tables-file=/data/mysql/databak/table.txt /data/mysql/databak/

    * 使用--databases选项:这个选项接收单独表空间列表库
    $ innobackupex --databases="test.students mysql" /path/to/backup/

    [root@server databak]# innobackupex --defaults-file=/usr/local/mysql/my.cnf --user=root --password=redhat --databases="test.students mysql" /data/mysql/databak/

    * 部分备份prepare
    $ innobackupex --apply-log --export /path/to/partial/backup/

    [root@server databak]# innobackupex --defaults-file=/usr/local/mysql/my.cnf --user=root --password=redhat --apply-log --export /data/mysql/databak/2015-02-05_17-22-19
    执行上面命令会出现一些表不存在的警告,因为基于InnoDB的表保存自身的数据在自身的目录下,而不是.frm文件,innobackupex 使用xtraback工具删除不存在的表。

    * restore部分部分
    复制文件到datadir

    6.1.6 创建压缩备份

    使用--compact选项创建压缩备份

    $ innobackupex --compact /data/backups

    Note:可以是用innobackupex --no-timestamp选项创建新目录保存备份
    [root@server databak]# innobackupex --defaults-file=/usr/local/mysql/my.cnf --user=root --password=redhat --compact /data/mysql/databak/
    * 可以看到压缩参数为1
    [root@server databak]# cat 2015-02-05_17-36-06/xtrabackup_checkpoints
    backup_type = full-backuped
    from_lsn = 0
    to_lsn = 1606688
    last_lsn = 1606688
    compact = 1

    压缩备份恢复-prepare
    prepare压缩备份需要重建indexs,使用--rebuild-indexs和--apply-logs选项
    $ innobackupex --apply-log --rebuild-indexs /data/backups/2015-02-05_17-36-06

    压缩备份恢复-restore
    $ innobackupex --copy-back /path/to/backup-dir/

    3.1.7 加密备份

    * 创建加密备份
    使用--encrypt-key或者--encrypt-key-file,其中之一必须指定
    * --encryption=ALGORITHM 支持AES128,AES192,AES256加密方式
    * --encryption-key=ENCRYPTION_KEY 在没有访问权限控制的机器上不支持这样操作
    * --encrypt-key-file=KEYFILE 指定加密密钥文件

    --encrypt-key和--encrypt-key-file都可以被使用来指定加密密钥,如下创建密钥key:
    openssl enc -aes-256-cbc -pass pass:PASSWORD -P -md shal

    输出结果如下:
    ****

    使用--encrypt-key选项:
    $ innobackupex --encrypt=AES256 --encrypt-key="****" /data/backups
    使用--encrypt-key-file选项
    $ innobackupex --encrypt=AES256 --encrypt-key-file=/data/backups/keyfile /data/backups

    调整加密进程:
    --encrypt-threads 指定加密进程数
    --encrypt-chunk-size 指定每个加密进程的buffer size,默认是64K

    * 解密备份
    $ for i in `find . -iname "*.xbcrypt"`; do xbcrypt -d --encrypt-key-file=/data/backups/keyfile --encrypt=AES256 /data/backups

    在Percona XtraBackup2.1.4 引入新的选项--decrypt
    $ innobackupex --decrypt=AES256 --encrypt-key="*****" /data/backups
    使用--decrypt选项将删除原来的加密文件,保存解密后的文件在相同的目录位置
    Note:使用--parallel 在--decrypt中

    * 加密备份--prepare
    解密后使用--apply-logs来执行prepare,就像前面的标准备份一样
    $ innobackupex --apply-log /data/backups/2015-02-05_17-36-06/

    * 加密备份--restore
    $ innobackupex --copy-back /path/to/backup-dir

    3.2 高级功能

    3.2.1 流压缩备份

    以tar或者xbstream格式安装标准输出,而不是往目录下复制文件,可以通过其他程序接收标准输出流,如linux的管道
    使用流功能的时候必须使用--stream选项,同时提供流格式(tar或者xbstream)以及接收流输出的位置
    * xbstream格式压缩
    * 保存全备到单个文件
    [root@server mysql]# innobackupex --defaults-file=/usr/local/mysql/my.cnf --user=root --password=redhat --stream=xbstream /data/mysql/databak > /data/mysql/databak/backup.xbstream
    * 保存压缩到单个文件
    [root@server mysql]# innobackupex --defaults-file=/usr/local/mysql/my.cnf --user=root --password=redhat --stream=xbstream --compress /data/mysql/databak > /data/mysql/databak/backup.xbstream.tgz
    * 对比压缩和不压缩文件大小
    [root@server mysql]# du -sh databak/*
    1.1G databak/backup.xbstream
    16M databak/backup.xbstream.tgz]
    * 解压缩备份到指定目录(/data/mysql/databak/tmp/)
    [root@server databak]# xbstream -x < backup.xbstream.tgz -C /data/mysql/databak/tmp/
    [root@server databak]# ls tmp/
    backup-my.cnf ibdata1.qp mysql performance_schema test xtrabackup_checkpoints xtrabackup_info xtrabackup_logfile
    * 发送压缩备份到其他机器并解压[传输时,终端被刷屏,直接盲输入密码]
    [root@server databak]# innobackupex --defaults-file=/usr/local/mysql/my.cnf --user=root --password=redhat --compress --stream=xbstream /data/mysql/databak/ | ssh root@192.168.100.252 "xbstream -x -C /data/forilen/databak/"
    * 发送压缩备份到其他机器不解压[传输时,终端被刷屏,直接盲输入密码]
    [root@server databak]# innobackupex --defaults-file=/usr/local/mysql/my.cnf --user=root --password=redhat --compress --stream=xbstream /data/mysql/databak/ | ssh root@192.168.100.252 "cat - > /data/forilen/db.xbstream"

    * tar格式压缩
    * 备份单个文件
    $ innobackupex --stream=tar /root/backup/ > /root/backup/out.tar
    * 备份到其他主机,不压缩
    $ innobackupex --stream=tar ./ | ssh user@ip "cat - > /data/backups/backup.tar"
    例如:
    [root@server databak]# innobackupex --defaults-file=/usr/local/mysql/my.cnf --user=root --password=redhat --stream=tar /data/mysql/databak/ | ssh root@192.168.100.252 "cat - > /data/forilen/db.tar.gz"
    * 解压缩,必须使用-i选项
    $ tar -xizf backup.tar.gz

    * 附加其他压缩:
    $ innobackupex --stream=tar ./ | gzip - > backup.tar.gz
    $ innobackupex --stream=tar ./ | bzip2 - > backup.bz2
    例如:
    [root@server databak]# innobackupex --defaults-file=/usr/local/mysql/my.cnf --user=root --password=redhat --stream=tar /data/mysql/databak/ | gzip | ssh root@192.168.100.252 "cat - > /data/forilen/db.tar.gz"
    * Note:stream备份的文件需要先执行prepare才能被restore

    3.2.2 主从环境执行备份

    3.2.3 在服务器上保存备份历史(2.1.4新特性)

  • 相关阅读:
    Markdown常用写法
    Vue.js学习篇
    ClassLoader
    Java内存篇
    Spring-AOP学习篇
    M3U8Downloader
    IngCrawler
    ulimit开启coredump时核心转储
    Linux下的bc计算器
    Maven相关介绍
  • 原文地址:https://www.cnblogs.com/forilen/p/4275706.html
Copyright © 2011-2022 走看看