Xtrabackup全量备份与恢复mysql数据库

一、Xtrabackup简单概述:

Percona  Xtrabackup是开源免费的MySQL数据库热备份软件,它能对InnoDB和XtraDB存储引擎的数据库非阻塞地备份(对于MyISAM的备份同样需要加表锁)。XtraBackup支持所有的Percona Server、MySQL、MariaDB和Drizzle。

XtraBackup优势 :
1、无需停止数据库进行InnoDB热备
2、增量备份MySQL
3、流压缩到传输到其它服务器
4、能比较容易地创建主从同步
5、备份MySQL时不会增大服务器负载

二、Xtrabackup的安装

首先列出以下我当前的服务器环境

下载Xtrabackup

[[email protected] softs]# wget http://www.percona.com/downloads/XtraBackup/LATEST/RPM/rhel5/i386/percona-xtrabackup-2.1.6-702.rhel5.i386.rpm--2014-01-14 10:06:41--  http://www.percona.com/downloads/XtraBackup/LATEST/RPM/rhel5/i386/percona-xtrabackup-2.1.6-702.rhel5.i386.rpm

Resolving www.percona.com... 74.121.199.234
……………………此处省略部分内容输出………………

100%[==========================>] 8,662,225    360K/s   in 32s

2014-01-14 10:07:43 (1448 KB/s) - `percona-xtrabackup-2.1.6-702.rhel5.i386.rpm‘ saved [8662225/8662225]

rpm包直接安装

[[email protected] softs]# rpm -ivh percona-xtrabackup-2.1.6-702.rhel5.i386.rpm 
error: Failed dependencies:
        perl(DBD::mysql) is needed by percona-xtrabackup-2.1.6-702.rhel5.i386

这里需要解决依赖包的关系,我直接使用本地yum安装

[[email protected] softs]# yum install perl-DBD-MySQL  -y

[[email protected] softs]# rpm -ivh  percona-xtrabackup-2.1.6-702.rhel5.i386.rpm 
Preparing...                ########################################### [100%]
   1:percona-xtrabackup     ########################################### [100%]

再次尝试安装后成功

安装XtraBackup后,其实会有几个工具:
innobackupex:
这个是其实是下面三个工具的一个perl脚本封装,可以备份MyISAM, InnoDB, XtraDB表。
xtrabackup:
一个由C编译而来的二进制文件,只能备份InnoDB和XtraDB数据。
xbcrypt:
用来加密或解密备份的数据。
xbstream:
用来解压或压缩xbstream格式的压缩文件。
建议使用perl封装的innobackupex来作数据库备份,因为比较容易使用。

三、innobackupex相关参数说明

--defaults-file:指定my.cnf参数文件的位置

--apply-log:同xtrabackup的--prepare参数,一般情况下,在备份完成后,数据尚且不能用于恢复操作,因为备份的数据中可能会包含尚未提交的事务或已经提交但尚未同步至数据文件中的事务。因此,此时数据 文件仍处理不一致状态。--apply-log的作用是通过回滚未提交的事务及同步已经提交的事务至数据文件使数据文件处于一致性状态。

--copy-back:做数据恢复时将备份数据文件拷贝到MySQL服务器的datadir

--remote-host=HOSTNAME: 通过ssh将备份数据存储到进程服务器上

--stream=[tar]:备份文件输出格式, 该文件可在XtarBackup binary文件中获得. 在使用参数stream=tar备份的时候,你的xtrabackup_logfile可能会临时放在/tmp目录下,如果你备份的时候并发写入较大的话,xtrabackup_logfile可能会很大(5G+),很可能会占满你的/tmp目录,可以通过参数--tmpdir指定目录来解决这个问题.

--tmpdir=DIRECTORY:当有指定--remote-host or --stream时, 事务日志临时存储的目录, 默认采用MySQL配置文件中所指定的临时目录tmpdir

--redo-only --apply-log:强制备份日志时只redo,跳过rollback,这在做增量备份时非常必要

--use-memory=*:该参数在prepare的时候使用,控制prepare时innodb实例使用的内存

--databases=LIST:列出需要备份的databases,如果没有指定该参数,所有包含MyISAM和InnoDB表的database都会被备份

--slave-info:备份从库, 加上--slave-info备份目录下会多生成一个xtrabackup_slave_info 文件, 这里会保存主日志文件以及偏移, 文件内容类似于:CHANGE MASTER TO MASTER_LOG_FILE=‘‘, MASTER_LOG_POS=0

--socket=SOCKET:指定mysql.sock所在位置,以便备份进程登录mysql。

四、全量备份

[[email protected] tmp]# mkdir /backup
[[email protected] tmp]# innobackupex --user=root --password=123456 --defaults-file=/usr/local/mysql/etc/my.cnf --port=3306  /backup

InnoDB Backup Utility v1.5.1-xtrabackup; Copyright 2003, 2009 Innobase Oy
and Percona LLC and/or its affiliates 2009-2013.  All Rights Reserved.

This software is published under
the GNU GENERAL PUBLIC LICENSE Version 2, June 1991.

Get the latest version of Percona XtraBackup, documentation, and help resources:
http://www.percona.com/xb/p

140119 05:46:11  innobackupex: Connecting to MySQL server with DSN ‘dbi:mysql:;mysql_read_default_file=/usr/local/mysql/etc/my.cnf;mysql_read_default_group=xtrabackup;port=3306‘ as ‘root‘  (using password: YES).
140119 05:46:11  innobackupex: Connected to MySQL server
140119 05:46:12  innobackupex: Executing a version check against the server...
140119 05:46:17  innobackupex: Done.
IMPORTANT: Please check that the backup run completes successfully.
           At the end of a successful backup run innobackupex
           prints "completed OK!".

innobackupex: Using mysql server version 5.6.12-debug-log

innobackupex: Created backup directory /backup/2014-01-19_05-46-19

140119 05:46:19  innobackupex: Starting ibbackup with command: xtrabackup_56  --defaults-file="/usr/local/mysql/etc/my.cnf"  --defaults-group="mysqld" --backup --suspend-at-end --target-dir=/backup/2014-01-19_05-46-19 --tmpdir=/tmp
innobackupex: Waiting for ibbackup (pid=2458) to suspend
innobackupex: Suspend file ‘/backup/2014-01-19_05-46-19/xtrabackup_suspended_2‘

xtrabackup_56 version 2.1.6 for MySQL server 5.6.11 Linux (i686) (revision id: 702)
xtrabackup: uses posix_fadvise().
xtrabackup: cd to /database
xtrabackup: using the following InnoDB configuration:
xtrabackup:   innodb_data_home_dir = ./
xtrabackup:   innodb_data_file_path = ibdata1:10M:autoextend
xtrabackup:   innodb_log_group_home_dir = ./
xtrabackup:   innodb_log_files_in_group = 2
xtrabackup:   innodb_log_file_size = 50331648
>> log scanned up to (2000813)
InnoDB: Allocated tablespace 2, old maximum was 0
[01] Copying ./ibdata1 to /backup/2014-01-19_05-46-19/ibdata1
>> log scanned up to (2000813)
>> log scanned up to (2000813)
>> log scanned up to (2000813)
>> log scanned up to (2000813)
>> log scanned up to (2000813)
[01]        ...done
[01] Copying ./mysql/innodb_index_stats.ibd to /backup/2014-01-19_05-46-19/mysql/innodb_index_stats.ibd
[01]        ...done
[01] Copying ./mysql/slave_worker_info.ibd to /backup/2014-01-19_05-46-19/mysql/slave_worker_info.ibd
[01]        ...done
[01] Copying ./mysql/innodb_table_stats.ibd to /backup/2014-01-19_05-46-19/mysql/innodb_table_stats.ibd
[01]        ...done
[01] Copying ./mysql/slave_relay_log_info.ibd to /backup/2014-01-19_05-46-19/mysql/slave_relay_log_info.ibd
[01]        ...done
[01] Copying ./mysql/slave_master_info.ibd to /backup/2014-01-19_05-46-19/mysql/slave_master_info.ibd
…………………………此处省略大量内容输出…………………………
innobackupex: Backing up file ‘/database/supor/productnotes.MYI‘
innobackupex: Backing up file ‘/database/supor/productnotes.frm‘
innobackupex: Backing up file ‘/database/supor/orders.frm‘
innobackupex: Backing up file ‘/database/supor/customers.frm‘
innobackupex: Backing up file ‘/database/supor/orderitems.frm‘
innobackupex: Backing up file ‘/database/supor/productnotes.MYD‘
140119 05:46:26  innobackupex: Finished backing up non-InnoDB tables and files

140119 05:46:26  innobackupex: Waiting for log copying to finish

xtrabackup: The latest check point (for incremental): ‘2000813‘
xtrabackup: Stopping log copying thread.
.>> log scanned up to (2000813)

xtrabackup: Creating suspend file ‘/backup/2014-01-19_05-46-19/xtrabackup_log_copied‘ with pid ‘2458‘
xtrabackup: Transaction log of lsn (2000813) to (2000813) was copied.
140119 05:46:27  innobackupex: All tables unlocked

innobackupex: Backup created in directory ‘/backup/2014-01-19_05-46-19‘
140119 05:46:27  innobackupex: Connection to database server closed
140119 05:46:28  innobackupex: completed OK!

备份成功

五、全量备份恢复

现在我模拟将数据库的所有文件误删除,然后进行数据恢复

[[email protected] database]# rm -rf *

[[email protected] database]# ls

[[email protected] database]#

[[email protected] database]# innobackupex --defaults-file=/usr/local/mysql/etc/my.cnf --user=root --password=123456 --apply-log /backup/2014-01-19_05-57-08/

InnoDB Backup Utility v1.5.1-xtrabackup; Copyright 2003, 2009 Innobase Oy
and Percona LLC and/or its affiliates 2009-2013.  All Rights Reserved.
IMPORTANT: Please check that the apply-log run completes successfully.
           At the end of a successful apply-log run innobackupex
           prints "completed OK!".

140119 06:00:47  innobackupex: Starting ibbackup with command: xtrabackup_56  --defaults-file="/usr/local/mysql/etc/my.cnf"  --defaults-group="mysqld" --prepare --target-dir=/backup/2014-01-19_05-57-08 --tmpdir=/tmp

xtrabackup_56 version 2.1.6 for MySQL server 5.6.11 Linux (i686) (revision id: 702)
xtrabackup: Starting InnoDB instance for recovery.
xtrabackup: Using 104857600 bytes for buffer pool (set by --use-memory parameter)
InnoDB: The InnoDB memory heap is disabled
InnoDB: Mutexes and rw_locks use GCC atomic builtins
InnoDB: Compressed tables use zlib 1.2.3
InnoDB: Not using CPU crc32 instructions
……………………………………………………………………………………
[notice (again)]
  If you use binary log and don‘t use any hack of group commit,
  the binary log position seems to be:

xtrabackup: starting shutdown with innodb_fast_shutdown = 1
InnoDB: FTS optimize thread exiting.
I……………………………………………………………………………………
innobackupex: Creating directory ‘/database/mysql‘
innobackupex: Copying ‘/backup/2014-01-19_05-57-08/mysql/help_keyword.frm‘ to ‘/database/mysql/help_keyword.frm‘
innobackupex: Copying ‘/backup/2014-01-19_05-57-08/mysql/user.MYI‘ to ‘/database/mysql/user.MYI‘
innobackupex: Copying ‘/backup/2014-01-19_05-57-08/mysql/help_relation.frm‘ to ‘/database/mysql/help_relation.frm‘
innobackupex: Copying ‘/backup/2014-01-19_05-57-08/mysql/slow_log.CSV‘ to ‘/database/mysql/slow_log.CSV‘
innobackupex: Copying ‘/backup/2014-01-19_05-57-08/mysql/time_zone_leap_second.frm‘ to ‘/database/mysql/time_zone_leap_second.frm‘
innobackupex: Copying ‘/backup/2014-01-19_05-57-08/mysql/time_zone.MYI‘ to ‘/database/mysql/time_zone.MYI‘
innobackupex: Copying ‘/backup/2014-01-19_05-57-08/mysql/time_zone_transition.MYI‘ to ‘/database/mysql/time_zone_transition.MYI‘
innobackupex: Copying ‘/backup/2014-01-19_05-57-08/mysql/slave_master_info.frm‘ to ‘/database/mysql/slave_master_info.frm‘
innobackupex: Copying ‘/backup/2014-01-19_05-57-08/mysql/help_category.MYI‘ to ‘/database/mysql/help_category.MYI‘
innobackupex: Copying ‘/backup/2014-01-19_05-57-08/mysql/procs_priv.MYI‘ to ‘/database/mysql/procs_priv.MYI‘
innobackupex: Copying ‘/backup/2014-01-19_05-57-08/mysql/help_category.MYD‘ to ‘/database/mysql/help_category.MYD‘
innobackupex: Copying ‘/backup/2014-01-19_05-57-08/mysql/func.MYI‘ to ‘/database/mysql/func.MYI‘
innobackupex: Copying ‘/backup/2014-01-19_05-57-08/mysql/tables_priv.frm‘ to ‘/database/mysql/tables_priv.frm‘
innobackupex: Copying ‘/backup/2014-01-19_05-57-08/mysql/time_zone_transition.MYD‘ to ‘/database/mysql/time_zone_transition.MYD‘
…………………………………………此处省略大量数据输出………………………………
innobackupex: Copying ‘/backup/2014-01-19_05-57-08/performance_schema/performance_timers.frm‘ to ‘/database/performance_schema/performance_timers.frm‘

innobackupex: Creating directory ‘/database/test‘

innobackupex: Starting to copy InnoDB system tablespace
innobackupex: in ‘/backup/2014-01-19_05-57-08‘
innobackupex: back to original InnoDB data directory ‘/database‘
innobackupex: Copying ‘/backup/2014-01-19_05-57-08/ibdata1‘ to ‘/database/ibdata1‘

innobackupex: Starting to copy InnoDB undo tablespaces
innobackupex: in ‘/backup/2014-01-19_05-57-08‘
innobackupex: back to ‘/database‘

innobackupex: Starting to copy InnoDB log files
innobackupex: in ‘/backup/2014-01-19_05-57-08‘
innobackupex: back to original InnoDB log directory ‘/database‘
innobackupex: Copying ‘/backup/2014-01-19_05-57-08/ib_logfile0‘ to ‘/database/ib_logfile0‘
innobackupex: Copying ‘/backup/2014-01-19_05-57-08/ib_logfile1‘ to ‘/database/ib_logfile1‘
innobackupex: Finished copying back files.

140119 06:01:31  innobackupex: completed OK!   ###恢复完成

接下来检查数据是否恢复
[[email protected] database]# ls
ibdata1  ib_logfile0  ib_logfile1  mysql  performance_schema  test

[[email protected] database]# chown -R mysql.mysql /database/

[[email protected] ~]# /etc/init.d/mysql5 restart
Shutting down MySQL..                                      [  OK  ]
Starting MySQL............                                 [  OK  ]

全量备份恢复成功

http://blog.csdn.net/avilifans/article/details/18469549

时间: 2024-10-25 14:33:31

Xtrabackup全量备份与恢复mysql数据库的相关文章

XtraBackup全量备份与恢复MySQL数据

防伪码:没有相当程度的孤独是不可能有内心的平和. 1.概述 Percona XtraBackup(简称PXB)是 Percona 公司开发的一个用于 MySQL 数据库物理热备的备份工具,支持 MySQl(Oracle).Percona Server 和 MariaDB,并且开源,淘宝的RDS for MySQL的物理备份就是基于XtraBackup做的. Xtrabackup有两个主要的工具:xtrabackup.innobackupex (1)xtrabackup是C/C++编译的二进制文件

利用xtrabackup 全量备份100G的数据恢复到单实例测试

利用xtrabackup 全量备份的mysql5.6.40实例的100G的数据恢复MySQL5.7.24实例上到单实例消耗的时间: 服务器的环境如下: dell r620 双颗CPU,单核心是12核心,内存是72G ,硬盘伪sata接口的企业级的SSD固态硬盘:500G 固态盘型号如下: PD Type: SATA Raw Size: 465.761 GB [0x3a386030 Sectors] Inquiry Data: S3Z3NB0K116201W Samsung SSD 860 EVO

利用当天的xtrabackup全量备份文件搭建slave库

环境: 单台机器开启2个mysql实例 3306和3307,3306 和3307实例都开启了Gtid,并且要保证server-id不同 全量备份命令: time innobackupex --defaults-file=/data/mysql5.7/my3306.cnf -ubackupuser -p123456ccs --host=127.0.0.1 -S /tmp/3306.sock /data/backup/ 当天的xtrabackup全量备份文件记录的binlog的位置点: [[emai

Xtrabackup全量备份/增量备份脚本

一.全量备份脚本 1.全量备份脚本 #!/bin/bash #Description:xtrabackup complete #Author:created by michael #2017-08-07 v0.1 # USER=root PASSWD=123456 BACKUP_DIR=/backup/mysql/complete DATE=$(date +"%F_%T") [[ -d $BACKUP_DIR ]] || mkdir $DATE_DIR innobackupex --u

SOLR环境搭建以及全量导入MYSQL数据

SOLR文档 前言 因为项目中要用到solr,因此花了一周多的时间研究了一下solr,其中的各种问题我就不说了,特别是这两天在研究定时增量索引的时候,心里不知道多少个XXX在奔腾,好了,废话不多说,下面把我得研究成果跟大家分享一下,另外对于SOLR是什么,大家还是自行度娘吧,让我说我也说不清楚. 版本 SOLR SOLR最新的版本是5.3,但是我没有用最新的版本,用的是4.10.4. JDK JDK的版本是jdk1.7.0_13,这里要说一下的就是4.10版本的SOLR需要1.7以上的JDK,刚

mysqldump全量备份与恢复

mysql用户管理 创建授权用户和密码 ?grant all on . to 'user1' identified by '[email protected]';在mysql中创建连接管理数据库的用户,创建用户可以为这个用户访问指定库分配相应的权限创建用户并授权用户访问某个库,有通过本地访问所有库的权限,并查看该用户再数据库中保存的权限记录 mysql> grant all on *.* to 'user1' identified by '[email protected]'; Query OK

Xtrabackup 全量备份脚本

#!/bin/bash #备份文件的名字为当前主机的IP地址+tar.gz,例如172.16.103.1.tar.gz,且每次备份成功之后都会清空本地的备份目录. #相关目录 mkdir -p /xtrabackup/mysql back_dir="/xtrabackup/mysql" backfilename=`ip add | grep "inet" | grep 172 |grep brd |awk -F / '{print $1}' | awk -F&quo

大数据量的Mysql数据库备份策略

Centos下mysql常用的三种备份方法 http://www.centoscn.com/CentOS/Intermediate/2013/0807/1160.html xtrabackup备份 http://7567567.blog.51cto.com/706378/706242 Xtrabackup安装及使用 http://www.cnblogs.com/cosiray/archive/2012/03/02/2376595.html

xtrabackup全量备份+binlog基于时间点恢复

1.通过xtrabackup的备份恢复数据库. 2.找到start-position和binlog名称 cat xtrabackup_info 3.导出mysqlbinlog为sql文件,并确定恢复的时间点 mysqlbinlog --no-defaults --start-position=51178055 --stop-datetime='2017-05-22 15:30' -vv mysql-bin.000004 > backup2.sql 4.导入sql source backup2.s