Loading [MathJax]/jax/input/TeX/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >MySQL[3] 在线热备工具Xtrab

MySQL[3] 在线热备工具Xtrab

作者头像
py3study
发布于 2020-01-07 07:20:41
发布于 2020-01-07 07:20:41
2.5K00
代码可运行
举报
文章被收录于专栏:python3python3
运行总次数:0
代码可运行

mysqldump是一种逻辑备份方式,将数据转换成sql文件,其最大的缺陷就是备份和恢复时间很长,对于一个小于10G的数据库而言,这个速度还是可以接受的,但是如果数据库较大,那在使用mysqldump备份就非常不合适了。

lvm是一种采用逻辑卷快照功能对数据进行备份,可以实现几乎热备,但是备份过程较为复杂(来回切换终端),很难用shell脚本直接实现,不过现在似乎有个工具mylvmbackup可以实现自动化备份,但是没有尝试过,改天我也试试。

Xtrabackup对MyISAM表只能实现温备,并且不支持增量备份,所以每次对MyISAM表备份都是全备

XtraBackup更多高级特性通常只能在innodb存储引擎上实现,而且高级特性还都依赖于mysql数据库对innodb引擎实现了单独表空间,否则没办法实现单表或单库导出

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
mysql> show global variables like '%innodb_file_per_table%';
+-----------------------+-------+
| Variable_name         | Value |
+-----------------------+-------+
| innodb_file_per_table | ON    |
+-----------------------+-------+

那么今天就和大家聊聊第三款开源备份工具xtrabackup

官方站点:http://www.percona.com

官方在线文档:http://www.percona.com/doc/percona-xtrabackup/2.2/

最新软件包下载地址:http://www.percona.com/downloads/XtraBackup/

一、简介

Xtrabackup是由percona提供的mysql数据库开源热备工具。特点如下:

  • (1)备份过程快速、可靠;
  • (2)备份过程不会打断正在执行的事务;
  • (3)能够基于压缩等功能节约磁盘空间和流量;
  • (4)自动实现备份检验;
  • (5)还原速度快;

二、安装

XtraBackup目前最新版为2.2.9,本篇博客采用yum安装方式

1、yum安装

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# yum -y install libaio perl-Time-HiRes perl-DBD-MySQL perl-IO-Socket-SSL
# rpm -ivh http://www.percona.com/downloads/XtraBackup/XtraBackup-2.2.9/binary/redhat/6/x86_64/percona-xtrabackup-2.2.9-5067.el6.x86_64.rpm

2、查看Xtrabackup安装的工具

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# rpm -ql percona-xtrabackup |grep bin
/usr/bin/innobackupex  
/usr/bin/xbcrypt         
/usr/bin/xbstream       
/usr/bin/xtrabackup

3、XtraBackup中主要包含了三个工具

  • xbsteam:支持流式备份
  • xtrbackup:用于热备innodb、xtradb表中数据的工具,不能备份其它类型的表,也不能备份数据表结构
  • innobackupex:是将xtrabackup进行封装的perl脚本,提供了备份MyISAM表的能力

三、innobackupex几个非常重要的参数

  • --apply-log

一般情况下,在备份完成后,数据尚且不能用于恢复操作,因为备份的数据中可能会包含尚未提交的事务或已经提交但尚未同步至数据文件中的事务。因此,此时数据文件仍处理不一致状态。“准备”的主要作用正是通过回滚未提交的事务及同步已经提交的事务至数据文件也使得数据文件处于一致性状态。

  • --redo-only

准备(prepare)增量备份与整理完全备份有着一些不同,尤其要注意的是:

(1)需要在每个备份(包括完全和各个增量备份)上,将已经提交的事务进行“重放”。“重放”之后,所有的备份数据将合并到完全备份上。

(2)基于所有的备份将未提交的事务进行“回滚”。

  • --copy-back

该选项用于执行恢复(还原)操作,其通过复制所有数据相关的文件至mysql服务器DATADIR目录中来执行恢复过程。innobackupex通过backup-my.cnf来获取DATADIR目录的相关信息。

四、innobackup备份语法

  • 完全备份+完全恢复
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
完全备份
# innobackupex --user=DBUSER --password=DBUSERPASS  /path/to/BACKUP-DIR/

准备一个完全备份
# innobackupex --apply-log  /path/to/BACKUP-DIR

从一个完全备份中恢复数据
# innobackupex --copy-back /path/to/BACKUP-DIR

