且构网

分享程序员开发的那些事...
且构网 - 分享程序员编程开发的那些事

用xtrabackup备份mariadb-galera-cluster

更新时间:2022-09-17 10:17:37

由于mysqldump是逻辑备份,且备份效率低下,当有大量数据时无法快速进行备份

此时用xtrabackup是一种极好的备份方案

1.完整备份及完整还原

  备份:--backup

   innobackupex --defaults-file=/etc/my.cnf.d/server.cnf --host=127.0.0.1 --user=liuwei --password=123456 --backup          /tmp/backup/

  选项说明:

    --defaults-file:指明服务器的配置文件,此参数必须作为innobackupex的第一个参数,否则报错

    --host:指明主机

    --user:指明备份的用户名

    --password:指明备份用户名的密码

    --backup:指明为备份,此参数可以忽略

    /tmp/backup:备份的目录

    注:xtrabackup是物理备份,经测试不需要指定用户名密码即可使用

   应用:--apply-log

   innobackupex --apply-log 2016-07-04_17-18-53/

   注:在还原之前需要将收集到的重做日志应用到备份数据文件

   还原:--copy-back

   innobackupex --copy-back 2016-07-04_15-26-49/

   注意:在还原之前需要做的操作

       1.关闭数据库

       2.删除数据目录下的所有文件

       3.然后进行还原

       4.还原之后需要修改数据目录的权限,因为还原后的默认属主为root,需要改为mysql

       5.重启mysql

2.一次完整备份一次增量备份实现全部数据还原

   一次完整备份:

   innobackupex --defaults-file=/etc/my.cnf.d/server.cnf --host=127.0.0.1 --backup /tmp/backup/

   一次增量备份:

   innobackupex --host=127.0.0.1 --incremental --incremental-basedir=/tmp/backup/2016-07-05_09-31-40/ /tmp/backup/

     注:增量备份基于前一次的备份,不论前一次是增量还是完整备份

   重做日志:--apply-log,--redo-only(redo时***为绝对路径,在次吃过亏)

    前提1:最后一次增量备份之前的--apply-log过程中,必须使用--redo-only选项

    前提2:所有的增量恢复,都必须基于最后一次的完整备份

    前提3:所有的增量恢复完成之后,必须基于完整备份再做一次--apply-log

     a.innobackupex --apply-log --redo-only /tmp/backup/2016-07-05_09-31-40

     b.innobackupex --apply-log /tmp/backup/2016-07-05_09-31-40 --incremental-dir=/tmp/backup/2016-07-05_10-35-02

     c.innobackupex --apply-log /tmp/backup/2016-07-05_09-31-40

   完整恢复:

   innobackupex --copy-back /tmp/backup/2016-07-05_09-31-40

3.一次完整备份多次增量备份实现全部数据还原

   一次完整备份:

   innobackupex --defaults-file=/etc/my.cnf.d/server.cnf --host=127.0.0.1 --backup /tmp/backup/

   多次增量备份:

   a.innobackupex --host=127.0.0.1 --incremental /tmp/backup/ --incremental-basedir=/tmp/backup/2016-07-05_11-43-08/

   b.innobackupex --host=127.0.0.1 --incremental /tmp/backup/ --incremental-basedir=/tmp/backup/2016-07-05_11-44-43/

   c.innobackupex --host=127.0.0.1 --incremental /tmp/backup/ --incremental-basedir=/tmp/backup/2016-07-05_11-46-50/

   重做日志:

   a.innobackupex --apply-log --redo-log 2016-07-05_11-43-08/

   b.innobackupex --apply-log --redo-only /tmp/backup/2016-07-05_11-43-08/ --incremental-dir=/tmp/backup/2016-07-05_11-44-43/

   c.innobackupex --apply-log --redo-only /tmp/backup/2016-07-05_11-43-08/ --incremental-dir=/tmp/backup/2016-07-05_11-46-50

   d.innobackupex --apply-log /tmp/backup/2016-07-05_11-43-08/ --incremental-dir=/tmp/backup/2016-07-05_11-47-27/

   e.innobackupex --apply-log /tmp/backup/2016-07-05_11-43-08/

   完整恢复:

   innobackupex --copy-back /tmp/backup/2016-07-05_11-43-08/

4.单表备份及恢复

   备份单表:

   innobackupex --host=127.0.0.1 --databases='p2p_tongjiang.rb_user' /tmp/backup/

   准备单表:

   innobackupex --apply-log --export /tmp/backup/2016-07-05_14-09-52/

   注:准备完成后,会在备份目录下生成.cfg、.ibd文件,属主为root,用到时需要改为mysql

   恢复单表:需要先在当前服务器上创建一个跟原表表结构一致的表,而后才能实现将表导入

   a.废弃原来的表空间

     mariadb>alter table p2p_tongjiang.rb_user DISCARD TABLESPACE;

   b.复制生成的*.cfg,*.ibd文件到数据目录下的库中

     #cp rb_user.cfg rb_user.ibd /data/mysql/p2p_tongjiang/

   c.把整个数据目录的属主改为mysql,因为刚刚复制进去的文件属主为root

     #chown -R mysql.mysql /data/mysql/

   d.导入生成的表空间(注:如果c步骤没有修改权限,则在导入表空间时会报表空间找不到的错误)

     mariadb>alter table p2p_tongjiang.rb_user IMPORT TABLESPACE;

本文转自激情燃烧的岁月博客51CTO博客,原文链接http://blog.51cto.com/liuzhengwei521/1882359如需转载请自行联系原作者


weilovepan520