Mysql 基于innobackupex 的备份&恢复

备份,对于任何数据库,任何系统都是重中之重。针对Mysql,我选择percona xtrabackup软件。我更喜欢物理层面的热备份。而不是逻辑层面的备份(mysqldump),当然很多情况,也要定期做mysqldump备份。增加一个安全的备份选择。

关于如何下载安装percona xtrabackup,请参考:

http://blog.51cto.com/hsbxxl/2107388

先看看innobackupex常用参数

--compact        创建一个不包含第二索引(除了主键之外的索引)的备份
--decompress        解压之前所有以–compress参数备份出来的带有.qp格式的备份文件,--parallel参数会允许同时解锁或解压多个文件。需要安装qpress软件。
--defaults-file=[MY.CNF] 配置文件的路径
--incremental-basedir 以上一次全量或增量备份的路径,作为增量备份的基础。指定这个参数的同时,应该同样指定--incremental参数
--incremental 创建增量备份,当指定这个参数的时候,应该指定--incremental-lsn或--incremental-basedir参数,否则将会备份到--incremental-basedir路径
--apply-log  在备份目录下,通过应用名称为xtrabackup_logfile的交易日志文件来准备备份。同时,创建新的交易日志。
--redo-only 当准备数据库的全备或合并增量备份时,需要指定这个参数。这个参数实际上执行的是xtrabackup --apply-log-only,会让xtrabackup跳过回滚节点,只做“redo”步骤。当数据库需要应用增量备份时,需要指定这个参数。
--incremental-dir=DIRECTORY 指定增量备份的目录,需要搭配--incremental参数。
--no-timestamp 这个参数会让xtrabackup在备份的时候不创建带有时间格式的子文件夹。当指定了这个参数,备份会直接创建在指定的备份目录下
--stream=STREAMNAME 指定流备份的格式。备份将会以指定格式输出到STDOUT。目前支持的格式有tar 和 xbstream。如果指定了这个参数,后面需要接tmpdir目录作为处理流的一个中间目录。
--slave-info    当备份一个作为复制环境的服务器时,这个参数会自动将CHANGE MASTER语句写到备份中,在恢复备份后,不必执行CHANGE MASTER语句。
--tables-file=FILE        这个参数会接受一个字符串,这个字符串指定了一个文件,这个文件包含了要备份的表名,格式如database.table,一行一个。
--use-memory=#        这个参数用于在准备备份时,xtrabackup执行crash recovery所使用的内存大小。这个参数仅和--apply-log搭配时才生效。

更多innobackupex参数解释,请参考官网

https://www.percona.com/doc/percona-xtrabackup/LATEST/innobackupex/innobackupex_option_reference.html

整个测试流程如下图

下面开始我的备份&恢复测试

1. 先看一下我的/etc/my.cnf设置。我选择了binlog是row模式的,也就是“行”模式,而不是sql模式。binlog和datafile分开存放,方便后续的数据库管理。

binlog_format = row
expire_logs_days = 7
max_binlog_size = 100m
binlog_cache_size = 4m
max_binlog_cache_size = 512m
character_set_server = utf8
lower_case_table_names=1
datadir=/data/mysql
log_bin=/data/mysql-binlog/mysql-bin
server_id=101

备份前,创建表

test1        --innodb引擎
test2        --innodb引擎
testmyisam   --myisam引擎

2. 数据库全备份(innobackupex参数请参考)

创建备份目录

mkdir /backup

全库备份

innobackupex --defaults-file=/etc/my.cnf --user=root --password='Abcd234!' /backup/20180424/

3. 全备份之后的操作

a. 创建myisam存储引擎的表testmyisam2

mysql> show tables;
+----------------+
| Tables_in_test |
+----------------+
| test1          |
| test2          |
| testmyisam     |
| testmyisam2    |
+----------------+
4 rows in set (0.00 sec)

b. 删除表test2

mysql> drop table test2;
Query OK, 0 rows affected (0.03 sec)
mysql> show tables;
+----------------+
| Tables_in_test |
+----------------+
| test1          |
| testmyisam     |
| testmyisam2    |
+----------------+
3 rows in set (0.00 sec)

4. innobackupex备份mysql的过程,就是文件的拷贝,在拷贝数据的过程中,数据会发生变化,所以备份出来的数据文件是不一致的。为了保证数据的一致性,需要应用这段时间产生的binlog,才能做到备份数据文件的一致性。后续回复才能有效。

使用--apply-log参数并指定带时间的备份子目录,进行备份一致性合并。想要加快apply-log的进程,推荐使用--use-memory参数。