修改datadir目录权限
# chown -R  mysql:mysql  /mydata/data/
  • 完全备份+增量备份+完全恢复
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
完全备份:
# innobackupex --user=DBUSER --password=DBUSERPASS  /path/to/BACKUP-DIR/

第一次增量备份
# innobackupex --user=DBUSER --password=DBUSERPASS --incremental /backup --incremental-basedir=BASEDIR

第二次增量备份
# innobackupex --user=DBUSER --password=DBUSERPASS --incremental /backup --incremental-basedir=BASEDIR

准备:
执行完全备份redo
# innobackupex --apply-log --redo-only BASE-DIR
执行第一次增量备份redo
# innobackupex --apply-log --redo-only BASE-DIR --incremental-dir=INCREMENTAL-DIR-1
执行第二次增量备份redo
# innobackupex --apply-log --redo-only BASE-DIR --incremental-dir=INCREMENTAL-DIR-2

还原:
# innobackupex --copy-back BASE-DIR

解释:
其中BASE-DIR指的是完全备份所在的目录,
而INCREMENTAL-DIR-1指的是第一次增量备份的目录,
INCREMENTAL-DIR-2指的是第二次增量备份的目录,
其它依次类推,即如果有多次增量备份,每一次都要执行如上操作;

五、以上两种方式案列重放

  • 完全备份+完全恢复
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
1、实验前的准备工作
# service mysqld stop
# rm -rf /mydata/data/*	
# /usr/local/mysql/scripts/mysql_install_db --user=mysql --datadir=/mydata/data/ --basedir=/usr/local/mysql/
# service mysqld start
# mysqladmin -uroot -p password 123456
# mysql -uroot -p123456
mysql> create database jiaowu;
mysql> use jiaowu;
mysql> set sql_log_bin = 0;
mysql> source /root/tutor.sql;    //导入tutor数据表
mysql> set sql_log_bin = 1;
mysql> select * from tutor;
+------+---------------+--------+------+
| TID  | Tname         | Gender | Age  |
+------+---------------+--------+------+
|    1 | ZhengYansheng | M      |   25 |
|    2 | LiJian        | M      |   26 |
|    3 | OuYangyu      | M      |   27 |
|    4 | LuoChenghui   | M      |   25 |
|    5 | LiuYunbo      | M      |   25 |
|    6 | FuJian        | M      |   24 |
|    7 | LiMenglu      | F      |   23 |
|    8 | BaoYintu      | M      |   28 |
|    9 | WangYana      | F      |   25 |
+------+---------------+--------+------+
9 rows in set (0.00 sec)

2、innobackupex对DB进行完全备份
# innobackupex --user=root --password=123456 /backup/
如果执行正确,其最后输出的几行信息通常如下:
innobackupex: Backup created in directory '/backup/2015-03-18_21-00-17'
innobackupex: MySQL binlog position: filename 'mysql-bin.000003', position 332
150318 21:00:23  innobackupex: Connection to database server closed
150318 21:00:23  innobackupex: completed OK!

3、查看备份目录和文件
# ls /backup/
2015-03-18_21-00-17
# ls /backup/2015-03-18_21-00-17/
backup-my.cnf  jiaowu  performance_schema  xtrabackup_binlog_info  xtrabackup_info
ibdata1        mysql   test                xtrabackup_checkpoints  xtrabackup_logfile

4、准备一个完全备份
# innobackupex --user=root --password=123456 --apply-log /backup/2015-03-18_21-00-17/

#####模拟数据库故障#####
5、这里还是采用老方法直接删除所有的数据文件
# service mysqld stop
# rm -rf /mydata/data/*

6、从一个完全备份中恢复数据库
# innobackupex --copy-back /backup/2015-03-18_21-00-17/

7、修改数据目录权限
# chown -R mysql.mysql /mydata/data/

8、启动mysqld服务
# service mysqld start

9、登陆mysql查看是否是否一致
# mysql -e 'use jiaowu;select * from tutor;'
+------+---------------+--------+------+
| TID  | Tname         | Gender | Age  |
+------+---------------+--------+------+
|    1 | ZhengYansheng | M      |   25 |
|    2 | LiJian        | M      |   26 |
|    3 | OuYangyu      | M      |   27 |
|    4 | LuoChenghui   | M      |   25 |
|    5 | LiuYunbo      | M      |   25 |
|    6 | FuJian        | M      |   24 |
|    7 | LiMenglu      | F      |   23 |
|    8 | BaoYintu      | M      |   28 |
|    9 | WangYana      | F      |   25 |
+------+---------------+--------+------+

