MySQL-表迁移工具的选型-xtrabackup的使用
1.1. 场景
有的时候test人员可能需要在测试库上比较新的数据,这时候只能是从生产库上面去那了。如果是小表还好实用mysqldump/mysqlpump就可以轻松的解决。但是,如果遇到了大表这将是一个很痛苦的过程。这时候最好的选择就是使用Percona公司的MySQL热备工具xtrabackup了。
1.2. 为什么不使用ibd文件拷贝方法
很简单,因为要锁表对生产环境影响比较大。
1.3. 扩展
当然如果他们数据的要求并不是那么高可以使用每天用xtrabackup备份的来做。但是,这往往会比现场直接备份生产库的某张表来的麻烦,因为往往我们使用的是增量备份,还要应用之前的所有日志。而且为了防止破坏备份数据,还需要拷贝一份。
1.4. 先决条件
前提必须开启innodb_file_per_table选项,并且使用InnoDB存储引擎。
|
1
|
set global innodb_file_per_table = 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
|
USE test;
-- 创建表t1
DROP TABLE IF EXISTS t1;
CREATE TABLE t1(
id BIGINT unsigned NOT NULL AUTO_INCREMENT,
x VARCHAR(500) NOT NULL,
y VARCHAR(500) NOT NULL,
PRIMARY KEY(id)
);
-- 创建添加数据存储过程
DROP PROCEDURE insert_batch;
DELIMITER //
CREATE PROCEDURE insert_batch()
begin
DECLARE num INT;
SET num=1;
WHILE num < 1000000 DO
IF (num%10000=0) THEN
COMMIT;
END IF;
INSERT INTO t1 VALUES(NULL, REPEAT('X', 500), REPEAT('Y', 500));
SET num=num+1;
END WHILE;
COMMIT;
END //
DELIMITER ;
-- 添加数据
CALL insert_batch();
DROP PROCEDURE insert_batch;
|
查看数据大小情况(磁盘上的数据大小)
|
1
2
3
|
ls -lh /u02/data/test/t1.*
-rw-r----- 1 mysql mysql 8.5K Mar 10 13:54 /u02/data/test/t1.frm
-rw-r----- 1 mysql mysql 1.2G Mar 10 14:20 /u02/data/test/t1.ibd
|
查看真实的大小情况
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
|
select count(*) from t1;
+----------+
| count(*) |
+----------+
| 999999 |
+----------+
SELECT table_name,
data_length/1024/1024 AS 'data_length(MB)',
index_length/1024/1024 AS 'index_length(MB)',
(data_length + index_length)/1024/1024 AS 'total(MB)'
FROM information_schema.tables
WHERE table_schema='test'
AND table_name = 't1';
+------------+-----------------+------------------+---------------+
| table_name | data_length(MB) | index_length(MB) | total(MB) |
+------------+-----------------+------------------+---------------+
| t1 | 1048.00000000 | 0.00000000 | 1048.00000000 |
+------------+-----------------+------------------+---------------+
|
从上面可以看出在磁盘上的数据大小是1.2G,而实际的大小才1048MB(估计值),实际情况会比上面的数据大很多。
1.6. 表迁移演示
1、使用xtrabackup备份test.t1表数据
|
1
2
3
4
5
6
7
8
|
mkdir -p /tmp/backup
/usr/local/percona-xtrabackup/bin/innobackupex \
--defaults-file=/etc/my.cnf \
--user=root \
--password=root \
--socket=/u02/tmp/mysql.sock \
--include='test.t1' \
/tmp/backup
|
2、查看备份集
|
1
2
3
4
5
6
7
8
9
10
11
12
|
ll /tmp/backup
drwxr-x--- 3 root root 4096 Mar 10 15:43 2016-03-10_15-43-35
ll /tmp/backup/2016-03-10_15-43-35
total 1048600
-rw-r----- 1 root root 412 Mar 10 15:43 backup-my.cnf
-rw-r----- 1 root root 453 Mar 10 15:43 ib_buffer_pool
-rw-r----- 1 root root 1073741824 Mar 10 15:43 ibdata1
drwxr-x--- 2 root root 32 Mar 10 15:43 test
-rw-r----- 1 root root 26 Mar 10 15:43 xtrabackup_binlog_info
-rw-r----- 1 root root 121 Mar 10 15:43 xtrabackup_checkpoints
-rw-r----- 1 root root 553 Mar 10 15:43 xtrabackup_info
-rw-r----- 1 root root 2560 Mar 10 15:43 xtrabackup_logfile
|
3、应用日志并导出元数据
|
1
2
3
4
5
6
7
8
9
10
|
/usr/local/percona-xtrabackup/bin/innobackupex \
--apply-log \
--export \
/tmp/backup/2016-03-10_15-43-35
ll /tmp/backup/2016-03-10_15-43-35/test
-rw-r--r-- 1 root root 433 Mar 10 16:21 t1.cfg
-rw-r----- 1 root root 16384 Mar 10 16:21 t1.exp
-rw-r----- 1 root root 8604 Mar 10 15:43 t1.frm
-rw-r----- 1 root root 1195376640 Mar 10 15:43 t1.ibd
|
4、test2库中创建和test.t1相同的表结构
|
1
2
3
|
CREATE DATABASE test2;
USE test2;
CREATE TABLE t1 LIKE test.t1;
|
5、废弃test2.t1表空间,等待新表空间导入
|
1
2
|
USE test2;
ALTER TABLE t1 DISCARD TABLESPACE;
|
6、将test.t1表*.ibd和*.cfg文件拷贝到test2库中
|
1
2
3
4
5
6
7
8
9
|
cp /tmp/backup/2016-03-10_15-43-35/test/t1.cfg /u02/data/test2/
cp /tmp/backup/2016-03-10_15-43-35/test/t1.ibd /u02/data/test2/
cp /tmp/backup/2016-03-10_15-43-35/test/t1.exp /u02/data/test2/
ll -h /u02/data/test2/
-rw-r--r-- 1 root root 433 Mar 10 16:35 t1.cfg
-rw-r----- 1 root root 16K Mar 10 16:35 t1.exp
-rw-r----- 1 mysql mysql 8.5K Mar 10 14:33 t1.frm
-rw-r----- 1 root root 1.2G Mar 10 16:35 t1.ibd
|
7、test2导入t1数据
|
1
2
3
|
chown -R mysql:mysql /u02/data/test2
USE test2;
ALTER TABLE t1 IMPORT TABLESPACE;
|
8、查看test2.t1数据
|
1
2
3
4
5
6
7
|
USE test2;
SELECT COUNT(*) FROM t1;
+----------+
| COUNT(*) |
+----------+
| 999999 |
+----------+
|
1.7. 总结
xtrabackup这种表迁移算是比较复杂的了,但是他对数据库的影响是比较小的。虽然说影响小,但是还是会有影响的。所以迁移还是避免高峰时期比较妥当。
MySQL-表迁移工具的选型-xtrabackup的使用的更多相关文章
- 表迁移工具的选型-xtrabackup的使用
1.1. 场景 有的时候test人员可能需要在测试库上比较新的数据,这时候只能是从生产库上面去那了.如果是小表还好实用mysqldump/mysqlpump就可以轻松的解决.但是,如果遇到了大表这将是 ...
- 表迁移工具的选型-复制ibd的方法
1.1. 场景 有的时候开放人员自己的库需要帮忙导一些数据,但是表的数据量又很大.虽然说使用mysqldump或mysqlpump也可以导.但是这耗时需要比较久. 记得之前建议开放人员可以直接使用na ...
- 表迁移工具的选型-复制ibd的方法-传输表空间
1.1. 场景 有的时候开放人员自己的库需要帮忙导一些数据,但是表的数据量又很大.虽然说使用mysqldump或mysqlpump也可以导.但是这耗时需要比较久. 记得之前建议开放人员可以直接使用na ...
- [转载] MySQL高可用方案选型参考
原文: http://imysql.com/2015/09/14/solutions-of-mysql-ha.shtml?hmsr=toutiao.io&utm_medium=toutiao. ...
- mysql备份学习笔记及xtrabackup安装
(参考书籍:<深入浅出MySQL>) 一.备份恢复策略 a) 确定要备份的表的存储引擎是事务型还是非事务型 b) 确定使用全备份还是增量备份 c) 定期做备份 ...
- python 多线程删除MySQL表
一.需求分析 在<python 统计MySQL表信息>这篇博客中,链接如下: https://www.cnblogs.com/xiao987334176/p/9901692.html 已经 ...
- 小型网站MYSQL问题二:Percona Xtrabackup实现数据库备份和恢复
1.安装软件仓库(不要问我为什么不用源码安装,好吧,其实我懒.) 1 2 3 4 5 6 7 8 wget https://www.percona.com/downloads/percona-rele ...
- (转)CentOS 7 下 MySQL 5.7 配置 Percona Xtrabackup
CentOS 7 下 MySQL 5.7 配置 Percona Xtrabackup 原文:http://qizhanming.com/blog/2017/05/10/install-percona- ...
- MySQL表的四种分区类型
MySQL表的四种分区类型 一.什么是表分区 通俗地讲表分区是将一大表,根据条件分割成若干个小表.mysql5.1开始支持数据表分区了. 如:某用户表的记录超过了600万条,那么就可以根据入库日期将表 ...
随机推荐
- tomcat禁用PUT,DELETE等一些不必要的HTTP方法
一.背景 公司进行安全整改, 技术要求:系统软件所需支撑的WEB容器环境应禁止除GET和POST外其他HTTP(S)方法. 提供凭证:建议在不影响业务的前提下,禁用PUT.DELETE.HEAD.OP ...
- python框架之Flask
介绍:Flask是一个使用 Python 编写的轻量级 Web 应用框架.其 WSGI 工具箱采用 Werkzeug ,模板引擎则使用 Jinja2 . WSGl:Web Server Gateway ...
- spingsecurity 前后端分离跨域,ajax无用户信息
1.自测时用的postman没有任何问题 2.和前端对接时发现登录不上,ajax Error 出错:{"readyState":0,"responseText" ...
- docker报错Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon running?
docker报错Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon run ...
- Kerberos委派攻击
域委派 就是指将域内用户的权限委派给服务账号,使得服务账号能以用户的权限在域内展开活动. 在域中一般只有主机账号和服务账号才具有委派属性 主机账号:主机账号就是AD(活动目录)中Computers中的 ...
- 爱了,字节跳动大神最佳整理:582页Android NDK七大模块学习宝典,理论与实践
前言 时至今日,短视频App可谓是如日中天,一片兴兴向荣.随着短视频的兴起,音视频开发也越来越受到重视,而且薪资水涨船高,以一线城市为例,音视频工程开发的薪资比Android应用层开发高出40%. 但 ...
- 2020互联网寒冬之下,作为一个Android老码农,是如何进入腾讯的?
由于众所周知的原因,原生Android开发如今已经日渐凋敝,作为一个Android程序员,不仅要会Java,Kotlin,JavaScript,Css,Html,还要会Flutter,C++,FFmp ...
- MapReduce框架原理-MapTask和ReduceTask工作机制
MapTask工作机制 并行度决定机制 1)问题引出 maptask的并行度决定map阶段的任务处理并发度,进而影响到整个job的处理速度.那么,mapTask并行任务是否越多越好呢? 2)MapTa ...
- 卓越的教练是如何训练高手的?(谈谈memmove)
编者按:我们知道,优秀的运动员除了自身的天赋和努力之外,出色的教练必不可少.一个成功的企业除了拥有出类拔萃的员工之外,同样需要一位出色的教练,那就是企业的CEO.由此可见,如果我们要想成为一位优秀的程 ...
- MySQL-16-主从复制进阶
延时从库 介绍 延时从库: 是我们人为配置的一种特殊从库,人为配置从库和主库延时N小时 为什么要有延时从库 数据库故障 物理损坏,普通的主从复制非常擅长解决物理损坏 逻辑损坏,普通主从复制没办法解决逻 ...