zoukankan      html  css  js  c++  java
  • xtrabackup详细用法

    安装

    [root@node01 yum.repos.d]# cat percona.repo 
    [percona]
    name = Percona
    baseurl = https://mirrors.tuna.tsinghua.edu.cn/percona/release/$releasever/RPMS/$basearch
    enabled = 1
    gpgcheck = 0

    [epel]
    name=epelrepo
    baseurl=https://mirrors.aliyun.com/epel/$releasever/$basearch
    gpgcheck=0
    enable=1

    [root@node01 yum.repos.d]# yum list all| grep xtraback -i
    Repository base is listed more than once in the configuration
    Repository updates is listed more than once in the configuration
    Repository extras is listed more than once in the configuration
    Repository centosplus is listed more than once in the configuration
    holland-xtrabackup.noarch 1.1.21-1.el7 epel 
    percona-xtrabackup.x86_64 2.3.10-1.el7 percona 
    percona-xtrabackup-22.x86_64 2.2.13-1.el7 percona 
    percona-xtrabackup-22-debuginfo.x86_64 2.2.13-1.el7 percona 
    percona-xtrabackup-24.x86_64 2.4.18-1.el7 percona 
    percona-xtrabackup-24-debuginfo.x86_64 2.4.18-1.el7 percona 
    percona-xtrabackup-80.x86_64 8.0.9-1.el7 percona 
    percona-xtrabackup-80-debuginfo.x86_64 8.0.9-1.el7 percona 
    percona-xtrabackup-debuginfo.x86_64 2.3.10-1.el7 percona 
    percona-xtrabackup-test.x86_64 2.3.10-1.el7 percona 
    percona-xtrabackup-test-22.x86_64 2.2.13-1.el7 percona 
    percona-xtrabackup-test-24.x86_64 2.4.18-1.el7 percona 
    percona-xtrabackup-test-80.x86_64 8.0.9-1.el7 percona

    [root@node01 yum.repos.d]# yum -y install percona-xtrabackup-24

    装完xtrabackup后,生成以下几个工具。

    [root@node01 yum.repos.d]# rpm -ql percona-xtrabackup-24 | grep bin | xargs ls -hl
    lrwxrwxrwx 1 root root   10 2月   4 18:05 /usr/bin/innobackupex -> xtrabackup
    -rwxr-xr-x 1 root root 3.7M 12月 15 00:23 /usr/bin/xbcloud
    -rwxr-xr-x 1 root root 3.0K 12月 15 00:16 /usr/bin/xbcloud_osenv
    -rwxr-xr-x 1 root root 3.5M 12月 15 00:23 /usr/bin/xbcrypt
    -rwxr-xr-x 1 root root 3.5M 12月 15 00:23 /usr/bin/xbstream
    -rwxr-xr-x 1 root root  21M 12月 15 00:23 /usr/bin/xtrabackup
    • xbcloud和xbcloud_osenv是xtrabackup新的高级特性:云备份;
    • xbcrypt也是新的特性,加密备份集;
    • xbstream是xtrabackup的流数据功能,通过流数据功能,可将备份内容打包并传给管道后的压缩工具进行压缩;
    • xtrabackup是主程序;
    • innobackupex在以前是一个perl脚本,会调用xtrabackup这个二进制工具,从xtrabackup 2.3开始,该工具使用C语言进行了重写,当前它是xtabackup二进制工具的一个软连接,但是实际的使用方法却不同,并且在以后的版本中会删除该工具。
    mysql>  show databases;
    +--------------------+
    | Database           |
    +--------------------+
    | information_schema |
    | mysql              |
    | performance_schema |
    | sys                |
    +--------------------+
    4 rows in set (0.00 sec)
    
    mysql> CREATE DATABASE friends;
    Query OK, 1 row affected (0.00 sec)
    mysql> create table test (
        -> d int(4),
        ->  name varchar(16)
        -> )ENGINE=innodb DEFAULT CHARSET=gbk;
    Query OK, 0 rows affected (0.29 sec)

    进行全量备份

    [root@node01 yum.repos.d]# mkdir -p /opt/backup/
    [root@node01 yum.repos.d]# cd /opt/backup/
    [root@node01 backup]# mkdir full
    [root@node01 backup]# mkdir incr
    [root@node01 backup]# ls
    full  incr
    [root@node01 backup]# 
    [root@node01 backup]# innobackupex --defaults-file=/etc/my.cnf --user=root --password='Qwer!234' --port=3306 /opt/backup/full/
    [root@node01 backup]# ls -l full/2020-02-04_18-37-08/
    总用量 12336
    -rw-r----- 1 root root      487 2月   4 18:37 backup-my.cnf
    drwxr-x--- 2 root root       52 2月   4 18:37 friends
    -rw-r----- 1 root root      425 2月   4 18:37 ib_buffer_pool
    -rw-r----- 1 root root 12582912 2月   4 18:37 ibdata1
    drwxr-x--- 2 root root     4096 2月   4 18:37 mysql
    drwxr-x--- 2 root root     8192 2月   4 18:37 performance_schema
    drwxr-x--- 2 root root     8192 2月   4 18:37 sys
    -rw-r----- 1 root root      135 2月   4 18:37 xtrabackup_checkpoints
    -rw-r----- 1 root root      468 2月   4 18:37 xtrabackup_info
    -rw-r----- 1 root root     2560 2月   4 18:37 xtrabackup_logfile

    第一次增量插入一条数据

    mysql> INSERT INTO test(d, name) VALUES (2, 'winstom' );
    Query OK, 1 row affected (0.07 sec)
    mysql> select * from test;
    +------+---------+
    | d    | name    |
    +------+---------+
    |    2 | winstom |
    +------+---------+
    1 row in set (0.00 sec)

    进行第一次增量备份

    注意

    第一次增量备份,要以全量备份为节点,进行备份

    增量备份使用--incremental参数加 增量备份的目录。

    所以 --incremental-basedir 跟的参数是全量备份的目录

    [root@node01 ~]# innobackupex --defaults-file=/etc/my.cnf --user=root --password='Qwer!234' --incremental /opt/backup/incr/ --incremental-basedir=/opt/backup/full/2020-02-04_18-37-08/

    第一次增量备份完成,下面进行查看

    [root@node01 ~]# cd /opt/backup
    [root@node01 backup]# ll incr/2020-02-04_18-46-03/
    总用量 148
    -rw-r----- 1 root root   487 2月   4 18:46 backup-my.cnf
    drwxr-x--- 2 root root    79 2月   4 18:46 friends
    -rw-r----- 1 root root   425 2月   4 18:46 ib_buffer_pool
    -rw-r----- 1 root root 98304 2月   4 18:46 ibdata1.delta
    -rw-r----- 1 root root    60 2月   4 18:46 ibdata1.meta
    drwxr-x--- 2 root root  4096 2月   4 18:46 mysql
    drwxr-x--- 2 root root  8192 2月   4 18:46 performance_schema
    drwxr-x--- 2 root root  8192 2月   4 18:46 sys
    -rw-r----- 1 root root   139 2月   4 18:46 xtrabackup_checkpoints
    -rw-r----- 1 root root   536 2月   4 18:46 xtrabackup_info
    -rw-r----- 1 root root  2560 2月   4 18:46 xtrabackup_logfile

    第二次增量插入一条数据

    mysql> INSERT INTO test(d, name) VALUES (3, 'liujunjun' );
    Query OK, 1 row affected (0.05 sec)
    
    mysql> select * from test;
    +------+-----------+
    | d    | name      |
    +------+-----------+
    |    2 | winstom   |
    |    3 | liujunjun |
    +------+-----------+
    2 rows in set (0.00 sec)

    进行第二次增量备份

    注意

    在第二次增量备份的时候,不再是以全量为节点,要以上一次增量备份为节点来进行第二次的增量备份

    所以--incremental-basedir参数后面跟的是上一次增量备份的目录;

    [root@node01 backup]# cd /opt/backup/
    [root@node01 backup]# innobackupex --defaults-file=/etc/my.cnf --user=root --password='Qwer!234' --incremental /opt/backup/incr/ --incremental-basedir=/opt/backup/incr/2020-02-04_18-46-03
    [root@node01 backup]# ls incr/2020-02-04_18-51-53/ -l
    总用量 116
    -rw-r----- 1 root root   487 2月   4 18:51 backup-my.cnf
    drwxr-x--- 2 root root    79 2月   4 18:51 friends
    -rw-r----- 1 root root   425 2月   4 18:51 ib_buffer_pool
    -rw-r----- 1 root root 65536 2月   4 18:51 ibdata1.delta
    -rw-r----- 1 root root    60 2月   4 18:51 ibdata1.meta
    drwxr-x--- 2 root root  4096 2月   4 18:51 mysql
    drwxr-x--- 2 root root  8192 2月   4 18:51 performance_schema
    drwxr-x--- 2 root root  8192 2月   4 18:51 sys
    -rw-r----- 1 root root   139 2月   4 18:51 xtrabackup_checkpoints
    -rw-r----- 1 root root   535 2月   4 18:51 xtrabackup_info
    -rw-r----- 1 root root  2560 2月   4 18:51 xtrabackup_logfile

    查看xtrabackup_binlog_info中的binlog位置

    查看xtrabackup_checkpoints中lsn

     

    [root@node01 2020-02-04_18-37-08]# cat xtrabackup_checkpoints 
    backup_type = full-backuped
    from_lsn = 0
    to_lsn = 2634553
    last_lsn = 2634562
    compact = 0
    recover_binlog_info = 0
    flushed_lsn = 2634562
    [root@node01 incr]# cat 2020-02-04_18-46-03/xtrabackup_checkpoints 
    backup_type = incremental
    from_lsn = 2634553
    to_lsn = 2634772
    last_lsn = 2634781
    compact = 0
    recover_binlog_info = 0
    flushed_lsn = 2634781
    [root@node01 incr]# cat 2020-02-04_18-51-53/xtrabackup_checkpoints 
    backup_type = incremental
    from_lsn = 2634772
    to_lsn = 2634958
    last_lsn = 2634967
    compact = 0
    recover_binlog_info = 0
    flushed_lsn = 2634967

    这里可以看到,全备的lsn是从0开始的,第一次增量备份的lsn是从全量备份的lsn结束的位置开始的,第二次增量备份同理,从第一次增量备份的lsn结束的位置开始的。

    模拟数据删除

     

    mysql> drop database friends;
    Query OK, 1 row affected (0.49 sec)
    
    mysql> show databases;
    +--------------------+
    | Database           |
    +--------------------+
    | information_schema |
    | mysql              |
    | performance_schema |
    | sys                |
    +--------------------+
    4 rows in set (0.00 sec)

    数据恢复操作

    恢复具体步骤

    1. 先把xtrabackup备份下来的目录进行再次备份,防止在还原的时候误操作,导致备份不可用;
    2. 关闭要回复的数据库实例;
    3. 移除需要恢复数据的MySQL实例下的data目录,建议mv移动到别的目录下;
    4. 操作全量备份使用--apply-log 和 --redo-only参数对全量备份进行恢复前准备操作,如事物回滚等操作;
    5. 操作第一次增量备份将第一次增量备份应用到完全备份,同用使用--apply-log 和 --redo-only参数
    6. 操作第二次增量备份将第二次增量备份应用到完全备份,使用--apply-log参数,不要加--redo-only参数。
    7. 把所有合在一起的完全备份整体进行一次apply操作,回滚未提交的数据
    8. 使用--copy-back 和 --rsync 参数直接对全量备份操作后的目录进行恢复;
    9. 授权MySQL实例下的data目录后,启动数据库
    10. 验证恢复数据

    第一步 备份

    [root@node01 incr]# cd /opt/backup/full/
    [root@node01 full]# cp -a 2020-02-04_18-37-08/ 2020-02-04_18-37-08.bak
    [root@node01 full]# cd ..
    [root@node01 backup]# cd incr/
    [root@node01 incr]# ls -l
    总用量 0
    drwxr-x--- 6 root root 234 2月   4 18:46 2020-02-04_18-46-03
    drwxr-x--- 6 root root 234 2月   4 18:51 2020-02-04_18-51-53
    [root@node01 incr]# cp -a 2020-02-04_18-46-03/ 2020-02-04_18-46-03.bak
    [root@node01 incr]# cp -a 2020-02-04_18-51-53/ 2020-02-04_18-51-53.bak

    第二步 关闭MySQL实例

    [root@node01 incr]# systemctl stop mysqld
    [root@node01 incr]# netstat -tuln
    Active Internet connections (only servers)
    Proto Recv-Q Send-Q Local Address           Foreign Address         State      
    tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN     
    tcp        0      0 127.0.0.1:25            0.0.0.0:*               LISTEN     
    tcp6       0      0 :::22                   :::*                    LISTEN     
    tcp6       0      0 ::1:25                  :::*                    LISTEN     
    udp        0      0 127.0.0.1:323           0.0.0.0:*                          
    udp6       0      0 ::1:323                 :::*                  
    [root@node01 mysql]# ls -l
    总用量 110672
    -rw-r----- 1 mysql mysql       56 2月   4 18:17 auto.cnf
    -rw------- 1 mysql mysql     1680 2月   4 18:17 ca-key.pem
    -rw-r--r-- 1 mysql mysql     1112 2月   4 18:17 ca.pem
    -rw-r--r-- 1 mysql mysql     1112 2月   4 18:17 client-cert.pem
    -rw------- 1 mysql mysql     1680 2月   4 18:17 client-key.pem
    -rw-r----- 1 mysql mysql    14266 2月   4 19:08 ib_buffer_pool
    -rw-r----- 1 mysql mysql 12582912 2月   4 19:08 ibdata1
    -rw-r----- 1 mysql mysql 50331648 2月   4 19:08 ib_logfile0
    -rw-r----- 1 mysql mysql 50331648 2月   4 18:17 ib_logfile1
    drwxr-x--- 2 mysql mysql     4096 2月   4 18:17 mysql
    drwxr-x--- 2 mysql mysql     8192 2月   4 18:17 performance_schema
    -rw------- 1 mysql mysql     1680 2月   4 18:17 private_key.pem
    -rw-r--r-- 1 mysql mysql      452 2月   4 18:17 public_key.pem
    -rw-r--r-- 1 mysql mysql     1112 2月   4 18:17 server-cert.pem
    -rw------- 1 mysql mysql     1680 2月   4 18:17 server-key.pem
    drwxr-x--- 2 mysql mysql     8192 2月   4 18:17 sys
    [root@node01 mysql]# mv /var/lib/mysql /tmp/

    第四步 准备全量备份

    [root@node01 mysql]# innobackupex --apply-log --redo-only /opt/backup/full/2020-02-04_18-37-08/

    第五步 应用第一次增量备份到全量备份

    [root@node01 mysql]# innobackupex --apply-log --redo-only /opt/backup/full/2020-02-04_18-37-08 --incremental-dir=/opt/backup/incr/2020-02-04_18-46-03/

    查看全量备份的xtrabackup_checkpoints

    [root@node01 mysql]# cat /opt/backup/full/2020-02-04_18-37-08/xtrabackup_checkpoints 
    backup_type = log-applied
    from_lsn = 0
    to_lsn = 2634772
    last_lsn = 2634781
    compact = 0
    recover_binlog_info = 0
    flushed_lsn = 2634781

    对比之前查看的第一次增量备份的last_lsn位置,在应用第一次增量备份到全量后,可以看到last_lsn已经被应用和第一次全量备份的位置相同了

    第六步 应用第二次增量备份到全量备份

    注意 在引用最后一次增量备份到全量时,不需要增加--redo-only参数。

    [root@node01 mysql]# innobackupex --apply-log /opt/backup/full/2020-02-04_18-37-08 --incremental-dir=/opt/backup/incr/2020-02-04_18-51-53/

    查看全量备份的xtrabackup_checkpoints

    [root@node01 mysql]# cat /opt/backup/full/2020-02-04_18-37-08/xtrabackup_checkpoints 
    backup_type = full-prepared
    from_lsn = 0
    to_lsn = 2634958
    last_lsn = 2634967
    compact = 0
    recover_binlog_info = 0
    flushed_lsn = 2634967

    对比之前查看的第二次增量备份的last_lsn位置,在应用第二次增量备份到全量后,可以看到last_lsn已经被应用和第二次全量备份的位置相同了

    第七步 把备份整体进行一次apply操作

    [root@node01 mysql]# innobackupex --apply-log /opt/backup/full/2020-02-04_18-37-08/

    第八步 使用--copy-back 参数恢复拷贝到data目录

    [root@node01 mysql]# innobackupex --defaults-file=/etc/my.cnf --copy-back /opt/backup/full/2020-02-04_18-37-08/

    验证操作

    [root@node01 mysql]# ls /var/lib/mysql -l
    总用量 122920
    drwxr-x--- 2 root root       52 2月   4 19:23 friends
    -rw-r----- 1 root root      425 2月   4 19:23 ib_buffer_pool
    -rw-r----- 1 root root 12582912 2月   4 19:23 ibdata1
    -rw-r----- 1 root root 50331648 2月   4 19:23 ib_logfile0
    -rw-r----- 1 root root 50331648 2月   4 19:23 ib_logfile1
    -rw-r----- 1 root root 12582912 2月   4 19:23 ibtmp1
    drwxr-x--- 2 root root     4096 2月   4 19:23 mysql
    drwxr-x--- 2 root root     8192 2月   4 19:23 performance_schema
    drwxr-x--- 2 root root     8192 2月   4 19:23 sys
    -rw-r----- 1 root root      535 2月   4 19:23 xtrabackup_info
    -rw-r----- 1 root root        1 2月   4 19:23 xtrabackup_master_key_id

    第九步 授权并启动MySQL

    [root@node01 mysql]# chown -R mysql.mysql /var/lib/mysql
    [root@node01 mysql]# ls -l
    总用量 110672
    -rw-r----- 1 mysql mysql       56 2月   4 18:17 auto.cnf
    -rw------- 1 mysql mysql     1680 2月   4 18:17 ca-key.pem
    -rw-r--r-- 1 mysql mysql     1112 2月   4 18:17 ca.pem
    -rw-r--r-- 1 mysql mysql     1112 2月   4 18:17 client-cert.pem
    -rw------- 1 mysql mysql     1680 2月   4 18:17 client-key.pem
    -rw-r----- 1 mysql mysql    14266 2月   4 19:08 ib_buffer_pool
    -rw-r----- 1 mysql mysql 12582912 2月   4 19:08 ibdata1
    -rw-r----- 1 mysql mysql 50331648 2月   4 19:08 ib_logfile0
    -rw-r----- 1 mysql mysql 50331648 2月   4 18:17 ib_logfile1
    drwxr-x--- 2 mysql mysql     4096 2月   4 18:17 mysql
    drwxr-x--- 2 mysql mysql     8192 2月   4 18:17 performance_schema
    -rw------- 1 mysql mysql     1680 2月   4 18:17 private_key.pem
    -rw-r--r-- 1 mysql mysql      452 2月   4 18:17 public_key.pem
    -rw-r--r-- 1 mysql mysql     1112 2月   4 18:17 server-cert.pem
    -rw------- 1 mysql mysql     1680 2月   4 18:17 server-key.pem
    drwxr-x--- 2 mysql mysql     8192 2月   4 18:17 sys

    第十步 验证数据

    [root@node01 mysql]# systemctl start mysqld
    mysql> show databases;
    +--------------------+
    | Database           |
    +--------------------+
    | information_schema |
    | friends            |
    | mysql              |
    | performance_schema |
    | sys                |
    +--------------------+
    5 rows in set (0.12 sec)
    
    mysql> use friends;
    Reading table information for completion of table and column names
    You can turn off this feature to get a quicker startup with -A
    
    Database changed
    mysql> show tables;
    +-------------------+
    | Tables_in_friends |
    +-------------------+
    | test              |
    +-------------------+
    1 row in set (0.00 sec)
    
    mysql> select * from test;
    +------+-----------+
    | d    | name      |
    +------+-----------+
    |    2 | winstom   |
    |    3 | liujunjun |
    +------+-----------+
    2 rows in set (0.02 sec)

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

  • 相关阅读:
    Java抓取网页数据(原网页+Javascript返回数据)
    FindWindow使用方法
    hadoop学习;block数据块;mapreduce实现样例;UnsupportedClassVersionError异常;关联项目源代码
    Chart控件的多种使用方法
    windows消息钩子
    编程算法基础-一刀切法
    MYSQL BLOB 字段大小以及个数的限制測试。
    linux和windows文件名称长度限制
    WINHTTP的API接口说明。
    hdu4414(DFS 找十字架数量)
  • 原文地址:https://www.cnblogs.com/liujunjun/p/12260581.html
Copyright © 2011-2022 走看看