#数据已经成功恢复到数据库当中
  • 完全备份+增量备份+完全恢复
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
1、实验前的准备工作
# service mysqld stop
# rm -rf /mydata/data/*     //删除原来的备份文件
# rm -rf /backup/*
# /usr/local/mysql/scripts/mysql_install_db --user=mysql --datadir=/mydata/data/ --basedir=/usr/local/mysql/
# service mysqld start
# mysqladmin -uroot -p password 123456
# mysql -uroot -p123456
mysql> create database jiaowu;
mysql> use jiaowu;
mysql> set sql_log_bin = 0;
mysql> source /root/tutor.sql;   //导入tutor数据表
mysql> set sql_log_bin = 1;
mysql> select * from tutor;
+------+---------------+--------+------+
| TID  | Tname         | Gender | Age  |
+------+---------------+--------+------+
|    1 | ZhengYansheng | M      |   25 |
|    2 | LiJian        | M      |   26 |
|    3 | OuYangyu      | M      |   27 |
|    4 | LuoChenghui   | M      |   25 |
|    5 | LiuYunbo      | M      |   25 |
|    6 | FuJian        | M      |   24 |
|    7 | LiMenglu      | F      |   23 |
|    8 | BaoYintu      | M      |   28 |
|    9 | WangYana      | F      |   25 |
+------+---------------+--------+------+
9 rows in set (0.00 sec)

2、innobackupex对DB进行完全备份
# innobackupex --user=root --password=123456 /backup/
如果执行正确,其最后输出的几行信息通常如下:
innobackupex: Backup created in directory '/backup/2015-03-18_21-14-49'
innobackupex: MySQL binlog position: filename 'mysql-bin.000003', position 332
150318 21:14:54  innobackupex: Connection to database server closed
150318 21:14:54  innobackupex: completed OK!

3、仅查看备份目录
# ls /backup/
2015-03-18_21-14-49

4、操作数据库并插入数据
# mysql jiaowu;
mysql> insert into tutor(TID) values(11);
mysql> insert into tutor(TID) values(12);
mysql> insert into tutor(TID) values(13);
mysql> select * from tutor;
+------+---------------+--------+------+
| TID  | Tname         | Gender | Age  |
+------+---------------+--------+------+
|    1 | ZhengYansheng | M      |   25 |
|    2 | LiJian        | M      |   26 |
|    3 | OuYangyu      | M      |   27 |
|    4 | LuoChenghui   | M      |   25 |
|    5 | LiuYunbo      | M      |   25 |
|    6 | FuJian        | M      |   24 |
|    7 | LiMenglu      | F      |   23 |
|    8 | BaoYintu      | M      |   28 |
|    9 | WangYana      | F      |   25 |
|   11 | NULL          | NULL   | NULL |
|   12 | NULL          | NULL   | NULL |
|   13 | NULL          | NULL   | NULL |
+------+---------------+--------+------+
12 rows in set (0.00 sec)

5、执行第一次增量备份并查看备份目录
# innobackupex --user=root --password=123456 --incremental /backup/ --incremental-basedir=/backup/2015-03-18_21-14-49/
# ls /backup/
2015-03-18_21-14-49  2015-03-18_21-18-45

6、再次操作数据库并插入多条数据
# mysql jiaowu;
mysql> insert into tutor(TID) values(21);
mysql> insert into tutor(TID) values(22);
mysql> insert into tutor(TID) values(23);
mysql> select * from tutor;
+------+---------------+--------+------+
| TID  | Tname         | Gender | Age  |
+------+---------------+--------+------+
|    1 | ZhengYansheng | M      |   25 |
|    2 | LiJian        | M      |   26 |
|    3 | OuYangyu      | M      |   27 |
|    4 | LuoChenghui   | M      |   25 |
|    5 | LiuYunbo      | M      |   25 |
|    6 | FuJian        | M      |   24 |
|    7 | LiMenglu      | F      |   23 |
|    8 | BaoYintu      | M      |   28 |
|    9 | WangYana      | F      |   25 |
|   11 | NULL          | NULL   | NULL |
|   12 | NULL          | NULL   | NULL |
|   13 | NULL          | NULL   | NULL |
|   21 | NULL          | NULL   | NULL |
|   22 | NULL          | NULL   | NULL |
|   23 | NULL          | NULL   | NULL |
+------+---------------+--------+------+
15 rows in set (0.00 sec)

