• ADADADADAD

    XtraBackup部分备份[ mysql数据库 ]

    mysql数据库 时间:2024-12-24 19:10:23

    作者:文/会员上传

    简介:

    可以使用Xtrabackup工具仅仅对某几张表进行数据恢复。实验场景: 端口3306的实例上有一张表t3,而端口3308的实例上没有。实验目的将端口3306的t3表恢复到端口3308的实例上。步

    以下为本文的正文内容,内容仅供参考!本站为公益性网站,复制本文以及下载DOC文档全部免费。

    可以使用Xtrabackup工具仅仅对某几张表进行数据恢复。

    实验场景:

    端口3306的实例上有一张表t3,而端口3308的实例上没有。实验目的将端口3306的t3表恢复到端口3308的实例上。

    步骤:

    1、确保端口3306的实例的配置文件my.cnf中有设置如下参数:

    InnoDB_FAST_SHUTDOWN = 0 --此参数MySQL在关闭的时候,需要完成所有的full purge和merge insert buffer操作.
    InnoDB_File_Per_Table = ON--此参数修改InnoDB为独立表空间模式,每个数据库的每个表都会生成一个数据空间.


    2、备份

    a) innobackupex --defaults-file=/usr/local/mysql/my.cnf --user=root --password=root --socket=/usr/local/mysql/mysql.sock --include='lxm.t3' --export /tmp/backup/

    命令执行结束后,查看备份文件

    [root@single1 lxm]# pwd
    /tmp/backup/2016-08-30_16-34-50/lxm
    [root@single1 lxm]# ls -l
    total 108
    -rw-r-----. 1 root root 10684 Aug 30 16:34 t3.frm
    -rw-r-----. 1 root root 98304 Aug 30 16:34 t3.ibd

    b) 备份完成之后应用日志使备份保持一致性

    innobackupex --defaults-file=/usr/local/mysql/my.cnf --user=root --password=root --socket=/usr/local/mysql/mysql.sock --apply-log --export /tmp/backup/2016-08-30_16-34-50/

    命令执行结束后,查看备份文件

    [root@single1 lxm]# pwd
    /tmp/backup/2016-08-30_16-34-50/lxm
    [root@single1 lxm]# ls -l
    total 128
    -rw-r--r--. 1 root root 3378 Aug 30 16:36 t3.cfg
    -rw-r-----. 1 root root 16384 Aug 30 16:36 t3.exp
    -rw-r-----. 1 root root 10684 Aug 30 16:34 t3.frm
    -rw-r-----. 1 root root 98304 Aug 30 16:34 t3.ibd

    可以看出多了两个文件:t3.cfg和t3.exp。exp文件适用于percona server,cfg适用于mariadb和mysql。mariadb 10.0可以直接通过ibd和frm文件import。mysql 5.6之后可以不使用cfg来进行import,cfg如果存在会被用来做表结构的验证。


    3、在目标实例上创建一个和源实例中的t3表一模一样的表

    源实例查看t3表的表结构创建语句:
    mysql -S /usr/local/mysql/mysql.sock -P 3306 -uroot -p
    mysql> show create table t3\G;
    *************************** 1. row ***************************
    Table: t3
    Create Table: CREATE TABLE `t3` (
    `Host` char(60) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL DEFAULT '',
    `User` char(16) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL DEFAULT '',
    `Password` char(41) CHARACTER SET latin1 COLLATE latin1_bin NOT NULL DEFAULT '',
    。。。。。。。。。省略。。。。。。。。。。。。。
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8
    1 row in set (0.14 sec)

    目标实例创建表t3:
    mysql -S /usr/local/mysql3308/mysql.sock -P 3308 -uroot -p
    mysql> use lxm;
    Database changed
    mysql> show tables;
    Empty set (0.00 sec)

    mysql> CREATE TABLE `t3` (
    -> `Host` char(60) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL DEFAULT '',
    -> `User` char(16) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL DEFAULT '',
    -> `Password` char(41) CHARACTER SET latin1 COLLATE latin1_bin NOT NULL DEFAULT '',
    ->。。。。。。。。。。省略。。。。。。。。。。。。。
    -> ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
    Query OK, 0 rows affected (0.05 sec)


    4、目标实例 discard 表空间

    在 discard 表空间之前,mysql3308的 t3 表数据文件如下:

    [root@single1 lxm]# ls -l
    total 112
    -rw-rw----. 1 mysql mysql 61 Aug 30 17:09 db.opt
    -rw-rw----. 1 mysql mysql 10684 Aug 30 17:09 t3.frm
    -rw-rw----. 1 mysql mysql 98304 Aug 30 17:09 t3.ibd


    discard表空间:

    mysql -S /usr/local/mysql3308/mysql.sock -P 3308 -uroot -p

    mysql> ALTER TABLE t3 DISCARD TABLESPACE;
    Query OK, 0 rows affected (0.01 sec)
    mysql> show tables;
    +---------------+
    | Tables_in_lxm |
    +---------------+
    | t3 |
    +---------------+
    1 row in set (0.00 sec)


    在 discard 表空间之后,mysql3308的 t3 表数据文件如下:
    [root@single1 lxm]# ls -l
    total 16
    -rw-rw----. 1 mysql mysql 61 Aug 30 17:09 db.opt
    -rw-rw----. 1 mysql mysql 10684 Aug 30 17:09 t3.frm


    5、将备份文件中的 t3.idb 和 t3.cfg 文件拷贝到目标实例的数据文件路径中:

    cp -r /tmp/backup/2016-08-30_16-34-50/lxm/t3.cfg /usr/local/mysql3308/data/lxm/
    cp -r /tmp/backup/2016-08-30_16-34-50/lxm/t3.ibd /usr/local/mysql3308/data/lxm/

    修改 t3.idb 和 t3.cfg 文件的属组为mysql:

    chown mysql:mysql t3.cfg

    chown mysql:mysql t3.ibd


    6、import表

    mysql -S /usr/local/mysql3308/mysql.sock -P 3308 -uroot -p

    mysql> ALTER TABLE t3 IMPORT TABLESPACE;
    Query OK, 0 rows affected (0.01 sec)

    mysql> show tables;
    +---------------+
    | Tables_in_lxm |
    +---------------+
    | t3 |
    +---------------+
    1 row in set (0.00 sec)

    mysql> select count(1) from t3;
    +----------+
    | count(1) |
    +----------+
    | 14 |
    +----------+
    1 row in set (0.00 sec)


    备注:有三种方式可以指定要备份的表。

    1、--include:设置正则表达式的格式,匹配的就备份。该选项传递给xtrabackup --tables,对每个库中的每个表逐一匹配。

    2、--table-file:在文件中指定要备份的表,然后通过这个选项传入文件。该选项传递给xtrabackup --tables-file,与--table选项不同,只有要备份的表的库才会被创建。

    3、--database:指定数据库列表。:--databasees选项只会对非innodb引擎表和frm文件产生影响,对于innodb数据文件总是备份的。

    XtraBackup部分备份.docx

    将本文的Word文档下载到电脑

    推荐度:

    下载