利用Xtrabackup工具备份及恢复(MySQL DBA的必备工具)

本文涉及的产品
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
RDS MySQL Serverless 高可用系列,价值2615元额度,1个月
简介: 利用Xtrabackup工具备份及恢复(MySQL DBA的必备工具) Xtrabackup——MySQL DBA的必备工具 注意: 文档参照http://www.percona.com/docs/wiki/percona-xtrabackup:start mysql要使用5.1.50版本或以上。

利用Xtrabackup工具备份及恢复(MySQL DBA的必备工具)

Xtrabackup——MySQL DBA的必备工具

注意:

  1. 文档参照http://www.percona.com/docs/wiki/percona-xtrabackup:start
  2. mysql要使用5.1.50版本或以上。

一、Xtrabackup简介及安装

1、Xtrabackup 是percona的一个开源项目,可以热备份innodb ,XtraDB,和MyISAM(会锁表),可以看做是InnoDB Hotbackup的免费替代品。

Percona Support for MySQL

参考:http://www.percona.com/mysql-support/

先看看如何安装Xtrabackup,最简单的安装方式是使用RPM包,不过想使用源代码方式安装的话,其安装方式有点古怪,因为它采用的在MySQL源代码上打补丁构建的方式安装的。

2、安装:

wget http://www.percona.com/downloads/XtraBackup/XtraBackup-1.4/Linux/binary/i686/

tar zxf xtrabackup-1.4.tar.gz

cd xtrabackup-1.4

./configure

make

进行到这里时,千万别make install,那样就会接着安装MySQL了,正确方法是:

cd innobase/xtrabackup/

make

make install

安装参照:http://www.percona.com/docs/wiki/percona-xtrabackup:installation:from-source

3、如此一来,就会在/usr/bin目录里安装上两个有用的工具:xtrabackup、innobackupex

  1. xtrabackup 只能备份InnoDB和XtraDB两种数据表,支持在线热备份,可以在不加锁的情况下备份Innodb数据表,不过此工具不能操作Myisam引擎表
  2. innobackupex 是一个脚本封装,封装了xtrabackup,能同时处理Innodb和Myisam,但在处理Myisam时需要加一个读锁。

按如上的介绍,由于操作Myisam时需要加读锁,这会堵塞线上服务的写操作,而Innodb没有这样的限制,所以数据库中Innodb表类型所占的比例越大,则越有利。实际应用中一般是直接使用innobackupex方法,它主要有三种操作方式,按手册中的介绍:

Usage:

innobackup [--sleep=MS] [--compress[=LEVEL]] [--include=REGEXP] [--user=NAME]

[--password=WORD] [--port=PORT] [--socket=SOCKET] [--no-timestamp]

[--ibbackup=IBBACKUP-BINARY] [--slave-info] [--stream=tar]

[--defaults-file=MY.CNF]

[--databases=LIST] [--remote-host=HOSTNAME] BACKUP-ROOT-DIR

innobackup --apply-log [--use-memory=MB] [--uncompress] [--defaults-file=MY.CNF]

[--ibbackup=IBBACKUP-BINARY] BACKUP-DIR

innobackup --copy-back [--defaults-file=MY.CNF] BACKUP-DIR

——————————————————————————————————

第一个命令行是热备份mysql数据库。

带有–apply-log选项的命令是准备在一个备份上启动mysql服务。

带有–copy-back选项的命令从备份目录拷贝数据,索引,日志到my.cnf文件里规定的初始位置。

Xtrabackup还可以用来moving InnoDB tables between servers,更多的内容可以参考官方文档及例子。

参考链接:

  1. 官方文档:http://www.percona.com/docs/wiki/percona-xtrabackup:xtrabackup_manual
  2. Xtrabackup online backup for InnoDB/XTraDB(pdf):

http://www.percona.com/ppc2009/PPC2009_xtrabackup.pdf

二、innobackupex 和 xtrabackup备份详解

注:innobackupex会根据/et/my.cnf来确定MySQL的数据位置。

1. 普通备份:

innobackupex [--defaults-file=/etc/my.cnf] --user=root [--host=192.168.1.52] [--password=xxx] [--port=3306]   /data/back_data/    2>/data/back_data/1.log

备份的目录是/data/back_data/,这里的2>/data/back_data/1.log,是将备份过程中的输出信息重定向到1.log

innobackupex-1.5.1 –slave-info …..

–slave-info会记录复制主日志的 复制点,便于重新做复制用。(用在备份从机器用)

备份后的文件:

xtrabackup_binlog_info — 存放binlog的信息。(binlog需要另外拷贝备份,如果需要binlog的话)