7、执行第二次增量备份并查看备份文件
# innobackupex --user=root --password=123456 --incremental /backup/ --incremental-basedir=/backup/2015-03-18_21-18-45/
# ls /backup/
2015-03-18_21-14-49  2015-03-18_21-18-45  2015-03-18_21-22-31

解释:
2015-03-18_21-14-49:为innobackupex的完全备份目录
2015-03-18_21-18-45:为innobackupex的第一次增量备份目录
2015-03-18_21-22-31:为innobackupex的第二次增量备份目录

8、开始准备innobackupex
首先执行完全备份redo-only
# innobackupex --user=root --password=123456 --apply-log --redo-only /backup/2015-03-18_21-14-49/
执行第一个增量备份redo-only
# innobackupex --user=root --password=123456 --apply-log --redo-only /backup/2015-03-18_21-14-49/ --incremental-dir=/backup/2015-03-18_21-18-45/
执行第二个增量备份redo-only
# innobackupex --user=root --password=123456 --apply-log --redo-only /backup/2015-03-18_21-14-49/ --incremental-dir=/backup/2015-03-18_21-22-31/

#####模拟数据库故障#####
9、这里还是采用老方法直接删除所有的数据文件
# service mysqld stop
# rm -rf /mydata/data/*

10、从完全备份中恢复数据库
# innobackupex --user=root --password=123456 --copy-back /backup/2015-03-18_21-14-49/

11、修改数据目录权限
# chown -R mysql.mysql /mydata/data/
 
12、启动mysqld服务
# service mysqld start
 
13、登陆mysql查看是否是否一致
# mysql -e 'use jiaowu;select * from tutor;'
+------+---------------+--------+------+
| TID  | Tname         | Gender | Age  |
+------+---------------+--------+------+
|    1 | ZhengYansheng | M      |   25 |
|    2 | LiJian        | M      |   26 |
|    3 | OuYangyu      | M      |   27 |
|    4 | LuoChenghui   | M      |   25 |
|    5 | LiuYunbo      | M      |   25 |
|    6 | FuJian        | M      |   24 |
|    7 | LiMenglu      | F      |   23 |
|    8 | BaoYintu      | M      |   28 |
|    9 | WangYana      | F      |   25 |
|   11 | NULL          | NULL   | NULL |
|   12 | NULL          | NULL   | NULL |
|   13 | NULL          | NULL   | NULL |
|   21 | NULL          | NULL   | NULL |
|   22 | NULL          | NULL   | NULL |
|   23 | NULL          | NULL   | NULL |
+------+---------------+--------+------+

#两次增量添加的数据也已经成功添加到数据库当中。恢复成功

六、Xtrabackup的高级功能

  • 流式压缩功能

Xtrabackup对备份的数据文件支持“流”功能,即可以将备份的数据通过STDOUT传输给tar程序进行归档,而不是默认的直接保存至某备份目录中。要使用此功能,仅需要使用--stream选项即可。如:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# innobackupex --user=root --password=123456 --stream=tar  /backup | gzip > /backup/`date +%F_%H-%M-%S`.tar.gz
  • 甚至也可以使用类似如下命令将数据备份至其它服务器:强烈推荐这种方式
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# innobackupex --user=root --password=123456 --stream=tar  /backup | ssh root@192.168.1.100  'cat - > /backup/`date +%F_%H-%M-%S`.tar'
  • 在执行本地备份时,还可以使用--parallel选项对多个文件进行并行复制(暂时还没有看懂此选项)
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
此外,在执行本地备份时,还可以使用--parallel选项对多个文件进行并行复制。此选项用于指定在复制时启动的线程数目。当然,在实际进行备份时要利用此功能的便利性,也需要启用innodb_file_per_table选项或共享的表空间通过innodb_data_file_path选项存储在多个ibdata文件中。对某一数据库的多个文件的复制无法利用到此功能。其简单使用方法如下:
# innobackupex --parallel  /path/to/backup

同时,innobackupex备份的数据文件也可以存储至远程主机,这可以使用--remote-host选项来实现:
# innobackupex --remote-host=root@www.magedu.com  /path/IN/REMOTE/HOST/to/backup

