• 使用Xtrabackup对数据库进行部分备份恢复


    Xtrabackup也可以实现部分备份,即只备份某个或某些指定的数据库或某数据库中的某个或某些表。但要使用此功能,必须启用innodb_file_per_table选项,即每张表保存为一个独立的文件。同时,其也不支持--stream选项,即不支持将数据通过管道传输给其它程序进行处理。此外,还原部分备份跟还原全部数据的备份也有所不同,即你不能通过简单地将prepared的部分备份使用--copy-back选项直接复制回数据目录,而是要通过导入表的方向来实现还原。当然有些情况下,部分备份也可以直接通过--copy-back进行还原,但这种方式还原而来的数据多数会产生数据不一致的问题,因此,无论如何不推荐使用这种方式。

    创建部分备份

    创建部分备份的方式有三种:正则表达式(--include), 枚举表文件(--tables-file)和列出要备份的数据库(--databases)。
    (1) 使用--include
    使用--include时,要求为其指定要备份的表的完整名称,即形如databasename.tablename,如:

    innobackupex --include='^test[.]tb1' /path/to/backup
    

    (2) 使用--tables-file
    此选项的参数需要是一个文件名,此文件中每行包含一个要备份的表的完整名称;如:

    echo -e 'test.tb1
    test.tb2' > /tmp/tables.txt
    innobackupex --tables-file=/tmp/tables.txt  /path/to/backup
    

    (3) 使用--databases
    此选项接受的参数为数据名,如果要指定多个数据库,彼此间需要以空格隔开;同时,在指定某数据库时,也可以只指定其中的某张表。此外,此选项也可以接受一个文件为参数,文件中每一行为一个要备份的对象。如:

    innobackupex --databases="testdb1 testdb2"  /path/to/backup
    

    备份指定数据库

    根据需要对test库做完整备份,这里使用--databases选项

    /usr/bin/innobackupex --defaults-file=/etc/my.cnf  --use-memory=4G --host=localhost --user=backup --password=123456 --port=3306 --databases=test /data/backup
    

    查看备份目录下只有test库

    [root@db ~]# ls /data/backup/2021-08-28_14-46-02/
    backup-my.cnf     undo003  undo009  undo015  undo021  undo027  undo033  undo039  undo045  undo051  undo057  undo063  undo069  undo075  undo081  undo087  undo093                 xtrabackup_logfile
    ib_buffer_pool    undo004  undo010  undo016  undo022  undo028  undo034  undo040  undo046  undo052  undo058  undo064  undo070  undo076  undo082  undo088  undo094
    ibdata1           undo005  undo011  undo017  undo023  undo029  undo035  undo041  undo047  undo053  undo059  undo065  undo071  undo077  undo083  undo089  undo095
    test              undo006  undo012  undo018  undo024  undo030  undo036  undo042  undo048  undo054  undo060  undo066  undo072  undo078  undo084  undo090  xtrabackup_binlog_info
    undo001           undo007  undo013  undo019  undo025  undo031  undo037  undo043  undo049  undo055  undo061  undo067  undo073  undo079  undo085  undo091  xtrabackup_checkpoints
    undo002           undo008  undo014  undo020  undo026  undo032  undo038  undo044  undo050  undo056  undo062  undo068  undo074  undo080  undo086  undo092  xtrabackup_info
    

    备份数据库表结构

    mysqldump -uroot -p --single-transaction --master-data=2 --set-gtid-purged=OFF -d test > test.sql
    

    将备份传送至灾备演练服务器上

    scp -r /data/backup/2021-08-28_14-46-02 test.sql 192.168.0.110:/root 
    

    接下来在灾备演练服务器上操作

    还原指定数据库

    还原test表结构

    mysql -uroot -p test < test.sql
    

    删除test库中所有表空间

    for i in $(grep "CREATE TABLE" test.sql | awk '{print $3}' | sed "s#\`##g");do;mysql -u root -p123456 -e "set foreign_key_checks=0;alter table test.$i discard tablespace;" &> /dev/null;done
    

    prepare部分备份,要使用--export选项进行:

    innobackupex --apply-log --export /root/2021-08-28_14-46-02
    

    将准备好的test库中后缀名为cfg、ibd,frm文件复制到test库下

    cp -f 2021-08-28_14-46-02/test/*.cfg 2021-08-28_14-46-02/test/*.ibd 2021-08-28_14-46-02/test/*.frm /data/mysql3306/data/test/
    

    修改属主

    chown -R mysql:mysql /data/mysql3306/data/test/
    

    导入表空间

    for i in $(grep "CREATE TABLE" test.sql | awk '{print $3}' | sed "s#\`##g");do;mysql -u root -p123456 -e "set foreign_key_checks=0;alter table test.$i import tablespace;analyze table test.$i;" &> /dev/null;done
    

    至此已经成功还原test库。备份单表的过程与上述过程类似。

  • 相关阅读:
    insert 批量插入
    mybatisplus 数据去重
    【新品预告】北京迅为3A5000核心板即将来袭
    弗里德曼迪亚科尼斯规则,偏度,峰度
    第三方支付功能测试点【杭州多测师_王sir】【杭州多测师】
    数据库测试需要注意的点【杭州多测师_王sir】【杭州多测师】
    Python题目:2个list列表相加【杭州多测师】【杭州多测师_王sir】
    蚂蚁金服笔试题:需求文档有什么可以量化的【杭州多测师】【杭州多测师_王sir】
    IDEA: 菜单栏消失的解决办法
    使用arm Neon操作,提高内存拷贝速度
  • 原文地址:https://www.cnblogs.com/will-space/p/15200329.html
Copyright © 2020-2023  润新知