xtrabackup_checkpoints — 存放备份的起始位置和结束位置。

恢复:

首先停掉数据库,然后删除数据库目录下的所有数据库文件.

cd /data/mysql_data

rm -rf * # 删除数据目录里的所有文件

innobackupex-1.5.1 --user=root --apply-log /data/back_data/2010-10-26_16-09-37 # 应用日志

innobackupex-1.5.1 --user=root --copy-back /data/back_data/2010-10-26_16-09-37

默认innobackupex-1.5.1会将二进制日志信息存放在文件xtrabackup_binlog_info中发(方便做Slave)。

cd /data

chown -R mysql:mysql mysql_data/

重启mysql服务

2. 打包(Tar)备份:

innobackupex-1.5.1 --user=root [--password=xxx] --stream=tar /data/back_data/2/ 2>/data/back_data/2.log   1>/data/back_data/2.tar

还原:

#cd /data/back_data/2/

#tar ixvf 2.tar

# ls

2.tar backup-my.cnf ibdata1 ibdata2 mablevi mysql xtrabackup_binlog_info xtrabackup_checkpoints  xtrabackup_logfile

准备还原

# innobackupex-1.5.1 --user=xxx [--password=xxx]--apply-log /data/back_data/

……

innobackupex: completed OK!

删除数据目录里的所有文件