七、使用Xtrabackup对数据库进行部分备份

  • Xtrabackup也可以实现部分备份,即只备份某个或某些指定的数据库或某数据库中的某个或某些表。但要使用此功能,必须启用innodb_file_per_table选项,即每张表保存为一个独立的文件。同时,其也不支持--stream选项,即不支持将数据通过管道传输给其它程序进行处理。
  • 此外,还原部分备份跟还原全部数据的备份也有所不同,即你不能通过简单地将prepared的部分备份使用--copy-back选项直接复制回数据目录,而是要通过导入表的方向来实现还原。当然,有些情况下,部分备份也可以直接通过--copy-back进行还原,但这种方式还原而来的数据多数会产生数据不一致的问题,因此,无论如何不推荐使用这种方式。

(1)创建部分备份

创建部分备份的方式有三种:

  • 正则表达式(--include)
  • 枚举表文件(--tables-file)
  • 列出要备份的数据库(--databases)。
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
(a)使用--include
使用--include时,要求为其指定要备份的表的完整名称,即形如databasename.tablename,如:
# innobackupex --include='^mageedu[.]tb1'  /path/to/backup

(b)使用--tables-file
此选项的参数需要是一个文件名,此文件中每行包含一个要备份的表的完整名称;如:
# echo -e 'mageedu.tb1\nmageedu.tb2' > /tmp/tables.txt
# innobackupex --tables-file=/tmp/tables.txt  /path/to/backup

(c)使用--databases
此选项接受的参数为数据名,如果要指定多个数据库,彼此间需要以空格隔开;同时,在指定某数据库时,也可以只指定其中的某张表。此外,此选项也可以接受一个文件为参数,文件中每一行为一个要备份的对象。如:
# innobackupex --databases="mageedu testdb"  /path/to/backup

(2)整理(preparing)部分备份

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
prepare部分备份的过程类似于导出表的过程,要使用--export选项进行:
# innobackupex --apply-log --export  /pat/to/partial/backup

此命令执行过程中,innobackupex会调用xtrabackup命令从数据字典中移除缺失的表,因此,会显示出许多关于“表不存在”类的警告信息。同时,也会显示出为备份文件中存在的表创建.exp文件的相关信息。

(3)还原部分备份

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
还原部分备份的过程跟导入表的过程相同。当然,也可以通过直接复制prepared状态的备份直接至数据目录中实现还原,不要此时要求数据目录处于一致状态。

案列演示:

对jiaowu数据库进行备份和还原

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
1、查看数据库和表
mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| jiaowu             |
| mysql              |
| performance_schema |
| test               |
+--------------------+
5 rows in set (0.00 sec)
mysql> select * from jiaowu.tutor;
+------+---------------+--------+------+
| TID  | Tname         | Gender | Age  |
+------+---------------+--------+------+
|    1 | ZhengYansheng | M      |   25 |
|    2 | LiJian        | M      |   26 |
|    3 | OuYangyu      | M      |   27 |
|    4 | LuoChenghui   | M      |   25 |
|    5 | LiuYunbo      | M      |   25 |
|    6 | FuJian        | M      |   24 |
|    7 | LiMenglu      | F      |   23 |
|    8 | BaoYintu      | M      |   28 |
|    9 | WangYana      | F      |   25 |
|   11 | NULL          | NULL   | NULL |
|   12 | NULL          | NULL   | NULL |
|   13 | NULL          | NULL   | NULL |
|   21 | NULL          | NULL   | NULL |
|   22 | NULL          | NULL   | NULL |
|   23 | NULL          | NULL   | NULL |
+------+---------------+--------+------+

2、innobackupex进行备份
# innobackupex --user=root --password=123456 --databases='jiaowu' /opt/

3、准备并导入jiaowu表
# innobackupex --user=root --password=123456 --apply-log --export /opt/2015-03-18_22-46-47/

4、删除jiaowu数据库
# rm -rf /mydata/data/jiaowu

5、登陆数据库查看是否还存在jiaowu数据库
[root@localhost ~]# mysql -e 'show databases;'
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| test               |
+--------------------+
#jiaowu数据库不存在了

6、还原jiaowu数据库
# cp -a /opt/2015-03-18_22-46-47/jiaowu/ /mydata/data/

7、修改jiaowu权限
# chown -R mysql.mysql /mydata/data/jiaowu

8、再次查看jiaowu数据库是否存在
[root@localhost ~]# mysql -e 'use jiaowu;show tables;'
+------------------+
| Tables_in_jiaowu |
+------------------+
| tutor            |
+------------------+

#jiaowu数据库已经被还原并且表tutor还在。成功!!!

八、导入或导出单张表

