1.1. 场景

有的时候test人员可能需要在测试库上比较新的数据,这时候只能是从生产库上面去那了。如果是小表还好实用mysqldump/mysqlpump就可以轻松的解决。但是,如果遇到了大表这将是一个很痛苦的过程。这时候最好的选择就是使用Percona公司的MySQL热备工具xtrabackup了。

1.2. 为什么不使用ibd文件拷贝方法

很简单,因为要锁表对生产环境影响比较大。

1.3. 扩展

当然如果他们数据的要求并不是那么高可以使用每天用xtrabackup备份的来做。但是,这往往会比现场直接备份生产库的某张表来的麻烦,因为往往我们使用的是增量备份,还要应用之前的所有日志。而且为了防止破坏备份数据,还需要拷贝一份。

 

1.4. 先决条件

前提必须开启innodb_file_per_table选项,并且使用InnoDB存储引擎。

 
1
;

由于我使用的是 Percona Server 5.7.10-3 所以需要使用的xtrabackup版本为2.4.1

1.5. 制造大表

下面我们制造表数据,下面模拟的数据比较小,主要是为了节省时间。

 
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
;
t1
;
(
,
,
,
)
;
 
创建添加数据存储过程
;
//
)
begin
;
;
DO
THEN
;
;
;
;
;
;
//
 
;
 
添加数据
;
;

查看数据大小情况(磁盘上的数据大小)

 
1
2
3
*
frm
ibd

查看真实的大小情况

 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
;
+
|
+
|
+
 
,
,
,
'total(MB)'
tables
'test'
;
+
|
+
|
+

从上面可以看出在磁盘上的数据大小是1.2G,而实际的大小才1048MB(估计值),实际情况会比上面的数据大很多。

1.6. 表迁移演示

    1、使用xtrabackup备份test.t1表数据

 
1
2
3
4
5
6
7
8
backup
\
\
\
\
\
\
backup

2、查看备份集

 
1
2
3
4
5
6
7
8
9
10
11
12
backup
35
35
1048600
cnf
ib_buffer_pool
ibdata1
test
xtrabackup_binlog_info
xtrabackup_checkpoints
xtrabackup_info
xtrabackup_logfile

3、应用日志并导出元数据

 
1
2
3
4
5
6
7
8
9
10
\
\
\
35
 
test
cfg
exp
frm
ibd

4、test2库中创建和test.t1相同的表结构

 
1
2
3
;
;
;

5、废弃test2.t1表空间,等待新表空间导入

 
1
2
;
;

6、将test.t1表*.ibd和*.cfg文件拷贝到test2库中

 
1
2
3
4
5
6
7
8
9
/
/
/
 
/
cfg
exp
frm
ibd

7、test2导入t1数据

 
1
2
3
test2
;
;

8、查看test2.t1数据

 
1
2
3
4
5
6
7
;
;
+
|
+
|
+

 

1.7. 总结

xtrabackup这种表迁移算是比较复杂的了,但是他对数据库的影响是比较小的。虽然说影响小,但是还是会有影响的。所以迁移还是避免高峰时期比较妥当。

相关文章:

  • 2021-06-07
  • 2022-12-23
  • 2021-11-29
  • 2021-12-24
  • 2021-06-13
  • 2021-10-30
  • 2022-12-23
  • 2021-08-18
猜你喜欢
  • 2021-12-14
  • 2021-08-24
  • 2022-12-23
  • 2022-12-23
  • 2021-11-17
  • 2022-01-12
相关资源
相似解决方案