• ADADADADAD

    XtraBackup全量备份与恢复MySQL数据[ mysql数据库 ]

    mysql数据库 时间:2024-12-25 09:55:13

    作者:文/会员上传

    简介:

    防伪码:没有相当程度的孤独是不可能有内心的平和。1、概述Percona XtraBackup(简称PXB)是 Percona 公司开发的一个用于 MySQL 数据库物理热备的备份工具,支持 MySQl(Oracle)、Perc

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

    防伪码:没有相当程度的孤独是不可能有内心的平和。

    1、概述

    Percona XtraBackup(简称PXB)是 Percona 公司开发的一个用于 MySQL 数据库物理热备的备份工具,支持 MySQl(Oracle)、Percona Server 和 MariaDB,并且开源,淘宝的RDS for MySQL的物理备份就是基于XtraBackup做的。

    Xtrabackup有两个主要的工具:xtrabackup、innobackupex

      (1)xtrabackup是C/C++编译的二进制文件,只能备份InnoDB和XtraDB两种数据表,而不能备份MyISAM数据表;

      (2)innobackupex则封装了xtrabackup,是一个perl脚本封装,所以能同时备份处理innodb和myisam,但在处理myisam时需要加一个读锁;

    1.1 备份原理

    整个备份过程如下图:

      innobackupex 在启动后,会先 fork 一个进程,启动 xtrabackup进程,然后就等待 xtrabackup 备份完 ibd 数据文件;

      xtrabackup 在备份 InnoDB 相关数据时,是有2种线程的,1种是 redo 拷贝线程,负责拷贝 redo 文件,1种是 ibd 拷贝线程,负责拷贝 ibd 文件;redo 拷贝线程只有一个,在 ibd 拷贝线程之前启动,在 ibd 线程结束后结束。xtrabackup 进程开始执行后,先启动 redo 拷贝线程,从最新的 checkpoint 点开始顺序拷贝 redo 日志;然后再启动 ibd 数据拷贝线程,在 xtrabackup 拷贝 ibd 过程中,innobackupex 进程一直处于等待状态(等待文件被创建)。

      xtrabackup 拷贝完成idb后,通知 innobackupex(通过创建文件),同时自己进入等待(redo 线程仍然继续拷贝);

      innobackupex 收到 xtrabackup 通知后,执行FLUSH TABLES WITH READ LOCK (FTWRL),取得一致性位点,然后开始备份非 InnoDB 文件(包括 frm、MYD、MYI、CSV、opt、par等)。拷贝非 InnoDB 文件过程中,因为数据库处于全局只读状态,如果在业务的主库备份的话,要特别小心,非 InnoDB 表(主要是MyISAM)比较多的话整库只读时间就会比较长,这个影响一定要评估到。

      当 innobackupex 拷贝完所有非 InnoDB 表文件后,通知 xtrabackup(通过删文件) ,同时自己进入等待(等待另一个文件被创建);

      xtrabackup 收到 innobackupex 备份完非 InnoDB 通知后,就停止 redo 拷贝线程,然后通知 innobackupex redo log 拷贝完成(通过创建文件);

      innobackupex 收到 redo 备份完成通知后,就开始解锁,执行 UNLOCK TABLES;

      最后 innobackupex 和 xtrabackup 进程各自完成收尾工作,如资源的释放、写备份元数据信息等,innobackupex 等待 xtrabackup 子进程结束后退出。


    1.2 常用参数

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

    --host:指明连接数据库的主机

    --user:指明执行数据库备份的用户名

    --password:指明执行备份的密码

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

    --apply-log:重做日志

    --copy-back:执行数据恢复

    --slave-info:备份从库的show slave status信息,仅用于在备份从库时使用

    --no-lock:不锁表,仅适用于存储引擎为innodb,并且不在乎备份位置点时使用


    2、安装XtraBackup

    2.1 环境准备

    主机名IP系统MySQL版本MySQL-01192.168.10.20CentOS release 6.9 (Final)5.6.36

    MySQL的安装步骤略。

    2.2 创建备份用户

    mysql>createuser'backup'@'localhost'identifiedby'123456';QueryOK,0rowsaffected(0.04sec)mysql>grantreload,locktables,replicationclient,processon*.*to'backup'@'localhost'identifiedby'123456';QueryOK,0rowsaffected(0.30sec)mysql>flushprivileges;QueryOK,0rowsaffected(0.04sec)


    2.3 创建备份目录

    [root@MySQL-01~]#mkdir/backup


    2.4 下载xtraBackup

    [root@MySQL-01~]#cd/opt#下载可能较慢。[root@MySQL-01opt]#wgethttps://www.percona.com/downloads/XtraBackup/Percona-XtraBackup-2.4.7/binary/redhat/6/x86_64/percona-xtrabackup-24-2.4.7-2.el6.x86_64.rpm


    2.4 安装XtraBackup

    #安装的时候出现报错,原因为依赖包未安装。[root@MySQL-01opt]#rpm-ivhpercona-xtrabackup-24-2.4.7-2.el6.x86_64.rpmwarning:percona-xtrabackup-24-2.4.7-2.el6.x86_64.rpm:HeaderV4DSA/SHA1Signature,keyIDcd2efd2a:NOKEYerror:Faileddependencies:libev.so.4()(64bit)isneededbypercona-xtrabackup-24-2.4.7-2.el6.x86_64perl(DBD::mysql)isneededbypercona-xtrabackup-24-2.4.7-2.el6.x86_64#安装相关依赖包[root@MySQL-01opt]#yum-yinstalllibev-develperl-DBD-MySQL[root@MySQL-01opt]#rpm-ivhpercona-xtrabackup-24-2.4.7-2.el6.x86_64.rpmwarning:percona-xtrabackup-24-2.4.7-2.el6.x86_64.rpm:HeaderV4DSA/SHA1Signature,keyIDcd2efd2a:NOKEYPreparing...###########################################[100%]1:percona-xtrabackup-24###########################################[100%][root@MySQL-01opt]#rpm-qlpercona-xtrabackup-24-2.4.7-2.el6.x86_64/usr/bin/innobackupex#innobackupex脚本工具/usr/bin/xbcloud/usr/bin/xbcloud_osenv/usr/bin/xbcrypt/usr/bin/xbstream/usr/bin/xtrabackup#最主要的备份工具/usr/share/doc/percona-xtrabackup-24-2.4.7/usr/share/doc/percona-xtrabackup-24-2.4.7/COPYING/usr/share/man/man1/innobackupex.1.gz/usr/share/man/man1/xbcrypt.1.gz/usr/share/man/man1/xbstream.1.gz/usr/share/man/man1/xtrabackup.1.gz

    3、备份与恢复测试

    3.1 全量备份

    #defaults-file:my.cnf配置路径[root@MySQL-01opt]#innobackupex--defaults-file=/app/mysql/my.cnf--user=backup--password=123456/backup#查看backup目录下已经有备份文件[root@MySQL-01opt]#ll/backup/total4drwxr-x---5rootroot4096Jul1417:252017-07-14_17-25-24[root@MySQL-01opt]#ls/backup/2017-07-14_17-25-24/backup-my.cnfperformance_schemaxtrabackup_checkpointsibdata1repxtrabackup_infomysqlxtrabackup_binlog_infoxtrabackup_logfile[root@MySQL-01opt]#cat/backup/2017-07-14_17-25-24/xtrabackup_checkpointsbackup_type=full-backuped#备份方式为全量备份from_lsn=0#由于是全备,其实LSN号为0to_lsn=13835894#截止LSN号last_lsn=13835894compact=0recover_binlog_info=0



    3.2 模拟恢复

    既然全量备份已经完成,那么就来测试一下。

    #将数据库停掉[root@MySQL-01~]#servicemysqldstopShuttingdownMySQL............SUCCESS!#将data文件移到backup目录下[root@MySQL-01~]#mv/app/mysql/data/backup/data_bak#无法启动mysqld了[root@MySQL-01~]#servicemysqldstartStartingMySQL.Loggingto'/app/mysql/data/MySQL-01.err'..ERROR!TheserverquitwithoutupdatingPIDfile(/app/mysql/data/MySQL-01.pid).#apply-log参数:在真正恢复数据库数据之前,先将数据库redo日志状态恢复。[root@MySQL-01~]#innobackupex--defaults-file=/app/mysql/my.cnf--user=backup--password=123456--apply-log/backup/2017-07-14_17-25-24#执行数据恢复[root@MySQL-01~]#innobackupex--defaults-file=/app/mysql/my.cnf--user=backup--password=123456--copy-back/backup/2017-07-14_17-25-24[root@MySQL-01~]#chown-Rmysql.mysql/app/mysql/data#再次启动数据库,显示成功[root@MySQL-01~]#servicemysqldstartStartingMySQL.Loggingto'/app/mysql/data/MySQL-01.err'..SUCCESS!


    4、参考

    http://mysql.taobao.org/monthly/2016/03/07/

    http://www.cnblogs.com/olinux/p/5207887.html


    XtraBackup全量备份与恢复MySQL数据.docx

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

    推荐度:

    下载
    热门标签: 备份mysqlxtrabackup