Mysql备份工具Xtrabackup
Xtrabackup是一个开源的免费的热备工具,在Xtrabackup包中主要有Xtrabackup和innobackupex两个工具。其中Xtrabackup只能备份InnoDB和XtraDB两种引擎; innobackupex则是封装了Xtrabackup,同时增加了备份MyISAM引擎的功能。
Xtrabackup备份时不能备份表结构、触发器等等,也不能智能区分.idb数据文件。另外innobackupex还不能完全支持增量备份,需要和xtrabackup结合起来实现全备的功能。
(1).安装xtrbackup
1)下载安装包
网址是https://www.percona.com/downloads/,然后网页查找Xtrabackup,下载自己需要的版本,就是下载速度有点慢。我这里使用的是2.4.14版本。
然后下载依赖包,网址是http://rpmfind.net/linux/atrpms/el6-x86_64/atrpms/stable/libev-4.04-2.el6.x86_64.rpm。
这两个可以下载好上传到CentOS服务器,也可以使用wget直接在服务器上下载。
2)解压安装
[root@youxi1 ~]# ls
anaconda-ks.cfg mysql-5.7.16-1.el7.x86_64.rpm-bundle.tar
libev-4.04-2.el6.x86_64.rpm Percona-XtraBackup-2.4.14-ref675d4-el7-x86_64-bundle.tar
Mysql
[root@youxi1 ~]# rpm -ivh libev-4.04-2.el6.x86_64.rpm
警告:libev-4.04-2.el6.x86_64.rpm: 头V4 DSA/SHA1 Signature, 密钥 ID 66534c2b: NOKEY
准备中... ################################# [100%]
正在升级/安装...
1:libev-4.04-2.el6 ################################# [100%]
[root@youxi1 ~]# tar -xf Percona-XtraBackup-2.4.14-ref675d4-el7-x86_64-bundle.tar
[root@youxi1 ~]# ls
anaconda-ks.cfg Percona-XtraBackup-2.4.14-ref675d4-el7-x86_64-bundle.tar
libev-4.04-2.el6.x86_64.rpm percona-xtrabackup-24-2.4.14-1.el7.x86_64.rpm
Mysql percona-xtrabackup-24-debuginfo-2.4.14-1.el7.x86_64.rpm
mysql-5.7.16-1.el7.x86_64.rpm-bundle.tar percona-xtrabackup-test-24-2.4.14-1.el7.x86_64.rpm
[root@youxi1 ~]# yum -y install percona-xtrabackup-24-2.4.14-1.el7.x86_64.rpm //这里用yum安装,因为还有其他的依赖包
3)配置文件
修改配置文件/etc/my.cnf,保证[mysqld]模块存在参数datadir=/var/lib/mysql(指向数据目录),因为xtrbackup是根据/etc/my.cnf配置文件来获取需要备份的文件。然后重启mysqld。
(2).xtrbackup的使用
一般使用的是innobackupex脚本,因为innobackupex是perl脚本对xtrbackup的封装和功能扩展。
1)用户权限说明
在备份数据库时会涉及到两个用户:系统用户与数据库内部的用户。
系统用户需要在datadir(配置文件内设置的目录)上具有读写执行权限(rwx)。而数据库内部用户需要:RELOAD和LOCK TABLES权限,为了执行FLUSH TABLES WITH READ LOCK;REPLICATION CLIENT权限,为了获取binary log(二进制日志文件)位置;CREATE TABLESPACE权限,为了导入表,用户表级别的恢复;SUPER权限,为了在slave环境下备份用来启动和关闭slave线程。
2)常用命令格式和常用参数
命令格式:
innobackupex [参数] [目的地址|源地址]
常用参数:
--user=[数据库用户] 以什么用户身份进行操作
--password=[密码] 数据库用户的密码
--port=[端口号] 数据库的端口号,默认3306
--stream=[tar|xbstream] 打包(数据流)
--defaults-file=[配置文件] 指定默认配置文件,默认读取/etc/my.cnf
--no-timestamp 不创建时间戳文件,而改用目的地址(可以自动创建)
--copy-back 备份还原的主要选项
--incremental 使用增量备份,默认使用的完整备份
--incremental-basedir=[地址] 与--incremental选项联合使用,该参数指定上一级备份的地址来做增量备份
3)完整备份和还原
完整备份
[root@youxi1 ~]# innobackupex --user=root --password=123456 ./db_backup/ //这个会有大量输出信息
[root@youxi1 ~]# innobackupex --user=root --password=123456 ./db_backup/ 2>>./db_backup/backup.log //如果不想要输出信息,可以将输出信息重定向到指定文件或黑洞文件中
[root@youxi1 ~]# ls ./db_backup/
2019-06-16_15-49-44 2019-06-16_15-51-23 backup.log
[root@youxi1 ~]# ls ./db_backup/2019-06-16_15-49-44/
backup-my.cnf ibdata1 performance_schema xtrabackup_checkpoints xtrabackup_logfile
ib_buffer_pool mysql sys xtrabackup_info
[root@youxi1 ~]# innobackupex --user=root --password=123456 --no-timestamp ./db_backup/test/ 2>>./db_backup/backup.log //不使用时间戳创建目录,可自动创建目的地址
[root@youxi1 ~]# ls ./db_backup/
2019-06-16_15-49-44 2019-06-16_15-51-23 backup.log test
[root@youxi1 ~]# ls ./db_backup/test/
backup-my.cnf ibdata1 performance_schema xtrabackup_checkpoints xtrabackup_logfile
ib_buffer_pool mysql sys xtrabackup_info
还原,注意:innobackupex -copy-back不会覆盖已存在的文件。而且还原时需要先关闭服务,如果服务是启动的,那么就不能还原到datadir
[root@youxi1 ~]# systemctl stop mysqld
[root@youxi1 ~]# rm -rf /var/lib/mysql/* //危险操作,请在测试环境测试
[root@youxi1 ~]# innobackupex --copy-back ./db_backup/2019-06-16_15-49-44/ 2>>./db_backup/copyback.log
[root@youxi1 ~]# ll /var/lib/mysql
总用量 12324
-rw-r----- 1 root root 292 6月 16 17:08 ib_buffer_pool
-rw-r----- 1 root root 12582912 6月 16 17:08 ibdata1
drwxr-x--- 2 root root 4096 6月 16 17:08 mysql
drwxr-x--- 2 root root 8192 6月 16 17:08 performance_schema
drwxr-x--- 2 root root 8192 6月 16 17:08 sys
-rw-r----- 1 root root 423 6月 16 17:08 xtrabackup_info
[root@youxi1 ~]# chown -R mysql:mysql /var/lib/mysql //重新授权,否则mysqld无法启动
[root@youxi1 ~]# systemctl start mysqld
[root@youxi1 ~]# mysql -uroot -p123456
mysql: [Warning] Using a password on the command line interface can be insecure.
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 2
Server version: 5.7.26 MySQL Community Server (GPL) Copyright (c) 2000, 2019, Oracle and/or its affiliates. All rights reserved. Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners. Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. mysql> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| performance_schema |
| sys |
+--------------------+
4 rows in set (0.00 sec)
4)增量备份和还原
增量备份的实现,依赖于innodb页上面的LSN(log sequence number),每次对数据库的修改都会导致LSN自增。增量备份会复制指定LSN<日志序列号>之后的所有数据页。
查看完整备份的LSN
[root@youxi1 ~]# cat ./db_backup/2019-06-16_15-49-44/xtrabackup_checkpoints
backup_type = full-backuped //代表完整备份
from_lsn = 0
to_lsn = 2525919
last_lsn = 2525928
compact = 0
recover_binlog_info = 0
flushed_lsn = 2525928
创建一些数据,然后以2019-06-16_15-49-44时间戳创建第一个增量备份,并查看LSN
[root@youxi1 ~]# mysql -uroot -p123456
mysql> create database test_db;
Query OK, 1 row affected (0.00 sec) mysql> use test_db;
Database changed
mysql> create table user_tb(id int,name varchar(20));
Query OK, 0 rows affected (0.01 sec) mysql> insert into user_tb values(1,'zhangsan');
Query OK, 1 row affected (0.00 sec) mysql> exit
Bye
[root@youxi1 ~]# innobackupex -uroot -p123456 --incremental --incremental-basedir=./db_backup/2019-06-16_15-49-44/ ./db_backup/ 2>>./db_backup/backup.log
[root@youxi1 ~]# ls db_backup/
2019-06-16_15-49-44 2019-06-16_15-51-23 2019-06-16_17-26-54 backup.log copyback.log test
[root@youxi1 ~]# cat db_backup/2019-06-16_17-26-54/xtrabackup_checkpoints
backup_type = incremental //表示增量备份
from_lsn = 2525919
to_lsn = 2530689
last_lsn = 2530698
compact = 0
recover_binlog_info = 0
flushed_lsn = 2530698
再创建一些数据,以上一个增量备份创建新的增量备份,并查看LSN
[root@youxi1 ~]# mysql -u root -p123456
mysql> use test_db;
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A Database changed
mysql> insert into user_tb values(2,'lisi');
Query OK, 1 row affected (0.00 sec) mysql> exit
Bye
[root@youxi1 ~]# innobackupex --user=root --password=123456 --incremental --incremental-basedir=db_backup/2019-06-16_17-26-54/ ./db_backup/ 2>>./db_backup/backup.log
[root@youxi1 ~]# ls db_backup/
2019-06-16_15-49-44 2019-06-16_17-26-54 backup.log test
2019-06-16_15-51-23 2019-06-16_17-40-13 copyback.log
[root@youxi1 ~]# cat db_backup/2019-06-16_17-40-13/xtrabackup_checkpoints
backup_type = incremental
from_lsn = 2530689
to_lsn = 2530892
last_lsn = 2530901
compact = 0
recover_binlog_info = 0
flushed_lsn = 2530901
增量备份的还原就比较麻烦了:
第一步,从完整备份一步步升上来。首先是完整备份,innobackupex --apply-log --redo-only [完整备份的地址]。接着是除了想要还原到的增量备份,都需要innobackupex --apply-log --redo-only [完整备份的地址] --incremental-dir=[第1次到第n-1次增量备份地址],一个个执行过去。然后想要还原的增量备份innobackupex --apply-log [完整备份的地址] --incremental-dir=[第n次增量备份地址]。这时所有需要的日志就到了完整备份目录下,最后执行innobackupex --apply-log [完整备份的地址],将未完成的日志执行。
第二步、停止mysqld,恢复数据,恢复目录及文件权限,启动mysqld,检查是否正常。
还原实例:
[root@youxi1 ~]# innobackupex --apply-log --redo-only db_backup/2019-06-16_15-49-44/ 2>>db_backup/copyback.log
[root@youxi1 ~]# innobackupex --apply-log --redo-only db_backup/2019-06-16_15-49-44/ --incremental-dir=db_backup/2019-06-16_17-26-54/ 2>>db_backup/copyback.log
[root@youxi1 ~]# innobackupex --apply-log db_backup/2019-06-16_15-49-44/ --incremental-dir=db_backup/2019-06-16_17-40-13/ 2>>db_backup/copyback.log
[root@youxi1 ~]# innobackupex --apply-log db_backup/2019-06-16_15-49-44/ 2>>db_backup/copyback.log
[root@youxi1 ~]# systemctl stop mysqld
[root@youxi1 ~]# rm -rf /var/lib/mysql/* //危险操作
[root@youxi1 ~]# innobackupex --copy-back db_backup/2019-06-16_15-49-44/ 2>db_backup/copyback.log
[root@youxi1 ~]# chown -R mysql:mysql /var/lib/mysql/
[root@youxi1 ~]# systemctl start mysqld
[root@youxi1 ~]# mysql -uroot -p123456
mysql> use test_db;
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A Database changed
mysql> select * from user_tb;
+------+----------+
| id | name |
+------+----------+
| 1 | zhangsan |
| 2 | lisi |
+------+----------+
2 rows in set (0.00 sec)
5)--stream选项,数据流压缩
注意:使用--stream选项时,会输出打包的数据流,并不会直接生成打包文件,此时需要使用重定向或其他命令对数据流进行处理。
例如1:使用重定向生成压缩文件
[root@mhaSpareMaster22 ~]# mkdir /db_backup
//将标准输出重定向为tar文件,将标准错误重定向到日志文件
[root@mhaSpareMaster22 ~]# innobackupex --databases=test_db --user=root --password=123456 --stream=tar /db_backup/
>/db_backup/`date +%F`.tar 2> /db_backup/backup.log
[root@mhaSpareMaster22 ~]# ls /db_backup/
2019-09-29.tar backup.log
[root@mhaSpareMaster22 ~]# cd /db_backup/
//注意:解压的时候是散的,没有文件夹
[root@mhaSpareMaster22 db_backup]# tar xf 2019-09-29.tar
[root@mhaSpareMaster22 db_backup]# ls
2019-09-29.tar ib_buffer_pool xtrabackup_binlog_info xtrabackup_logfile
backup.log ibdata1 xtrabackup_checkpoints
backup-my.cnf test_db xtrabackup_info
例如2:使用ssh和cat组合命令,直接备份到其他服务器上
[root@mhaSpareMaster22 ~]# ssh-keygen
[root@mhaSpareMaster22 ~]# ssh-copy-id 192.168.5.70
[root@mhaSpareMaster22 ~]# innobackupex --databases=test_db --user=root --password=123456 --stream=tar 2> /db_backup/backup.log
| ssh 192.168.5.70 "cat - > /`date +%F`.tar "
[root@mhaSpareMaster22 ~]# ssh 192.168.5.70
[root@Zabbix70 ~]# ls / //可以看到确实存在打包文件了
2019-09-29.tar boot etc lib media opt root sbin sys usr
bin ceph dev home lib64 mnt proc run srv tmp var
[root@Zabbix70 ~]# mkdir /db
[root@Zabbix70 /]# tar xf /2019-09-29.tar -C /db/ //解压下来看看
[root@Zabbix70 /]# ls /db
backup-my.cnf ibdata1 xtrabackup_binlog_info xtrabackup_info
ib_buffer_pool test_db xtrabackup_checkpoints xtrabackup_logfile
[root@Zabbix70 ~]# exit
登出
Connection to 192.168.5.70 closed.
例如3:使用gzip再压缩一下
[root@mhaSpareMaster22 ~]# rm -rf /db_backup/*
[root@mhaSpareMaster22 ~]# innobackupex --databases=test_db --user=root --password=123456 --stream=tar /db_backup/
2> /db_backup/backup.log | gzip > /db_backup/`date +%F`.tar.gz
[root@mhaSpareMaster22 ~]# ls /db_backup/
2019-09-29.tar.gz backup.log
[root@mhaSpareMaster22 ~]# tar zxf /db_backup/2019-09-29.tar.gz -C /db_backup/
[root@mhaSpareMaster22 ~]# ls /db_backup/ //可以看到也能正常解压
2019-09-29.tar.gz ib_buffer_pool xtrabackup_binlog_info xtrabackup_logfile
backup.log ibdata1 xtrabackup_checkpoints
backup-my.cnf test_db xtrabackup_info
Mysql备份工具Xtrabackup的更多相关文章
- mysql备份工具 :mysqldump mydumper Xtrabackup 原理
备份是数据安全的最后一道防线,对于任何数据丢失的场景,备份虽然不一定能恢复百分之百的数据(取决于备份周期),但至少能将损失降到最低.衡量备份恢复有两个重要的指标:恢复点目标(RPO)和恢复时间目标(R ...
- MySQL备份工具之mysqldump使用
MySQL备份工具之mysqldump使用说明 一.备份分类 根据能否停用数据库,将备份类型分为: 1. 冷备:数据库服务停止后备份 2. 温备:只能对数据库进行读操作,不能进行写操作 3. 热备:在 ...
- mysql备份工具innobackupex,xtrabackup-2.1的原理和安装
mysql备份工具innobackupex,xtrabackup-2.1的原理和安装 http://bbs.2cto.com/read.php?tid=310496 一.Xtrabackup介绍 1. ...
- Mysql备份工具xtraback全量和增量测试
Mysql备份工具xtraback全量和增量测试 xtrabackup 是 percona 的一个开源项目,可以热备份innodb ,XtraDB,和MyISAM(会锁表) 官方网址http:// ...
- Mysql备份工具比较
Mysql备份工具比较 大 | 中 | 小 [ 2012/12/25 12:10 | by Sonic ] 1. 使用automysqlbackup http://sourceforge.net/pr ...
- mysql和mariadb备份工具xtrabackup和mariabackup(mariadb上版本必须用这个)
简介 xtraBackup(PXB) 工具是 Percona 公司用 perl 语言开发的一个用于 MySQL 数据库物理热备的备份工具,支持 MySQl(Oracle).Percona Server ...
- mysql数据库备份工具xtrabackup
1.下载二进制安装包 其他高版本测试缺少依赖 2.xtrabackup参数说明 简介: Xtrabackup是一个对InnoDB做数据备份的工具,支持在线热备份(备份时不影响数据读写),是商业备份工 ...
- shell编写mysql备份工具
如需转载,请经本人同意. 这是之前写的一个备份脚本,调用的备份工具是xtrabackup 编写思路是:每周一全备份,备份后提取lSN号,对备份文件进行压缩,其余时候在LSN的基础上进行增量备份,并对3 ...
- MySQL备份恢复工具Xtrabackup
参考文档https://www.cnblogs.com/youkanyouxiao/p/8335173.html Xtrabackup介绍 Xtrabackup是由percona开源的免费数据库热备 ...
随机推荐
- 是什么是FBC CBV
- FBV url - 函数 - CBV url - view
- vue quill使用&quill 自定义图片上传&自定义mp4 更换标签
pluins 创建quill 目录 创建文件video.js import { Quill } from 'vue-quill-editor' // 源码中是import直接倒入,这里要用Quill. ...
- navigator对象及属性(userAgent)(扩展)
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- LeetCode 320. Generalized Abbreviation
原题链接在这里:https://leetcode.com/problems/generalized-abbreviation/ 题目: Write a function to generate the ...
- <load-on-startup>1</load-on-startup>的作用
1)load-on-startup元素标记容器是否在启动的时候就加载这个servlet(实例化并调用其init()方法).2)它的值必须是一个整数,表示servlet应该被载入的顺序3)当值为0或者大 ...
- Greenplum 调优--数据倾斜排查(一)
对于分布式数据库来说,QUERY的运行效率取决于最慢的那个节点. 当数据出现倾斜时,某些节点的运算量可能比其他节点大.除了带来运行慢的问题,还有其他的问题,例如导致OOM,或者DISK FULL等问题 ...
- Linux操作系统常用命令合集——第六篇-压缩和归档操作(16个命令)
1.gzip [命令作用] 压缩和解压缩文件 gzip/guzip/zcat zcat:不显式展开的前提下查看文本文件内容 zdiff/zgrep/zless/zmore [命令语法] gzip ...
- leetcode解题报告(18):Contains Duplicate
描述 Given an array of integers, find if the array contains any duplicates. Your function should retur ...
- 国外最受欢迎的BT-磁力网站
1.海盗湾 The Pirate Bay 2.KickAssTorrents 3.Torrentz 4.zooqle 5.SumoTorrent 6.TorrentDownloads 7.Rarbg ...
- 如何在一个function里面设置一个全局的变量?
答:解决方法是在function的开始插入一个global声明: def f() global x