阿里云-云小站(无限量代金券发放中)
【腾讯云】云服务器、云数据库、COS、CDN、短信等热卖云产品特惠抢购

Xtrabackup实现MySQL备份

251次阅读
没有评论

共计 5774 个字符,预计需要花费 15 分钟才能阅读完成。

一.xtrabackup 介绍

Xtrabackup 是一个对 InnoDB 做数据备份的工具,支持在线热备份(备份时不影响数据读写)它由 percona 提供的 MySQL 数据库备份工具,据官方介绍,这也是世界上惟一一款开源的能够对 innodb 和 xtradb 数据库进行热备的工具。

特点:
(1)备份过程快速、可靠;
(2)备份过程不会打断正在执行的事务;
(3)能够基于压缩等功能节约磁盘空间和流量;
(4)自动实现备份检验;
(5)还原速度快;
注意:xtrabackup 只能备份 InnoDB 和 XtraDB 两种数据表,而不能备份 MyISAM 数据表 但是 innobackupex:是将 xtrabackup 进行封装的 perl 脚本,提供了备份 myisam 表的能力

二. 下载安装 xtrabackup

2.1 下载 xtrabackup 的 rpm 包

https://www.percona.com/downloads/XtraBackup/LATEST/

2.2 安装相关依赖包

[root@zha ~]# yum install -y prel-DBD-MySQL perl-DBI perl-Time-HiRes libaio*

2.3 安装 xtrabackup 的 rpm 包

[root@zha ~]# rpm -ivh percona-xtrabackup-24-2.4.11-1.el6.x86_64.rpm
warning: percona-xtrabackup-24-2.4.11-1.el6.x86_64.rpm: Header V4 DSA/SHA1 Signature, key ID cd2efd2a: NOKEY
Preparing… ########################################### [100%]
1:percona-xtrabackup-24 ########################################### [100%]

如果报错:
[root@zha ~]# rpm -ivh percona-xtrabackup-24-2.4.11-1.el6.x86_64.rpm
warning: percona-xtrabackup-24-2.4.11-1.el6.x86_64.rpm: Header V4 DSA/SHA1 Signature, key ID cd2efd2a: NOKEY
error: Failed dependencies:
libev.so.4()(64bit) is needed by percona-xtrabackup-24-2.4.11-1.el6.x86_64
提示缺少 libev 的 rpm 包
http://rpm.pbone.net/index.php3?stat=26&dist=74&size=74692&name=libev-4.15-1.el6.rf.x86_64.rpm(livev 包下载地址)
安装 libev 包再安装 xtrabackup 即可
[root@zha ~]# rpm -ivh libev-4.15-1.el6.rf.x86_64.rpm
warning: libev-4.15-1.el6.rf.x86_64.rpm: Header V3 DSA/SHA1 Signature, key ID 6b8d79e6: NOKEY
Preparing… ########################################### [100%]
1:libev ########################################### [100%]

2.4 查看安装结果:

[root@zha ~]# rpm -qa | grep xtrabackup
percona-xtrabackup-24-2.4.11-1.el6.x86_64
[root@zha ~]# rpm -ql percona-xtrabackup-24-2.4.11-1.el6.x86_64
/usr/bin/innobackupex
/usr/bin/xbcloud
/usr/bin/xbcloud_osenv
/usr/bin/xbcrypt
/usr/bin/xbstream
/usr/bin/xtrabackup
/usr/lib64/xtrabackup/plugin/keyring_file.so
/usr/lib64/xtrabackup/plugin/keyring_vault.so
/usr/share/doc/percona-xtrabackup-24-2.4.11
/usr/share/doc/percona-xtrabackup-24-2.4.11/COPYING
/usr/share/man/man1/innobackupex.1.gz
/usr/share/man/man1/xbcrypt.1.gz
/usr/share/man/man1/xbstream.1.gz
/usr/share/man/man1/xtrabackup.1.gz

Xtrabackup 中主要包含两个工具:
xtrabackup:是用于热备份 innodb, xtradb 表中数据的工具,不能备份其他类型的表,也不能备份数据表结构;
innobackupex:是将 xtrabackup 进行封装的 perl 脚本,提供了备份 myisam 表的能力。

三. 使用 xtrabackup 对 MySQL 完全备份

3.1 完全备份

语法:innobackupex –user= 用户名 –password= 密码 备份目录位置
如果报错:Can’t load ‘/usr/local/lib64/perl5/auto/DBD/mysql/mysql.so’ for module DBD::mysql: libmysqlclient.so.18: 无法打开共享对象 at /usr/bin/innobackupex line 18
需要拷贝 libmysqlclient.so.18 至 /usr/lib64
cp /usr/local/mysql/lib/libmysqlclient.so.18 /usr/lib64/
# 完全备份到 /mysql_backup/ 目录下
[root@zha ~]# innobackupex –user=root /mysql_backup/
180504 17:28:28 completed OK!(出现 ok 即可)
备份后的文件:在备份的同时,备份数据会在备份目录下创建一个以当前日期时间为名字的目录存放备份文件。

查看备份后的数据
Xtrabackup 实现 MySQL 备份

 

各文件说明:
(1)xtrabackup_checkpoints —— 备份类型(如完全或增量)、备份状态(如是否已经为 prepared 状态)和 LSN(日志序列号)范围信息;
每个 InnoDB 页 (通常为 16k 大小) 都会包含一个日志序列号,即 LSN。LSN 是整个数据库系统的系统版本号,每个页面相关的 LSN 能够表明此页面最近是如何发生改变的。
(2)xtrabackup_binlog_info —— mysql 服务器当前正在使用的二进制日志文件及至备份这一刻为止二进制日志事件的位置。
(3)xtrabackup_binlog_pos_innodb —— 二进制日志文件及用于 InnoDB 或 XtraDB 表的二进制日志文件的当前 position。
(4)xtrabackup_binary —— 备份中用到的 xtrabackup 的可执行文件;
(5)backup-my.cnf —— 备份命令用到的配置选项信息;

