设为首页 收藏本站
查看: 536|回复: 0

[经验分享] xtrabackup备份msyql数据库

[复制链接]
累计签到:1 天
连续签到:1 天
发表于 2016-6-23 08:42:22 | 显示全部楼层 |阅读模式
简介:
Xtrabackup是由percona提供的mysql数据库备份工具,可以对Innodb数据库做热备

特点:

(1)备份过程快速、可靠

(2)备份过程不会打断正在执行的事务

(3)能够基于压缩等功能节约磁盘空间和流量

(4)自动实现备份检验

(5)还原速度快

准备工作:

1.安装xtrabackup(在percona官网下载rpm包)
# yum install percona-xtrabackup-2.2.3-4982.el6.x86_64.rpm

2.创建最小权限用户
MariaDB [(none)]>grant reload,lock tables,replication client on *.* to 'backupuser'@'localhost' identified by 'backuppassword';

MariaDB [(none)]> flush privileges;
Query OK, 0 rows affected (0.04 sec)

开始备份:(模拟线上环境)
1.完全备份(生成的备份目录为2015-04-09_02-35-22)
# innobackupex --user=backupuser --password=backuppassword /backup/
若显示以下内容即为备份成功:
150409 02:35:25  innobackupex: Connection to database server closed
150409 02:35:25  innobackupex: completed OK!

若显示以下错误信息:在my.cnf文件[mysqld] 中添加innodb_log_file_size = 5M
InnoDB: Error: log file ./ib_logfile0 is of different size 5242880 bytes
InnoDB: than specified in the .cnf file 50331648 bytes!
innobackupex: Error: The xtrabackup child process has died at /usr/bin/innobackupex line 2672.


2.在数据库插入数据,模拟msyqld正常线上运行第一天
MariaDB [(none)]> create database xx;
Query OK, 1 row affected (0.00 sec)

3.执行增量备份(生成2015-04-09_02-59-13,此时--incremental-basedir则应该指为完全备份的目录2015-04-09_02-35-22)
注意:增量备份仅能应用于InnoDB或XtraDB表,对于MyISAM表而言,执行增量备份时其实进行的是完全备份

# innobackupex --incremental /backup/ --incremental-basedir=/backup/2015-04-09_02-35-22/
显示以下信息即为增量备份成功:
innobackupex: MySQL binlog position: filename 'mysql-bin.000001', position 324
150409 02:59:18  innobackupex: Connection to database server closed
150409 02:59:18  innobackupex: completed OK!

4.再次在数据库插入数据,模拟mysqld正常线上运行第二天
MariaDB [(none)]> create database yy;
Query OK, 1 row affected (0.00 sec)

5.再次执行增量备份(生成2015-04-09_03-00-38,此时--incremental-basedi则应该指为上一次增量备份的目录2015-04-09_02-59-13)
# innobackupex --incremental /backup/ --incremental-basedir=/backup/2015-04-09_02-59-13/

6.再次在数据库插入数据,模拟mysqld正常线上运行第三天
MariaDB [(none)]> create database zz;
Query OK, 1 row affected (0.00 sec)

7.模拟事故,停掉mysqld,删除/data目录下的数据
注意:线上环境应该将二进制日志文件(binlog)和数据文件分开存放;
# service mysqld stop
说明:因为此处实验我并没有将二进制日志文件和数据分开存放,所以我先将二进制日志复制到其他目录再删除数据
# cp mysql-bin.000001  /backup/
# rm /data/* -rf

8.查看上一次增量备份,二进制日志最后记录position的位置
# cat /backup/2015-04-09_03-00-38/xtrabackup_binlog_info
mysql-bin.000001        479        

9.导出二进制日志,从最后备份的position开始
# mysqlbinlog mysql-bin.000001 --start-position="479">/backup/binlog.sql

恢复数据:

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

“准备”(prepare)增量备份与整理完全备份有着一些不同,尤其要注意的是:

(1)需要在每个备份(包括完全和各个增量备份)上,将已经提交的事务进行“重放”。“重放”之后,所有的备份数据将合并到完全备份上。

(2)基于所有的备份将未提交的事务进行“回滚”。


此时备份目录下的所有文件:
wKioL1dqKOiQUoNXAAAM-26XEUw639.jpg
按排列顺序:完全备份文件  第一次增量备份文件  第二次增量备份文件  导出的部分二进制日志文件  所有的二进制日志文件


1.整理合并备份文件
# innobackupex --apply-log --redo-only /backup/2015-04-09_02-35-22/

将第一个增量备份合并到完全备份中
# innobackupex --apply-log --redo-only /backup/2015-04-09_02-35-22/ --incremental-dir=/backup/2015-04-09_02-59-13/

将第二个增量备份合并到完全备份中
# innobackupex --apply-log --redo-only /backup/2015-04-09_02-35-22/ --incremental-dir=/backup/2015-04-09_03-00-38/
注意:假如我们在每周日晚上00:00点做完全备份,在周1-周6晚上00:00点做增量备份,刚好有用户一直在00:00点前一直在操作,并且在00:01分才提交事务,所以为了避免系统自动将备份时候未提交的事务做回滚操作,所以我们需要加上--redo-only参数,让其只提交事务,而不回滚事务。到最后系统会判定哪些是需要回滚的操作执行回滚

2.恢复操作
# innobackupex --copy-back /backup/2015-04-09_02-35-22/

3.改变恢复后数据目录(/data)下文件的属主属组为msyql
# chown -R mysql.mysql /data/*

4.查看数据库有备份的内容有无恢复
# service mysqld start

wKiom1dqKOiD8PvCAABATJbwfjU490.jpg
可以看到备份的数据已经恢复

5.通过二进制日志恢复未来得及备份的数据
# mysql <binlog.sql

wKiom1dqKOnBLh5nAABCDjeHUJ8464.jpg
可以看到未来的及备份的数据也通过二进制日志恢复

-------------------------------完成。-------------------------------------



运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-233901-1-1.html 上篇帖子: Mysql不乱码思维流程 下篇帖子: mysqldump & binlog做完全备份 数据库
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表