rm -rf /data/mysql_data/*

拷贝:

# innobackupex-1.5.1 --user=xxx [--password=xxx] --copy-back  /data/back_data/

……

innobackupex: completed OK!

cd /data

chown -R mysql:mysql mysql_data/

重启mysql服务

3. 压缩(tar gzip)备份

innobackupex-1.5.1 --user=root [--password=xxx] --stream=tar

/data/back_data/2/  2>/data/back_data/2.log | gzip > /data/back_data/2.tar.gz

这里使用了管道|将innobackupex-1.5.1作为gzip的标准输入。恢复,只需要使用tar -izxvf 解压对应的文件后,操作完全同普通备份。

还原:

使用tar –izxvf 解压对应的文件后,操作完全同普通备份。

#cd /data/back_data/2/

#tar ixvf 2.tar

# ls

backup-my.cnf ibdata1 ibdata2 mablevi mysql xtrabackup_binlog_info xtrabackup_checkpoints  xtrabackup_logfile

准备还原:

# innobackupex-1.5.1 --user=xxx [--password=xxx] --apply-log /data/back_data/2/

……

innobackupex: completed OK!

删除数据目录里的所有文件

rm -rf /data/mysql_data/*

# innobackupex-1.5.1 --user=xxx [--password=xxx] --copy-back   /data/back_data/2/

cd /data

chown -R mysql:mysql mysql_data/

重启mysql服务

———————————————————————————————————————

xtrabackup 备份和恢复

备份:

xtrabackup --defaults-file=/etc/my.cnf --backup --target-dir=/data/back_data/

恢复:

需要执行两次xtrabackup –prepare

xtrabackup --defaults-file=/etc/my.cnf --prepare --target-dir=/data/back_data/

xtrabackup --defaults-file=/etc/my.cnf --prepare --target-dir=/data/back_data/

注意,xtrabackup只备份数据文件,并不备份数据表结构(.frm),所以使用xtrabackup恢复的时候,你必须有对应表结构文件(.frm)。

增量备份:

1、全量备份

xtrabackup --defaults-file=/etc/my.cnf --backup --target-dir=/data/back_data/

2、增量备份

xtrabackup --defaults-file=/etc/my.cnf --backup --target-dir=/data/back_data_inc/ --incremental-

basedir=/data/back_data/

在增量备份的目录下,数据文件都是以.delta结尾的。增量备份只备份上一次全量备份后被修改过的page,所以增量备份只暂用较少的空间。增量备份可以在增量备份的基础上增量。

增量备份恢复:

我们需要分别对全量、增量备份各做一次prepare操作。

xtrabackup --defaults-file=/etc/my.cnf --prepare --target-dir=/data/back_data/2010-10-26_16-09-37

xtrabackup --prepare --target-dir=/data/back_data/2010-10-26_16-09-37--incremental-

dir=/data/back_data_inc

xtrabackup --prepare --target-dir=/data/back_data/ #这一步不是必须的

这样,/data/back_data/下的数据文件就可以直接放到你的MySQL数据目录下,恢复数据了。

再次提醒,xtrabackup只备份InnoDB数据文件,表结构是不备份的,所以恢复的时候,你必须有对应表结构文件(.frm)。

rm -rf /data/mysql_data/ib*

cp -i /data/back_data/2010-10-26_16-09-37/ib* /data/mysql_data/

cd /data

chown -R mysql:mysql mysql_data/

3、innobackupex 与 xtrabackup 相结合

首先,innobackupex全备份:

innobackupex  --user=root /data/back_data/ 2>/data/back_data/1.log #会生成一个时间文件夹,这里假如是2010-10-29_15-57-44

然后,xtrabackup 做增量备份:

xtrabackup --defaults-file=/etc/my.cnf --backup --target-dir=/data/back_data_inc/4 --incremental-basedir=/data/back_data/2010-10-29_15-57-44

恢复:

首先停掉数据库,备份二进制日志(如果有的话),然后删除数据库目录下的所有数据库文件.

cd /data/mysql_data

rm -rf * # 删除数据目录里的所有文件

恢复全量备份:

innobackupex  --user=root --apply-log /data/back_data/2010-10-29_15-57-44 # 应用日志

innobackupex  --user=root --copy-back /data/back_data/2010-10-29_15-57-44 # 拷贝文件

恢复增量备份:

xtrabackup --prepare --target-dir=/data/back_data/2010-10-29_15-57-44 --incremental-dir=/data/back_data_inc/5

cd /data

chown -R mysql:mysql mysql_data/

重启mysql服务。

原文地址http://www.bieryun.com/3737.html

相关实践学习
如何在云端创建MySQL数据库
开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
2月前
|
存储 关系型数据库 MySQL
mysql数据库备份与恢复
MySQL数据库的备份与恢复是确保数据安全性和业务连续性的关键操作。
77 4
|
10天前
|
关系型数据库 MySQL Linux
Linux环境下MySQL数据库自动定时备份实践
数据库备份是确保数据安全的重要措施。在Linux环境下,实现MySQL数据库的自动定时备份可以通过多种方式完成。本文将介绍如何使用`cron`定时任务和`mysqldump`工具来实现MySQL数据库的每日自动备份。
28 3
|
10天前
|
监控 关系型数据库 MySQL
Linux环境下MySQL数据库自动定时备份策略
在Linux环境下,MySQL数据库的自动定时备份是确保数据安全和可靠性的重要措施。通过设置定时任务,我们可以每天自动执行数据库备份,从而减少人为错误和提高数据恢复的效率。本文将详细介绍如何在Linux下实现MySQL数据库的自动定时备份。
25 3
|
1月前
|
SQL 分布式计算 关系型数据库
Hadoop-21 Sqoop 数据迁移工具 简介与环境配置 云服务器 ETL工具 MySQL与Hive数据互相迁移 导入导出
Hadoop-21 Sqoop 数据迁移工具 简介与环境配置 云服务器 ETL工具 MySQL与Hive数据互相迁移 导入导出
52 3
|
1月前
|
安全 关系型数据库 MySQL
MySQL用户备份
【10月更文挑战第2天】MySQL用户备份
53 3
|
1月前
|
存储 关系型数据库 MySQL
MySQL如何备份?
【10月更文挑战第2天】MySQL如何备份?
95 3
|
9天前
|
SQL 关系型数据库 MySQL
12 PHP配置数据库MySQL
路老师分享了PHP操作MySQL数据库的方法,包括安装并连接MySQL服务器、选择数据库、执行SQL语句(如插入、更新、删除和查询),以及将结果集返回到数组。通过具体示例代码,详细介绍了每一步的操作流程,帮助读者快速入门PHP与MySQL的交互。
25 1
|
12天前
|
SQL 关系型数据库 MySQL
go语言数据库中mysql驱动安装
【11月更文挑战第2天】
27 4
|
1月前
|
存储 关系型数据库 MySQL
Mysql(4)—数据库索引
数据库索引是用于提高数据检索效率的数据结构,类似于书籍中的索引。它允许用户快速找到数据,而无需扫描整个表。MySQL中的索引可以显著提升查询速度,使数据库操作更加高效。索引的发展经历了从无索引、简单索引到B-树、哈希索引、位图索引、全文索引等多个阶段。
61 3
Mysql(4)—数据库索引
|
18天前
|
监控 关系型数据库 MySQL
数据库优化:MySQL索引策略与查询性能调优实战
【10月更文挑战第27天】本文深入探讨了MySQL的索引策略和查询性能调优技巧。通过介绍B-Tree索引、哈希索引和全文索引等不同类型,以及如何创建和维护索引,结合实战案例分析查询执行计划,帮助读者掌握提升查询性能的方法。定期优化索引和调整查询语句是提高数据库性能的关键。
86 1