默认情况下,InnoDB表不能通过直接复制表文件的方式在mysql服务器之间进行移植,即便使用了innodb_file_per_table选项。而使用Xtrabackup工具可以实现此种功能,

不过,此时需要“导出”表的mysql服务器启用了innodb_file_per_table选项(严格来说,是要“导出”的表在其创建之前,mysql服务器就启用了innodb_file_per_table选项),

并且“导入”表的服务器同时启用了innodb_file_per_table和innodb_expand_import选项。

(1)“导出”表

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
导出表是在备份的prepare阶段进行的,因此,一旦完全备份完成,就可以在prepare过程中通过--export选项将某表导出了:
# innobackupex --apply-log --export /path/to/backup

此命令会为每个innodb表的表空间创建一个以.exp结尾的文件,这些以.exp结尾的文件则可以用于导入至其它服务器。

(2)“导入”表

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
要在mysql服务器上导入来自于其它服务器的某innodb表,需要先在当前服务器上创建一个跟原表表结构一致的表,而后才能实现将表导入:
mysql> CREATE TABLE mytable (...)  ENGINE=InnoDB;

然后将此表的表空间删除:
mysql> ALTER TABLE mydatabase.mytable  DISCARD TABLESPACE;

接下来,将来自于“导出”表的服务器的mytable表的mytable.ibd和mytable.exp文件复制到当前服务器的数据目录,然后使用如下命令将其“导入”:
mysql> ALTER TABLE mydatabase.mytable  IMPORT TABLESPACE;

案列演示:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
1、查看表
mysql> use jiaowu;
Database changed
mysql> show tables;
+------------------+
| Tables_in_jiaowu |
+------------------+
| tutor            |
+------------------+
1 row in set (0.00 sec)

2、修改表的存储引擎为InnoDB
mysql> alter table tutor engine=innodb;
Query OK, 15 rows affected (0.05 sec)
Records: 15  Duplicates: 0  Warnings: 0

3、innobackupex对其进行备份
# innobackupex --user=root --password=123456 --databases='jiaowu.tutor' /opt/

4、准备并导出
# innobackupex --user=root --password=123456 --apply-log --export /opt/2015-03-18_23-05-44/

5、删除此表的表空间
mysql> ALTER TABLE jiaowu.tutor DISCARD TABLESPACE;
Query OK, 0 rows affected (0.01 sec)

mysql> use jiaowu;
Database changed
mysql> select * from tutor;        #数据已经不存在了
ERROR 1030 (HY000): Got error -1 from storage engine

6、接下来,将来自于“导出”表的服务器的mytable表的mytable.ibd和mytable.exp文件复制到当前服务器的数据目录,然后使用如下命令将其“导入”:并修改权限
# cp /opt/2015-03-18_23-24-23/jiaowu/{tutor.exp,tutor.ibd} /mydata/data/jiaowu/
cp:是否覆盖"/mydata/data/jiaowu/tutor.exp"? yes
# chown -R mysql.mysql /mydata/data/jiaowu/*
mysql> ALTER TABLE jiaowu.tutor IMPORT TABLESPACE;
Query OK, 0 rows affected (0.00 sec)
mysql> use jiaowu;
Database changed
mysql> select * from tutor;
+------+---------------+--------+------+
| TID  | Tname         | Gender | Age  |
+------+---------------+--------+------+
|    1 | ZhengYansheng | M      |   25 |
|    2 | LiJian        | M      |   26 |
|    3 | OuYangyu      | M      |   27 |
|    4 | LuoChenghui   | M      |   25 |
|    5 | LiuYunbo      | M      |   25 |
|    6 | FuJian        | M      |   24 |
|    7 | LiMenglu      | F      |   23 |
|    8 | BaoYintu      | M      |   28 |
|    9 | WangYana      | F      |   25 |
|   11 | NULL          | NULL   | NULL |
|   12 | NULL          | NULL   | NULL |
|   13 | NULL          | NULL   | NULL |
|   21 | NULL          | NULL   | NULL |
|   22 | NULL          | NULL   | NULL |
|   23 | NULL          | NULL   | NULL |
+------+---------------+--------+------+
15 rows in set (0.00 sec)

#单表还原已经成功!结束。
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2019/09/19 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

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

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
xtrabackup使用详解
    在InnoDB内部会维护一个redo日志文件,我们也可以叫做事务日志文件。事务日志会存储每一个InnoDB表数据的记录修改。当InnoDB启动时,InnoDB会检查数据文件和事务日志,并执行两个步骤:它应用(前滚)已经提交的事务日志到数据文件,并将修改过但没有提交的数据进行回滚操作。