这个操作可以在任意机器上执行准备备份动作,并不限定在备份的服务器上。

innobackupex --defaults-file=/etc/my.cnf  --apply-log --user=root --password='Abcd1234!' /backup/20180424/2018-04-22_21-22-30/

5. 恢复数据文件到mysql路径下,恢复路径取决于my.cnf中的datadir=/data/mysql 参数。

需要先清空datadir=/data/mysql 路径才能恢复,不然会报错。默认情况下,--copy-back是不会over write已经存在的文件的,可以通过参数--force-non-empty-directories强制覆盖

停止mysql

service mysqld stop

清空mysql路径(一定要慎重,建议是mv备份,而不是rm)

rm -rf /data/mysql/*

全库恢复

innobackupex --defaults-file=/etc/my.cnf  --copy-back /backup/20180424/2018-04-22_21-22-30/

修改路径权限

chown mysql:mysql -R /data/mysql/

启动mysql

service mysqld start

6. 当前数据库只是restore一个全备份,并没有基于时间点,恢复到当前

全背后恢复完成之后,查询数据库,可以看到test2表还没有删除,testmyisam2也没有出现

mysql> show tables;
+----------------+
| Tables_in_test |
+----------------+
| test1       |
| test2       |
| testmyisam      |
+----------------+

7. 首先要通过备份文件,查找上次备份完成,的binglog position位置,在备份文件路径下的xtrabackup_binlog_info中记录,这个position很重要,是后面恢复的关键。

# cd /backup/20180424/2018-04-22_21-22-30/
# cat  xtrabackup_binlog_info
  mysql-bin.000002        29388004

8. 通过mysqlbinglog进行recover

mysqlbinlog --start-position=29388004  /data/mysql-binlog/mysql-bin.000002 | mysql -uroot -p'Abcd234!'

9. 归档也恢复完成之后,再次查询test2表已经删除,testmyisam2也出现了

mysql> show tables;
+----------------+
| Tables_in_test |
+----------------+
| test1      |
| testmyisam    |
| testmyisam2    |
+----------------+
3 rows in set (0.00 sec)

10.也可以根据position恢复到指定的时间点范围(下面是full restore自后再次测试的步骤,不是接上一步恢复的。)

查找position信息

# mysqlbinlog --start-position=29388004  /data/mysql-binlog/mysql-bin.000002|grep "^# at"
# at 4
# at 29388004
# at 29388069
# at 29388304
# at 29388369
# at 29388487

11. 指定范围恢复

mysqlbinlog --start-position=29388004 --stop-position=29388304 /data/mysql-binlog/mysql-bin.000002 | mysql -uroot -p'Abcd1234!'
恢复完这段binlog,可以看到testmyisam2已经出现了
mysql> show tables;
+----------------+
| Tables_in_test |
+----------------+
| test1        |
| test2        |
| testmyisam     |
| testmyisam2    |
+----------------+
4 rows in set (0.00 sec)

12. 分段recover,有助于在人为错误的数据找回

mysqlbinlog --start-position=29388304 --stop-position=29388487 /data/mysql-binlog/mysql-bin.000002 | mysql -uroot -p'Abcd1234!'
恢复这段binlog,可以看到test2已经被删除了
mysql> show tables;
+----------------+
| Tables_in_test |
+----------------+
| test1       |
| testmyisam    |
| testmyisam2    |
+----------------+

总结

a、对于完全恢复,我们需要使用备份加binlog两者结合的方式来实现

b、在恢复期间,首先使用带read-only的apply-log方式来prepare全备(在有增量备份需要合并的情况,没有增量的情况,就不需要read-only)

c、接下来使用带read-only的apply-log方式来prepare增备,仅最后一个增备可以不用read-only

d、停止原有实例,并copy-back后启动恢复后的实例

e、从Innobakcupex备份信息中获取最后的binlog日志及位置信息

f、使用mysqlbinlog方式将日志追加到最新时刻

参考链接

http://blog.itpub.net/26506993/viewspace-2088737/

https://blog.csdn.net/zhang123456456/article/details/72954519

原文地址:http://blog.51cto.com/hsbxxl/2107383

时间: 2024-10-09 22:31:48

Mysql 基于innobackupex 的备份&恢复的相关文章

innobackupex xtrabackup 备份恢复mysql数据

复制地址:https://www.linuxyw.com/download/xtrabackup.pdf http://www.linuxyw.com Email:[email protected] xtrabackup 对 MySQL 数据库的备份及恢复 此文档,只是简单地研究了下,用于数据库全备和增备,效果不错 因为目前对此软件未有需求,所以,文档并不完善,等有时间了,再进行完善吧 此文档资料,互联网收集而成 本人博客: http://www.linuxyw.com xtrabackup x

Mysql使用innobackupex在线备份方案(全量+增量)操作记录

在日常的linux运维工作中,对mysql数据库的备份是非常重要的一个环节.关于mysql的备份和恢复,比较传统的是用mysqldump工具.今天这里介绍下另一款mysql备份工具innobackupex,利用它对mysql做全量和增量备份,仅仅依据本人实战操作做一记录,如有误述,敬请指出~ 一.innobackupex的介绍Xtrabackup是由percona开发的一个开源软件,是使用perl语言完成的脚本工具,能够非常快速地备份与恢复mysql数据库,且支持在线热备份(备份时不影响数据读写

基于Innobackupex的全备恢复

对于MySQL数据库的热备,xtrabackup是大多数DBA朋友们的选择.xtrabackup内嵌了一个innobackupex可用于热备MySQL数据库.本文描写叙述了基于innobackupex这个工具全备下的恢复并给出演示供大家參考. 有关Innobackupex的全备可參考:Innobackupex 全备数据库 1.Innobackupex恢复原理    After creating a backup, the data is not ready to be restored. The

MySQL 基于主主备份

在两个服务器上都要开启二进制日志和中继日志 如果两个服务器的数据库id启动自动增长功能,要在配置文件中设置一个的id为奇数,另外一个的id为偶数,或者一个的id为偶数,另外一个的id为奇数,因为如果不这样设置,有可能两个服务器上同时都有用户在写的时候会产生相同的id号造成冲突,所以一般情况下不建议数据库的id号启用自动增长功能,或者用id生成器进行生成. 一.环境说明: IP 主机名 数据库名 连接用户 密码 192.168.47.179 Mariadb01 retail server01 se

MySQL或MariaDB的备份恢复(mysqldump、LVM2、Xtrabackup)

mysql学习过程中,关于备份和恢复的学习笔记! 图片上传不了,有需要的就下载PDF格式的吧!51cto太坑爹 了~ 图片不够清晰,下面的连接时PDF的,有点大,请自行下载! 链接:http://pan.baidu.com/s/1dD0m8qH 密码:upkx

使用宝塔面板进行mysql数据库的创建备份恢复管理

MySQL的管理维护工具非常多,除了系统自带的命令行管理工具之外,还有许多其他的图形化管理工具,MySQL是一个非常流行的小型关系型数据库管理系统,2008年1月16号被Sun公司收购.目前MySQL被广泛地应用在Internet上的中小型 网站中.由于其体积小.速度快.总体拥有成本低,尤其是开放源码这一特点,许多中小型网站为了降低网站总体拥有成本而选择了MySQL作为网站数据库. 在我的三 丰 免 费 云主 机上 安装了CentOS系统,并默认安装了宝塔管理面板,为了安全起见,在服务器在正常服

centos mysql 实战 第十二节课 备份恢复 备份方案 备份可以分为几种形式 mysqldump 在不同版本里对性能会不会有影响? mysqldump 的用户需要什么权限 mysqldump 支持Where条件 备份评估

centos mysql 实战 第十二节课  备份恢复  备份方案  备份可以分为几种形式  mysqldump 在不同版本里对性能会不会有影响?   mysqldump 的用户需要什么权限   mysqldump 支持Where条件  备份评估 阿里云Percona-live 2016-4 基于Innodb物理复制 mysql5.7没有线程池,需要用percona版本mysql才有,percona的定位是做免费的企业版mysql mysql5.6的memcached插件只是提供memcache

基于Innobackupex的完全恢复

对于MySQL的完全恢复,我们可以借助于Innobackupex的多重备份加上binlog来将数据库恢复到故障点.这里的完全恢复是相对于时点恢复(也叫不完全恢复).本文主要演示了基于Innobackupex如何做一个完全恢复,供大家参考. 有关Innobackupex的备份恢复的知识点请参考以下链接:        Innobackupex 全备数据库        使用mysqlbinlog提取二进制日志        基于Innobackupex的全备恢复         基于Innobac

基于Innobackupex的不完全恢复

对于MySQL的不完全恢复,我们可以借助于Innobackupex的多重备份加上binlog来将数据库恢复到任意时刻.这里的不完全恢复(也叫时点恢复)是相对于完全恢复.本文主要演示了基于Innobackupex如何做一个不完全恢复,供大家参考. 有关Innobackupex的备份恢复的知识点请参考以下链接:        Innobackupex 全备数据库        使用mysqlbinlog提取二进制日志        基于Innobackupex的全备恢复         基于Inno