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新特性)

  • 相关阅读:
    20155313 杨瀚 《网络对抗技术》实验九 Web安全基础
    20155313 杨瀚 《网络对抗技术》实验八 Web基础
    20155313 杨瀚 《网络对抗技术》实验七 网络欺诈防范
    20155313 杨瀚 《网络对抗技术》实验六 信息搜集与漏洞扫描
    20155313 杨瀚 《网络对抗技术》实验五 MSF基础应用
    20155313 杨瀚 《网络对抗技术》实验四 恶意代码分析
    20155313 杨瀚 《网络对抗技术》实验三 免杀原理与实践
    20155313 杨瀚 《网络对抗技术》实验二 后门原理与实践
    20155313 杨瀚 《网络对抗技术》实验一 PC平台逆向破解(5)M
    20155313 2017-2018-1 《信息安全系统设计基础》课程总结
  • 原文地址:https://www.cnblogs.com/forilen/p/4275706.html
Copyright © 2011-2022 走看看