保持热爱奔赴山海
2019/09/18
3K0
MySQL 备份恢复(四)
热备中主要有逻辑备份和裸文件备份,裸文件备份要比逻辑备份在速度上快一些,mysqldump 备份方式是采用的逻辑备份,其最大的缺陷是备份和恢复速度较慢,如果数据库大于 50G,mysqldump 备份就不太适合。而 XtraBackup 是一种物理备份工具,支持热备,在备份时复制所有 MySQL 的数据文件以及一些事务日志信息,在还原时将复制的数据文件放回至 MySQL 数据目录,并应用日志保证数据一致。
JiekeXu之路
2019/06/19
2.4K0
MySQL 备份恢复(四)
【MySQL】删库别着急跑路(一)--Xtrabackup的原理及使用
俗话说”常在河边走,哪有不湿鞋”。在DBA的实际运维过程中经常会遇到误删除、改错数据的情况。遇到这种情况我们除了跑路还能怎么办?我们又怎么能做到有备无患呢?我计划用三章的时间和大家聊聊数据库的备份和恢复工具xtrabackup、mysqldump以及闪回工具binlog2sql,今天先介绍下xtrabackup的原理以及使用方法。
MySQL数据库技术栈
2020/08/05
5950
MySQL备份与恢复 Xtrabackup
MySQL冷备、mysqldump、MySQL热拷贝都无法实现对数据库进行增量备份。在实际生产环境中增量备份是非常实用的,如果数据大于50G或100G,存储空间足够的情况下,可以每天进行完整备份,如果每天产生的数据量较大,需要定制数据备份策略。例如每周实用完整备份,周一到周六实用增量备份。而Percona-Xtrabackup就是为了实现增量备份而出现的一款主流备份工具,xtrabakackup有2个工具,分别是xtrabakup、innobakupe。
jwangkun
2021/12/23
1.6K0
MySQL备份与恢复 Xtrabackup
MySQL开源热备工具XtraBackup的原理与程序说明
XtraBackup是Percona发布的MySQL开源热备工具,可以在尽量不影响线上读写的情况下进行快速全备、增备。支持InnoDB, XtraDB, 和MyISAM引擎。 ---- 一.运行原理 1.权限 XtraBackup需要连接到数据库服务器,能够在服务器以及datadir目录下执行一些操作。 涉及两类用户,应该满足适当权限要求: a.RELOAD、LOCK TABLES,为了执行FLUSH TABLES WITH READ LOCK b.REPLICATION CLIENT,为了获取二进制日志的
小小科
2018/05/03
1.2K0
使用Xtrabackup进行MySQL备份
1、简介 Xtrabackup是由percona提供的mysql数据库备份工具,据官方介绍,这也是世界上惟一一款开源的能够对innodb和xtradb数据库进行热备的工具。特点: (1)备份过程快速、可靠; (2)备份过程不会打断正在执行的事务; (3)能够基于压缩等功能节约磁盘空间和流量; (4)自动实现备份检验; (5)还原速度快;
全栈程序员站长
2022/07/04
1.1K0
MySQL数据备份与恢复(二) -- xtrabackup工具
上一篇介绍了逻辑备份工具mysqldump,本文将通过应用更为广泛的物理备份工具xtrabackup来演示数据备份及恢复的第二篇内容(本文篇幅较长,建议收藏后阅读)。
俊才
2020/04/07
1.1K0
XtraBackup工具详解 Part 9 innobackupex命令总结
innobackupex默认会读取/etc/my.cnf文件中的datadir参数,可以使用--defaults-file手动指定
bsbforever
2020/08/19
6350
Mysql备份工具xtrabackup--安装和使用
1.安装依赖 yum -y install perl perl-devel libaio libaio-devel perl-Time-HiRes perl-DBD-MySQL libev-devel
陈不成i
2021/06/11
1K0
Mysql 备份恢复与xtrabackup备份
  备份是数据安全的最后一道防线,对于任何数据丢失的场景,备份虽然不一定能恢复百分之百的数据(取决于备份周期),但至少能将损失降到最低。衡量备份恢复有两个重要的指标:恢复点目标(RPO)和恢复时间目标(RTO),前者重点关注能恢复到什么程度,而后者则重点关注恢复需要多长时间。
