专栏首页技术面面观mysql备份还原方案xtrabackup
原创

mysql备份还原方案xtrabackup

摘要:mysql当数据库过大的时候,使用mysqldump的方式进行备份是一种非常慢的操作,500G的数据就够你备份一天一夜,我发现了一种mysql快速备份的方案,它使用文件存储的方式进行备份,支持全量和增量备份,这里所写为全量方式(如果可以接受备份开始到下次恢复之间的数据丢失时使用)。xtrabackup的备份速度很快,不管有多少的数据,备份速度完全是依赖于磁盘的读写速度,还支持压缩、不打断正在执行的事务、自动实现备份检验(用mysqldump会锁表,要加上可重复读--single-transaction才不会影响线上的程序写表,但是写表后的东西在还原的时候就会丢了,这也是全量备份的痛点)

特点

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

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

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

(4)自动实现备份检验

(5)还原速度快

准备mysql备份组件需要的安装包

检查服务器是centos6版本还是centos7+版本。选择安装包

	centos6/percona-xtrabackup/Percona-XtraBackup-2.4.12-r170eb8c-el6-x86_64-bundle.tar
	centos7/percona-xtrabackup/Percona-XtraBackup-2.4.12-r170eb8c-el7-x86_64-bundle.tar

安装包可以在此下载 : https://www.percona.com/downloads/XtraBackup/LATEST/

安装备份工具

<font color="red">以下所有操作如果是在集群下,要在一个主节点上操作,操作一次即可</font>,启动时设置主节点为被同步节点,集群的管理我们以后再讨论。

1. 上传并解压

假设当前系统是centos6+,使用Percona-XtraBackup-2.4.12-r170eb8c-el6-x86_64-bundle.tar包,拷贝到系统/tmp/backup_mariadb20181127目录下(没有则创建,日期写当天),使用tar xvf Percona-XtraBackup-2.4.12-r170eb8c-el6-x86_64-bundle.tar命令解压,你可以得到以下文件。

# pwd
/tmp/backup_mariadb20181127
# ls
Percona-XtraBackup-2.4.12-r170eb8c-el6-x86_64-bundle.tar
percona-xtrabackup-24-2.4.12-1.el6.x86_64.rpm
percona-xtrabackup-24-debuginfo-2.4.12-1.el6.x86_64.rpm  
percona-xtrabackup-test-24-2.4.12-1.el6.x86_64.rpm

2. 安装rpm包

执行以下命令

rpm -ivh --force --nodeps percona-xtrabackup-24-debuginfo-2.4.12-1.el6.x86_64.rpm  
rpm -ivh --force --nodeps percona-xtrabackup-24-2.4.12-1.el6.x86_64.rpm
rpm -ivh --force --nodeps percona-xtrabackup-test-24-2.4.12-1.el6.x86_64.rpm

3. 检查是否安装成功

按以下显示则安装成功

# rpm -qa | grep percona
percona-xtrabackup-test-24-2.4.12-1.el6.x86_64
percona-xtrabackup-24-2.4.12-1.el6.x86_64
percona-xtrabackup-24-debuginfo-2.4.12-1.el6.x86_64

开始备份

1. 执行命令开始备份

执行以下命令开始备份,其中/etc/my.cnf为mysql配置文件位置,10.123.2.4为mysql绑定的ip(写当前机器的ip),user1为用户名,123456Abc为密码,/tmp/backup_mariadb20181127为备份文件所在目录,所有按实际环境填写。此处我们只备份cloud库所以--databases库就不用改动了

innobackupex --defaults-file=/etc/my.cnf --host=10.123.2.4 --databases="cloud" --use-memory=500M --user=user1 --password=123456Abc /tmp/backup_mariadb20181127
  • 如果只需要备份其中一个或多个数据库,可以加参数--databases="cloud test",其中cloud和test是库名
  • 可以使用--use-memory= (例如: 1MB, 1M, 1GB, 1G)选项加速,在不指定内存大小的情况下,默认会占用100MB的内存。

2. 检查是否备份成功

最后一行显示completed OK! 则备份成功,在所执行的目录下(此处是/tmp/backup_mariadb20181127)会出现备份的文件

181127 11:56:48 completed OK!

可以看到文件结构,我们此处自动生成的备份文件夹名为2018-11-27_11-52-48,是一个以时间命名的文件夹

# ls
2018-11-27_11-52-48
 Percona-XtraBackup-2.4.12-r170eb8c-el6-x86_64-bundle.tar  percona-xtrabackup-24-2.4.12-1.el6.x86_64.rpm  percona-xtrabackup-24-debuginfo-2.4.12-1.el6.x86_64.rpm  percona-xtrabackup-test-24-2.4.12-1.el6.x86_64.rpm
# pwd
/tmp/backup_mariadb20181127

还原备份

1. 事务日志应用到备份

