删库跑路?这篇文章教你如何使用xtraback备份MySQL数据库
来源:51cto
时间:2023-01-10 10:53:29 428浏览 收藏
本篇文章主要是结合我之前面试的各种经历和实战开发中遇到的问题解决经验整理的,希望这篇《删库跑路?这篇文章教你如何使用xtraback备份MySQL数据库》对你有很大帮助!欢迎收藏,分享给更多的需要的朋友学习~
一、mysqldump备份方式是采用逻辑备份。***的缺陷就是备份和恢复的速度都慢,对于一个50G的数据库而言,这个速度还是可以接受的,但是如果数据库非常大,那在使用mysqdump备份就不是太合适了。。
这时候就需要一种很好用又高效的工具,xtraback 就是其中的一款,号称免费版的innodb hotbackup
xtraback特点如下:
-
备份过程快速,可靠
-
备份过程不会打断正在执行的事务
-
能够基于压缩等功能节约磁盘空间和流量
-
自动实现备份检验
-
还原速度快
二、安装xtraback
1)下载xtraback
- wget https://www.percona.com/downloads/XtraBackup/Percona-XtraBackup-2.4.4/binary/tarball/percona-xtrabackup-2.4.4-Linux-x86_64.tar.gz
2)解压
- [root@master ~]# tar zxf percona-xtrabackup-2.4.4-Linux-x86_64.tar.gz
3)进入解压目录复制bin下的所有程序到/usr/bin下即可
- [root@master ~]# cd percona-xtrabackup-2.4.4-Linux-x86_64/
- [root@master percona-xtrabackup-2.4.4-Linux-x86_64]# cp bin/* /usr/bin/
xtraback是用于热备份innodb,xtradb表中数据的工具,支持在线热备份,可以在不加锁的情况下备份innodb数据表,不过此工具不能操作myisam引擎表
4)安装相关的插件
- yum install perl-DBI perl-DBD-MySQL perl-Time-HiRes perl-IO-Socket-SSL perl-TermReadKey.x86_64 perl-Digest-MD5 –y
5)下载percona-toolkit并安装
- wget https://www.percona.com/downloads/percona-toolkit/2.2.19/RPM/percona-toolkit-2.2.19-1.noarch.rpm
- [root@master ~]# rpm -ivh percona-toolkit-2.2.19-1.noarch.rpm
- warning: percona-toolkit-2.2.19-1.noarch.rpm: Header V4 DSA/SHA1 Signature, key ID cd2efd2a: NOKEY
- Preparing... ################################# [100%]
- Updating / installing...
- 1:percona-toolkit-2.2.19-1 ################################# [100%]
三、备份
方案一:xtrabackup完全备份+binlog增量备份 (需要开启bin-log日志)
创建备份目录
- [root@master ~]# mkdir -p /opt/mysqlbackup/{full,inc}
首先我们创一个test库,在test库中创建一个tb1的表,在tb1表中插入三行数据,如下:
插入数据后我们进行完全备份 如下:
- [root@master ~]# innobackupex --user=root --password=pwd123 /opt/mysqlbackup/full/
以上完全备份路径为我们刚刚创建的mysqlbackup目录下。
出现以下提示证明备份成功
备份后的文件如下:
至此全备完全成功,然后向mysql某个库插入几条数据,然后进行增量备份
对完全备份的后数据库更改进行二进制日志增量备份:
查看完全备份时binlog日志位置(position):
增量备份二进制文件:
- [root@master ~]# mysqlbinlog --start-position=1279 /usr/local/mysql/data/mysql-bin.000001 > /opt/mysqlbackup/inc/`date +%F`.sql
备份完成后,我们模拟数据库损坏,误删操作,如下
- [root@master ~]# rm -rf /usr/local/mysql/data/*
恢复数据库
首先恢复我们的完全备份,也就是tom1/2/3的数据 如下:
- [root@master ~]#innobackupex --copy-back /opt/mysqlbackup/full/2017-11-21_11-47-42/
出现以下提示证明还原成功
当数据恢复至DATADIR目录以后,还需要确保所有数据文件的属主和属组均为正确的用户,如mysql,否则,在启动mysqld之前还需要事先修改数据文件的属主和属组。如:
- # chown -R mysql:mysql /usr/local/mysql/data/
重启mysql服务查看是否还原成功
以上看出完全备份已经还原成功,因为我们在完全备份的时候插入了3行数据,那么接下来我们还原增量备份如下:
为了防止还原时产生大量的二进制日志,在还原时可临时关闭二进制日志后再还原:
随后我们验证是否还原成功!
此时我们已经全部恢复成功,以上通过binlog+xtrabackup工具来实现的备份,是不是感觉有点小麻烦。如感觉到麻烦请看-以下方案二。
二、xtrabackup完全备份+xtrabacup增量备份
测试环境准备
创建一个测试数据库,并创建一张表输入几行数据
以上操作解释:
创建了一个test库,在test库中创建了xx表,在xx表中插入了tom1和tom2的数据。
接下来执行完全备份如下:
- [root@master ~]# xtrabackup --defaultes-file=/etc/my.cnf --user=root --password='pwd123' --popt=3306 --backup --target-dir=/opt/mysqlbackup/full/full_incre_$(date +%Y%m%d_%H%M%S)
以上黑色部分是存放位置。出现以下证明备份成功
这时候我们再次插入数据,进行一次增量备份
备份***次增量如下:
[root@master ~]# xtrabackup --defaultes-file=/etc/my.cnf --user=root --password='pwd123' --popt=3306 --backup --target-dir=/opt/mysqlbackup/inc/inc_incre_$(date +%Y%m%d_%H%M%S) --incremental-basedir=/opt/mysqlbackup/full/full_incre_20171121_123051/
出现以下表示备份成功!
以上备份路径为:/opt/mysqlbackup/inc/我们可以查看备份的文件
接下来在xx表中再次插入数据,进行第二次增量备份
第二次增量备份如下:
- [root@master ~]# xtrabackup --defaultes-file=/etc/my.cnf --user=root --password='pwd123' --popt=3306 --backup --target-dir=/opt/mysqlbackup/inc/inc_incre_$(date +%Y%m%d_%H%M%S) --incremental-basedir=/opt/mysqlbackup/inc/inc_incre_20171121_124604/
出现以下提示证明备份成功
xtrabacup进行增量恢复
为了实现效果我把xx表删了
开始恢复完全备份如下:
- [root@master ~]# xtrabackup --defaultes-file=/etc/my.cnf --prepare --user=root --password="pwd123" --apply-log-only --target-dir=/opt/mysqlbackup/full/full_incre_20171121_123051
二、恢复***次增量(tom3)
- [root@master ~]# xtrabackup --defaultes-file=/etc/my.cnf --prepare --user=root --password="pwd123" --apply-log-only --target-dir=/opt/mysqlbackup/full/full_incre_20171121_123051 --incremental-dir=/opt/mysqlbackup/inc/inc_incre_20171121_124604/
三、恢复第二次增量
- [root@master ~]# xtrabackup --defaultes-file=/etc/my.cnf --prepare --user=root --password="pwd123" --apply-log-only --target-dir=/opt/mysqlbackup/full/full_incre_20171121_123051 --incremental-dir=/opt/mysqlbackup/inc/inc_incre_20171121_125202
恢复整个库
- [root@master ~]# xtrabackup --defaultes-file=/etc/my.cnf --prepare --user=root --password="pwd123" --target-dir=/opt/mysqlbackup/full/full_incre_20171121_123051
停止mysql数据库-开始rsync数据文件
- [root@master ~]# systemctl stop mysqld
- [root@master ~]# cd /opt/mysqlbackup/full/full_incre_20171121_123051/
- [root@master full_incre_20171121_123051]# rsync -rvt --exclude 'xtrabackup_checkpoints' --exclude 'xtrabackup_logfile' ./ /usr/local/mysql/data/
授予mysql访问权限
- [root@master ~]# chown -R mysql:mysql /usr/local/mysql/data/
启动mysql服务查看还原是否成功
1024程序员节日Happy
希望对您有所帮助,再见~
好了,本文到此结束,带大家了解了《删库跑路?这篇文章教你如何使用xtraback备份MySQL数据库》,希望本文对你有所帮助!关注golang学习网公众号,给大家分享更多数据库知识!
-
499 收藏
-
244 收藏
-
235 收藏
-
157 收藏
-
101 收藏
-
259 收藏
-
411 收藏
-
476 收藏
-
312 收藏
-
244 收藏
-
195 收藏
-
- 前端进阶之JavaScript设计模式
- 设计模式是开发人员在软件开发过程中面临一般问题时的解决方案,代表了最佳的实践。本课程的主打内容包括JS常见设计模式以及具体应用场景,打造一站式知识长龙服务,适合有JS基础的同学学习。
- 立即学习 542次学习
-
- GO语言核心编程课程
- 本课程采用真实案例,全面具体可落地,从理论到实践,一步一步将GO核心编程技术、编程思想、底层实现融会贯通,使学习者贴近时代脉搏,做IT互联网时代的弄潮儿。
- 立即学习 507次学习
-
- 简单聊聊mysql8与网络通信
- 如有问题加微信:Le-studyg;在课程中,我们将首先介绍MySQL8的新特性,包括性能优化、安全增强、新数据类型等,帮助学生快速熟悉MySQL8的最新功能。接着,我们将深入解析MySQL的网络通信机制,包括协议、连接管理、数据传输等,让
- 立即学习 497次学习
-
- JavaScript正则表达式基础与实战
- 在任何一门编程语言中,正则表达式,都是一项重要的知识,它提供了高效的字符串匹配与捕获机制,可以极大的简化程序设计。
- 立即学习 487次学习
-
- 从零制作响应式网站—Grid布局
- 本系列教程将展示从零制作一个假想的网络科技公司官网,分为导航,轮播,关于我们,成功案例,服务流程,团队介绍,数据部分,公司动态,底部信息等内容区块。网站整体采用CSSGrid布局,支持响应式,有流畅过渡和展现动画。
- 立即学习 484次学习