在使用 innobackupex 进行备份时,还可以使用 –no-timestamp 选项来阻止命令自动创建一个以时间命名的目录;如此一来,innobackupex 命令将会创建一个 BACKUP-DIR 目录来存储备份数据。
准备 (prepare) 一个完全备份
一般情况下,在备份完成后,数据尚且不能用于恢复操作,因为备份的数据中可能会包含尚未提交的事务或已经提交但尚未同步至数据文件中的事务。因此,此时数据文件仍处理不一致状态。“准备”的主要作用正是通过回滚未提交的事务及同步已经提交的事务至数据文件也使得数据文件处于一致性状态。

[root@zha 2018-05-04_17-28-25]# innobackupex –apply-log /mysql_backup/2018-05-04_17-28-25/
180504 17:38:38 completed OK!
在实现“准备”的过程中,innobackupex 通常还可以使用–use-memory 选项来指定其可以使用的内存的大小,默认通常为 100M。如果有足够的内存可用,可以多划分一些内存给 prepare 的过程,以提高其完成速度。

3.2 完全备份恢复

# 复制目录到 /zha 下
[root@zha ~]# cp -r /mysql_backup/2018-05-04_17-28-25/ /zha(以防玩脱)

# 模拟数据库故障(关闭数据库并删除数据文件)
[root@zha ~]# /etc/init.d/mysqld stop
Shutting down MySQL. [OK]
[root@zha ~]# cd /usr/local/mysql/data/
[root@zha data]# ls
ibdata1 mysql-bin.000001 performance_schema
ib_logfile0 mysql-bin.000002 test
ib_logfile1 mysql-bin.000003 zha
mysql mysql-bin.index zha.err
[root@zha data]# rm -rf *
[root@zha data]# ls(数据已经没有了)

# 恢复
[root@zha data]# innobackupex –copy-back /mysql_backup/2018-05-04_17-28-25/
180504 18:04:14 completed OK!
如果报错 Error: datadir must be specified. 意思是(在默认配置文件 /etc/my.cnf 中,没有找到 datadir 配置项)

vim /etc/my.cnf # 加入 datadir 配置项即可
datadir = /usr/local/mysql/data

# 再次查看 /data 目录,数据已经恢复
[root@zha data]# ls
ibdata1 performance_schema
ib_logfile0 xtrabackup_info
ib_logfile1 xtrabackup_master_key_id
ibtmp1 zha
mysql

# 修改权限启动 mysql
[root@zha ~]# chown -R mysql:mysql /usr/local/mysql/data/
[root@zha ~]# /etc/init.d/mysqld start
Starting MySQL.. [OK]

四. 使用 xtrabackup 对 MySQL 增量备份

4.1 创建测试库、表,然后插入测试数据

mysql> create database test character set utf8;
Query OK, 1 row affected (0.00 sec)
mysql> use test;
Database changed
mysql> create table test (id int(10) not null,name varchhar(20));
Query OK, 0 rows affected (0.03 sec)

mysql> insert into test values(1,’chenjiaxin’);
Query OK, 1 row affected (0.01 sec)
mysql> insert into test values(1,’ 陈嘉欣 ’);
Query OK, 1 row affected (0.00 sec)
mysql> select * from test;
+—-+————+
| id | name |
+—-+————+
| 1 | chenjiaxin |
| 1 | 陈嘉欣 |
+—-+————+
2 rows in set (0.00 sec)
mysql> exit;
Bye

# 第一次完全备份
[root@zha ~]# innobackupex –user=root –database=test –no-timestamp /mysql_backup/
180504 18:35:39 completed OK!

# 第二次添加数据
mysql> use test;
Database changed
mysql> insert into test values(2,’test’);
Query OK, 1 row affected (0.04 sec)

mysql> exit;
Bye

# 第一次增量备份
[root@zha mysql_backup]# innobackupex –user=root –database=test –no-timestamp –incremental-basedir=/mysql_backup/ –incremental /test2
180504 18:48:24 completed OK!

# –incremental-basedir=/data/backup_db/test_incre 第一次增备指定全备路径
# –incremental 参数说明这是一次增备,并指定增备路径

4.2 统计大小,验证是否为增量备份

[root@zha /]# du -sh /mysql_backup/
69M /mysql_backup/
[root@zha /]# du -sh /test2/
1.5M /test2/
至此增量备份已经完成!

注意:第二次增备是在第一次增备的基础上,所以 –incremental-basedir 指定的是第一次增备目录,最后指定的第二次增备目录

[root@zha /]# cd /test2/
[root@zha test2]# cat xtrabackup_checkpoints
backup_type = incremental # backup_type 提示:这是一次增备
from_lsn = 1599830 #from_lsn 提示:从上次结束开始 1599380
to_lsn = 1600863 #from_lsn 提示:到 1600863 结束
last_lsn = 1600863
compact = 0
recover_binlog_info = 0

正文完
星哥玩云-微信公众号
post-qrcode
 0
星锅
版权声明:本站原创文章,由 星锅 于2022-01-22发表,共计5774字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
【腾讯云】推广者专属福利,新客户无门槛领取总价值高达2860元代金券,每种代金券限量500张,先到先得。
阿里云-最新活动爆款每日限量供应
评论(没有评论)
验证码
【腾讯云】云服务器、云数据库、COS、CDN、短信等云产品特惠热卖中