mysql备份还原方案xtrabackup

小熊 MySQL评论1,010字数 3745阅读12分29秒阅读模式

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/

安装备份工具

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

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 原理

weinxin
公众号
扫码订阅最新深度技术文,回复【资源】获取技术大礼包
MySQL最后更新:2020-8-31
小熊