MySQL[3] 在线热备工具Xtrabackup

简介:

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


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


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

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

1
2
3
4
5
6
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安装

1
2
# 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安装的工具

1
2
3
4
5
# 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备份语法

  • 完全备份+完全恢复

1
2
3
4
5
6
7
8
9
10
11
完全备份
# 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/
  • 完全备份+增量备份+完全恢复

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
完全备份:
# 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指的是第二次增量备份的目录,
其它依次类推,即如果有多次增量备份,每一次都要执行如上操作;


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

  • 完全备份+完全恢复

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
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 |
+------+---------------+--------+------+
 
#数据已经成功恢复到数据库当中
  • 完全备份+增量备份+完全恢复

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
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选项即可。如:

1
# innobackupex --user=root --password=123456 --stream=tar  /backup | gzip > /backup/`date +%F_%H-%M-%S`.tar.gz
  • 甚至也可以使用类似如下命令将数据备份至其它服务器:强烈推荐这种方式

1
# innobackupex --user=root --password=123456 --stream=tar  /backup | ssh root@192.168.1.100  'cat - > /backup/`date +%F_%H-%M-%S`.tar'
  • 在执行本地备份时,还可以使用--parallel选项对多个文件进行并行复制(暂时还没有看懂此选项)

1
2
3
4
5
此外,在执行本地备份时,还可以使用--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)。

1
2
3
4
5
6
7
8
9
10
11
12
(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)部分备份

1
2
3
4
prepare部分备份的过程类似于导出表的过程,要使用-- export 选项进行:
# innobackupex --apply-log --export  /pat/to/partial/backup
 
此命令执行过程中,innobackupex会调用xtrabackup命令从数据字典中移除缺失的表,因此,会显示出许多关于“表不存在”类的警告信息。同时,也会显示出为备份文件中存在的表创建.exp文件的相关信息。

(3)还原部分备份

1
还原部分备份的过程跟导入表的过程相同。当然,也可以通过直接复制prepared状态的备份直接至数据目录中实现还原,不要此时要求数据目录处于一致状态。

案列演示:

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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
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)“导出”表

1
2
3
4
导出表是在备份的prepare阶段进行的,因此,一旦完全备份完成,就可以在prepare过程中通过-- export 选项将某表导出了:
# innobackupex --apply-log --export /path/to/backup
 
此命令会为每个innodb表的表空间创建一个以.exp结尾的文件,这些以.exp结尾的文件则可以用于导入至其它服务器。


(2)“导入”表

1
2
3
4
5
6
7
8
要在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;


案列演示:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
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)
 
#单表还原已经成功!结束。







     本文转自zys467754239 51CTO博客,原文链接http://blog.51cto.com/467754239/1621711:,如需转载请自行联系原作者




相关实践学习
如何在云端创建MySQL数据库
开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
2月前
|
canal 消息中间件 关系型数据库
Canal作为一款高效、可靠的数据同步工具,凭借其基于MySQL binlog的增量同步机制,在数据同步领域展现了强大的应用价值
【9月更文挑战第1天】Canal作为一款高效、可靠的数据同步工具,凭借其基于MySQL binlog的增量同步机制,在数据同步领域展现了强大的应用价值
530 4
|
5月前
|
SQL 关系型数据库 MySQL
MySQL数据库-概括与常用图形管理工具
MySQL数据库-概括与常用图形管理工具
|
26天前
|
SQL 分布式计算 关系型数据库
Hadoop-21 Sqoop 数据迁移工具 简介与环境配置 云服务器 ETL工具 MySQL与Hive数据互相迁移 导入导出
Hadoop-21 Sqoop 数据迁移工具 简介与环境配置 云服务器 ETL工具 MySQL与Hive数据互相迁移 导入导出
46 3
|
2月前
|
SQL 缓存 关系型数据库
MySQL高级篇——性能分析工具
MySQL的慢查询日志,用来记录在MySQL中响应时间超过阀值的语句,具体指运行时间超过long-query_time值的SQL,则会被记录到慢查询日志中。long_query_time的默认值为 10,意思是运行10秒以上(不含10秒)的语句,认为是超出了我们的最大忍耐时间值。它的主要作用是,帮助我们发现那些执行时间特别长的 SOL 查询,并且有针对性地进行优化,从而提高系统的整体效率。当我们的数据库服务器发生阻塞、运行变慢的时候,检查一下慢查询日志,找到那些慢查询,对解决问题很有帮助。
MySQL高级篇——性能分析工具
|
2月前
|
安全 关系型数据库 MySQL
Navicat工具设置MySQL权限的操作指南
通过上述步骤,您可以使用Navicat有效地为MySQL数据库设置和管理用户权限,确保数据库的安全性和高效管理。这个过程简化了数据库权限管理,使其既直观又易于操作。
241 4
|
3月前
|
SQL 监控 关系型数据库
使用 pt-query-digest 工具分析 MySQL 慢日志
【8月更文挑战第5天】使用 pt-query-digest 工具分析 MySQL 慢日志
53 3
使用 pt-query-digest 工具分析 MySQL 慢日志
|
3月前
|
SQL 关系型数据库 MySQL
在Linux中,mysql 数据备份工具有哪些?
在Linux中,mysql 数据备份工具有哪些?
|
3月前
|
SQL 存储 关系型数据库
MySQL备份:mydumper 备份恢复工具生产实战
MySQL备份:mydumper 备份恢复工具生产实战
|
3月前
|
关系型数据库 MySQL 数据库
MySQL回滚工具:binlog 闪回工具 MyFlash工具
MySQL回滚工具:binlog 闪回工具 MyFlash工具
|
3月前
|
关系型数据库 MySQL OLTP
性能工具之 MySQL OLTP Sysbench BenchMark 测试示例
【8月更文挑战第6天】使用 pt-query-digest 工具分析 MySQL 慢日志性能工具之 MySQL OLTP Sysbench BenchMark 测试示例
269 0
性能工具之 MySQL OLTP Sysbench BenchMark 测试示例