前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >mysql备份还原方案xtrabackup

mysql备份还原方案xtrabackup

原创
作者头像
机智的程序员小熊
发布2019-01-16 20:19:24
1.5K0
发布2019-01-16 20:19:24
举报
文章被收录于专栏:技术面面观技术面面观

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

特点

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

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

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

(4)自动实现备份检验

(5)还原速度快

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

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

代码语言:txt
复制
	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命令解压,你可以得到以下文件。

代码语言:txt
复制
# 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包

执行以下命令

代码语言:txt
复制
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. 检查是否安装成功

按以下显示则安装成功

代码语言:txt
复制
# 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库就不用改动了

代码语言:txt
复制
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)会出现备份的文件

代码语言:txt
复制
181127 11:56:48 completed OK!

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

代码语言:txt
复制
# 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,也就是还原数据前的"准备"工作。

代码语言:txt
复制
 innobackupex --apply-log 2018-11-27_11-52-48/

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

输出最后如下就为正确

代码语言:txt
复制
181127 11:56:10 completed OK!

2. 恢复数据

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

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

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

执行命令

代码语言:txt
复制
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)为空,如果不为空,手动删除,一般此方法针对全量备份的方法。

代码语言:txt
复制
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。

代码语言:txt
复制
cd /data/mariadb/data
chown -R mysql.mysql *
chown -R mysql.mysql /data/mariadb/binlog
/etc/inid.d/mysqld start

引用

Xtrabackup 安装使用

xtrabackup 原理

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

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

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

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

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 特点
  • 准备mysql备份组件需要的安装包
  • 安装备份工具
    • 1. 上传并解压
      • 2. 安装rpm包
        • 3. 检查是否安装成功
        • 开始备份
          • 1. 执行命令开始备份
            • 2. 检查是否备份成功
            • 还原备份
              • 1. 事务日志应用到备份
                • 2. 恢复数据
                  • 3. 设置属主属组为mysql并启动
                  • 引用
                  相关产品与服务
                  云数据库 SQL Server
                  腾讯云数据库 SQL Server (TencentDB for SQL Server)是业界最常用的商用数据库之一,对基于 Windows 架构的应用程序具有完美的支持。TencentDB for SQL Server 拥有微软正版授权,可持续为用户提供最新的功能,避免未授权使用软件的风险。具有即开即用、稳定可靠、安全运行、弹性扩缩等特点。
                  领券
                  问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档