惨绿少年
2019/05/24
15.9K0
Centos7下Percona XtraBackup 2.3.4备份与恢复MySQL
Percona XtraBackup是MySQL数据库的一款备份工具,它通过热备份的方式,在不停止MySQL服务器的情况下对InnoDB和XtraDB表进行备份。本文将详细介绍使用XtraBackup进行备份与恢复的过程,包括备份的类型、常用选项以及备份与恢复的步骤。
洛秋_
2023/12/19
4210
Centos7下Percona XtraBackup 2.3.4备份与恢复MySQL
innobackupex备份恢复+增量备份与恢复
xtrabackup : 这个备份工具是挺好的,但是有缺陷,只可以备份innodb;但是我们也需要备份myisam,然后就出来了一个工具:innobackupex,也就是我们今天所用的! 一、innobackupex 备份: 1.1 查看数据目录: [[email protected]03 ~]# ls /data/mysql/ auto.cnf db1 ibdata1 ib_logfile0 ib_logfile1 mysql mysql2 performance_schema test
老七Linux
2018/05/09
12.6K1
MySQL常见备份方案
mysqldump 选项请参考http://wangweiak47.blog.51cto.com/2337362/1589304
全栈程序员站长
2022/07/12
5680
基于Innobackupex的增备及恢复
    MySQL的热备(物理备份)可以采取全备加增量备份的方式来减轻数据库I/O压力及系统资源的占用。增量备份主要是以全备或增量备份为基础,备份那些变更过的页面。其备份的原理是基于一个不断增长的LSN序列,这个LSN与Oracle的SCN类似。在恢复期间,我们需要将已提交的事务前滚,未提交的事务回滚。本文主要描述了增量备份及增量恢复。
Leshami
2018/08/13
8300
Xtrabackup2.4.8备份、还原、恢复MySQL5.7.19实战案例
环境:CentOS 6.7  + MysSQL 5.7.19 + Xtraback 2.4.8
星哥玩云
2022/08/16
6210
Mysql备份系列(3)--innobackupex备份mysql大数据(全量+增量)操作记录
在日常的linux运维工作中,大数据量备份与还原,始终是个难点。关于mysql的备份和恢复,比较传统的是用mysqldump工具,今天这里推荐另一个备份工具innobackupex。innobackupex和mysqldump都可以对mysql进行热备份的,mysqldump对mysql的innodb的备份可以使用single-transaction参数来开启一个事务,利用innodb的mvcc来不进行锁表进行热备份,mysqldump备份是逻辑备份,备份出来的文件是sql语句,所以备份和恢复的时候很慢,但
洗尽了浮华
2018/01/23
2.3K0
MySQL物理备份 xtrabackup
官网下载:https://www.percona.com/downloads/XtraBackup/LATEST/
星哥玩云
2022/08/18
8040
MySQL 使用 XtraBackup 进行数据热备份指导 [全量+增量]
背景 最近一直涉猎 MySQL 数据库的操作、集群部署知识 注意到,为保证数据安全,掌握数据备份是极为重要的 相比小型服务的冷备份而言 在此推荐并整理,更受推崇的 XtraBackup 下的热备份技巧 ☞ 概念了解 [XtraBackup] XtraBackup 是一种物理备份工具,通过协议连接到 MySQL 服务端,然后读取并复制底层的文件,完成物理备份 优势 XtraBackup 备份过程中加读锁,数据可读,但是不可写(分以下情况) Innodb 引擎的备份是无阻塞的备份,不会影响表的
泥豆芽儿 MT
2021/02/02
3.4K0
xtrabackup使用
转自:https://www.cnblogs.com/waynechou/p/xtrabackup_backup.html 阅读目录 xtrabackup 选项 xtrabackup 全量备份恢复 xtrabackup 增量备份恢复 前一篇文章我们讲到了PXB的原理以及安装方法,接下来将详细介绍 XtraBackup 备份和恢复的具体过程。 回到顶部 xtrabackup 选项 xtrabackup 工具有许多参数,具体可去官网查询(xtrabackup 参数选项 | innobackupex 参数选项),
用户1173509
2018/03/28
2.2K0
数据库热备份神器 - XtraBackup
利用Linux的LVM技术来实现热备份,将MySQL的数据目录放到LVM逻辑卷上,然后通过LVM快照技术备份逻辑卷的内容。第一次备份是全量备份,之后的备份都是增量备份。在还原时,将快照中的数据目录恢复到ySQL的数据目录即可。
端碗吹水
2020/09/23
2.7K1
数据库热备份神器 - XtraBackup
相关推荐
xtrabackup使用详解
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验