备份出的数据并不能直接使用,因为备份出的数据是不一致的,我们还需要将同时备份出的事务日志应用到备份中,才能得到一份完整、一致、可用的数据,xtrabackup称这一步操作为prepare,也就是还原数据前的"准备"工作。

 innobackupex --apply-log 2018-11-27_11-52-48/

在事务日志容量很大的情况下,可以使用--use-memory= (例如: 1MB, 1M, 1GB, 1G)选项加速,在不指定内存大小的情况下,默认会占用100MB的内存。

输出最后如下就为正确

181127 11:56:10 completed OK!

2. 恢复数据

方法一、此处使用该方法,适用于备份部分数据库的方法

数据目录在/data/mariadb/data,我们备份的数据库为cloud库。

进入mysql命令行mysql -A,删除cloud库drop database cloud;(如果无法进入命令行则到数据目录下直接干掉cloud文件夹,集群操作的话必须通过drop或者先停止集群,确定好主从模式)

执行命令

cd /data/mariadb/data
rm ib* -f
rm -f cloud
/etc/init.d/mysqld stop #关闭数据库
cd /tmp/backup_mariadb20181127/2018-11-27_11-52-48 #进入备份目录
cp ib* /data/mariadb/data
cp -R cloud /data/mariadb/data

方法二、先停止数据库服务/etc/init.d/mysqld stop,且对应的数据目录(此处是/data/mariadb/data)为空,如果不为空,手动删除,一般此方法针对全量备份的方法。

innobackupex  --datadir=/data/mariadb/data --copy-back /tmp/backup_mariadb20181127/2018-11-27_11-52-48

--copy-back:对应的目录就是我们准备好的可用数据的目录。此处为/tmp/backup_mariadb20181127/2018-11-27_11-52-48

--datadir:指定的目录就是还原后数据要存放的目录,如果my.cnf设置了datadir,可以省略--datadir,执行copyback时会读取my.cnf中的配置,datadir目录必须为空目录,如果不为空,手动删除。

3. 设置属主属组为mysql并启动

此时我们还不能启动mysql,因为我们是使用root用户拷贝的数据,所以数据目录中的数据文件的属主属组仍然为root,我们需要将这些文件的属主属组设置为mysql。

cd /data/mariadb/data
chown -R mysql.mysql *
chown -R mysql.mysql /data/mariadb/binlog
/etc/inid.d/mysqld start

引用

Xtrabackup 安装使用

xtrabackup 原理

原创声明,本文系作者授权云+社区发表,未经许可,不得转载。

如有侵权,请联系 yunjia_community@tencent.com 删除。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 如何用cmake编译

    CMake是一种跨平台编译工具,比make更为高级,使用起来要方便得多。CMake主要是编写CMakeLists.txt文件,然后用cmake命令将CMakeL...

    编程三分钟
  • docker部署redis实战

    Docker是一个用来管理容器的应用程序,而容器就是模拟运行应用程序所依赖环境的一个服务。一般一个容器内只安装一个程序,在容器内的应用程序会认为自己是机器上运行...

    编程三分钟
  • 三分钟学 Go 语言——函数深度解析(中)

    上回函数深度解析给大家聊了一些函数的基本知识,不知道还有没有人记得,不记得赶紧回去复习!

    编程三分钟
  • SoftMax回归详解

    Contents 1 关键词 2 引言 3 代价函数 4 softmax回归模型参数化的特点 5 权重衰减 6 softmax与logistics回归的关系 1...

    昱良
  • Spring Boot2 系列教程(二)创建 Spring Boot 项目的三种方式

    我最早是 2016 年底开始写 Spring Boot 相关的博客,当时使用的版本还是 1.4.x ,文章发表在 CSDN 上,阅读量最大的一篇有 43W+,如...

    江南一点雨
  • Selective Search算法与演示

    在对象检测RCNN模型中使用了SS(Selective Search)进行区域推荐,改进了传统图像检测进行全局开窗检测的高计算消耗,典型的对象检测网络RCNN的...

    OpenCV学堂
  • Selective Search算法与演示

    在对象检测RCNN模型中使用了SS(Selective Search)进行区域推荐,改进了传统图像检测进行全局开窗检测的高计算消耗,典型的对象检测网络RCNN的...

    小小詹同学
  • 创建一个 Spring Boot 项目,你会几种方法?

    我最早是 2016 年底开始写 Spring Boot 相关的博客,当时使用的版本还是 1.4.x ,文章发表在 CSDN 上,阅读量最大的一篇有 42W+,如...

    江南一点雨
  • 干货|最新版 Spring Boot2.1.5 教程+案例合集

    最近发了一系列的 Spring Boot 教程,但是发的时候没有顺序,有小伙伴反映不知道该从哪篇文章开始看起,刚好最近工作告一个小小段落,松哥就把这些资料按照学...

    江南一点雨
  • PHP源码目录结构

    根目录: / 这个目录包含的东西比较多,主要包含一些说明文件以及设计方案。 其实项目中的这些README文件是非常值得阅读的例如: /README.PHP4-...

    joshua317

扫码关注云+社区

领取腾讯云代金券