iis服务器助手广告广告
返回顶部
首页 > 资讯 > 数据库 >MySQL分区如何迁移
  • 249
分享到

MySQL分区如何迁移

2024-04-02 19:04:59 249人浏览 安东尼
摘要

| 背景 需求来源 Mysql越来越流行,而且存储在mysql的数据量也越来越大,单表数据达亿行已经是非常常见的现象,而这些表里面保存了大量的历史记录,严重影响sql执行的效

| 背景
需求来源

Mysql越来越流行,而且存储在mysql的数据量也越来越大,单表数据达亿行已经是非常常见的现象,而这些表里面保存了大量的历史记录,严重影响sql执行的效率。本文是针对客户需求,迁移MySQL Innodb大表分区中部分历史归档分区到其他实例或者其他库表,而且迁移过程尽量减少对业务环境的影响。

环境介绍
  • MySQL 5.7.21

  • Centos 7.4

  • innodb_file_per_table=1


| MySQL常用的Innodb迁移方法
  • MySQL Enterprise Backup(物理备份,类似于xtrabackup)

  • Copying Data Files (冷备份)

  • 逻辑导出和导入(mysqldump,mydumper,mysqlpump)

  • 可传输的表空间


| 迁移方案(可传输的表空间)
准备工作
  • MySQL版本必须是5.7

  • 迁移过程中存在短暂时间内业务不可写,建议提前做好准备

操作步骤
查看需要迁移表(原表)结构

root@localhost : testdba 02:03:18> use test
Database changed
root@localhost : test 08:37:50> show create table sbtest2;
+---------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| Table | Create Table |
+---------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| sbtest2 | CREATE TABLE `sbtest2` (
`id` int(10) DEFAULT NULL,
`name` varchar(20) COLLATE utf8_bin DEFAULT NULL,
`date` int(20) DEFAULT NULL,
KEY `idx_fenqu` (`date`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin
 |
+---------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
1 row in set (0.00 sec)
root@localhost : test 12:04:03> SELECT PARTITioN_NAME, TABLE_ROWS FROM INFORMATION_SCHEMA.PARTITIONS WHERE TABLE_NAME = 'sbtest2';
+----------------+------------+
| PARTITION_NAME | TABLE_ROWS |
+----------------+------------+
| p0 | 22 |
| p1 | 2 |
| p2 | 2 |
| p3 | 2 |
| p4 | 2 |
| p5 | 2 |
| p6 | 2 |
| p7 | 2 |
| p8 | 2 |
| p9 | 2 |
| p10 | 2 |
| p11 | 2 |
| p12 | 2 |
| p13 | 2 |
| p14 | 2 |
| p15 | 2 |
| p16 | 2 |
| p17 | 2 |
| p18 | 2 |
| p19 | 14 |
+----------------+------------+
20 rows in set (0.00 sec)
按照个人迁移分区表需求,可以把历史分区迁移到其他MySQL实例,也可以迁移到同一MySQL实例的其他库中。首先创建与原表相同表结构的分区表,在创建分区表时,我们只需要创建我们需要迁移的表分区结构。例:下面是迁移案例,由于只迁移2017年数据,所以表结构只创建了存储2017年数据的分区(也就是分区p2-p13)。  

root@localhost : test 01:59:36> create database testdba;
Query OK, 1 row affected (0.12 sec)
root@localhost : test 01:59:44> use testdba;
Database changed
root@localhost : testdba 06:04:26> CREATE TABLE `sbtest2` (
-> id int(10),
-> name varchar(20),
-> date int(20),
-> key idx_fenqu(date)
-> )
-> PARTITION BY RANGE (date) (
-> PARTITION p2 VALUES LESS THAN (20170201),
-> PARTITION p3 VALUES LESS THAN (20170301),
-> PARTITION p4 VALUES LESS THAN (20170401),
-> PARTITION p5 VALUES LESS THAN (20170501),
-> PARTITION p6 VALUES LESS THAN (20170601),
-> PARTITION p7 VALUES LESS THAN (20170701),
-> PARTITION p8 VALUES LESS THAN (20170801),
-> PARTITION p9 VALUES LESS THAN (20170901),
-> PARTITION p10 VALUES LESS THAN (20171001),
-> PARTITION p11 VALUES LESS THAN (20171101),
-> PARTITION p12 VALUES LESS THAN (20171201),
-> PARTITION p13 VALUES LESS THAN (20180101)
-> );
Query OK, 0 rows affected (0.22 sec)
清除新表所有的分区独立表空间,为导入原表的分区独立表空间做准备

root@localhost : testdba 02:00:05> use testdba;
Database changed
root@localhost : testdba 02:00:23> ALTER TABLE sbtest2 DISCARD PARTITION p2,p3,p4,p5,p6,p7,p8,p9,p10,p11,p12,p13 TABLESPACE;
Query OK, 0 rows affected (0.27 sec)
在原表中执行FLUSH TABLES ... FOR EXPORT(在分区表空间传输没有完成之前,不要退出该会话或者执行unlock tables;操作),用来获取元数据校验文件.cfg和确保该表的脏页刷到磁盘,并加共享表

root@localhost : testdba 02:00:24> USE test;
Database changed
root@localhost : test 02:00:29> FLUSH TABLES test.sbtest2 FOR EXPORT;
Query OK, 0 rows affected (0.00 sec)
[root@slave test]# cd /var/lib/mysql/data/mydata/test
[root@slave test]# ls 
db.opt sbtest2#P#p10.cfg sbtest2#P#p12.ibd sbtest2#P#p15.cfg sbtest2#P#p17.ibd sbtest2#P#p2.cfg sbtest2#P#p4.ibd sbtest2#P#p7.cfg sbtest2#P#p9.ibd
sbtest2#P#p0.cfg sbtest2#P#p10.ibd sbtest2#P#p13.cfg sbtest2#P#p15.ibd sbtest2#P#p18.cfg sbtest2#P#p2.ibd sbtest2#P#p5.cfg sbtest2#P#p7.ibd sbtest2.frm
sbtest2#P#p0.ibd sbtest2#P#p11.cfg sbtest2#P#p13.ibd sbtest2#P#p16.cfg sbtest2#P#p18.ibd sbtest2#P#p3.cfg sbtest2#P#p5.ibd sbtest2#P#p8.cfg
sbtest2#P#p1.cfg sbtest2#P#p11.ibd sbtest2#P#p14.cfg sbtest2#P#p16.ibd sbtest2#P#p19.cfg sbtest2#P#p3.ibd sbtest2#P#p6.cfg sbtest2#P#p8.ibd
sbtest2#P#p1.ibd sbtest2#P#p12.cfg sbtest2#P#p14.ibd sbtest2#P#p17.cfg sbtest2#P#p19.ibd sbtest2#P#p4.cfg sbtest2#P#p6.ibd sbtest2#P#p9.cfg
进入到原表ibd所在的目录下,把原表需要迁移的分区表空间和元数据校验文件.cfg传输到新表所在的位置,并赋予权限

[root@slave test]# cp sbtest2#P#p2.* sbtest2#P#p3.* sbtest2#P#p4.* sbtest2#P#p5.* sbtest2#P#p6.* sbtest2#P#p7.* sbtest2#P#p8.* sbtest2#P#p9.* sbtest2#P#p10.* sbtest2#P#p11.* sbtest2#P#p12.* sbtest2#P#p13.* /var/lib/mysql/data/mydata/testdba/
[root@slave test]# ls ../testdba/
db.opt sbtest2#P#p11.cfg sbtest2#P#p12.ibd sbtest2#P#p2.cfg sbtest2#P#p3.ibd sbtest2#P#p5.cfg sbtest2#P#p6.ibd sbtest2#P#p8.cfg sbtest2#P#p9.ibd
sbtest2#P#p10.cfg sbtest2#P#p11.ibd sbtest2#P#p13.cfg sbtest2#P#p2.ibd sbtest2#P#p4.cfg sbtest2#P#p5.ibd sbtest2#P#p7.cfg sbtest2#P#p8.ibd sbtest2.frm
sbtest2#P#p10.ibd sbtest2#P#p12.cfg sbtest2#P#p13.ibd sbtest2#P#p3.cfg sbtest2#P#p4.ibd sbtest2#P#p6.cfg sbtest2#P#p7.ibd sbtest2#P#p9.cfg
[root@slave test]# chown -R mysql:mysql /var/lib/mysql
切回到执行FLUSH TABLES ... FOR EXPORT语句窗口,释放共享表锁

root@localhost : test 02:00:29> USE test;
Database changed
root@localhost : test 02:01:07> UNLOCK TABLES;
Query OK, 0 rows affected (0.00 sec)
进入新表所在的实例或新表所在的库,手动导入分区表空间,进行数据恢复(应用传输到新表的分区表空间)

root@localhost : test 02:01:07> USE testdba;
Database changed
root@localhost : testdba 02:01:14> ALTER TABLE sbtest2 IMPORT PARTITION p2,p3,p4,p5,p6,p7,p8,p9,p10,p11,p12,p13 TABLESPACE;
Query OK, 0 rows affected (0.62 sec)
表空间迁移完成,数据恢复完成,最后校验数据准确性

root@localhost : testdba 02:03:16> SELECT PARTITION_NAME, TABLE_ROWS FROM INFORMATION_SCHEMA.PARTITIONS WHERE TABLE_NAME = 'sbtest2' and TABLE_SCHEMA='testdba';
+----------------+------------+
| PARTITION_NAME | TABLE_ROWS |
+----------------+------------+
| p2 | 2 |
| p3 | 2 |
| p4 | 2 |
| p5 | 2 |
| p6 | 2 |
| p7 | 2 |
| p8 | 2 |
| p9 | 2 |
| p10 | 2 |
| p11 | 2 |
| p12 | 2 |
| p13 | 2 |
+----------------+------------+
12 rows in set (0.00 sec)
| 总结

以上是我们使用MySQL的分区表空间传输方法,解决了分区表历史数据归档到其他实例或者同一实例其他库的问题。对比逻辑迁移方式mysqldump或者insert .. select ...方式速度更快,数据立即可用,而且对业务的影响更小。


| 作者简介

岳雷·沃趣科技数据库工程师

熟悉MySQL体系结构和innodb存储引擎工作原理;以及MySQL备份恢复、复制、数据迁移等技术;专注于MySQL、MariaDB开源数据库,喜好开源技术。

您可能感兴趣的文档:

--结束END--

本文标题: MySQL分区如何迁移

本文链接: https://www.lsjlt.com/news/46031.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • 怎么迁移mysql的分区
    本篇内容主要讲解“怎么迁移mysql的分区”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“怎么迁移mysql的分区”吧! 今天发现主从mysql的slave时忘...
    99+
    2024-04-02
  • sqlite如何迁移到mysql脚本
    这篇文章主要介绍了sqlite如何迁移到mysql脚本,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。,具体代码如下所示:#! /u...
    99+
    2024-04-02
  • 如何快速迁移MySQL数据
    本篇内容主要讲解“如何快速迁移MySQL数据”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“如何快速迁移MySQL数据”吧! 我们通常...
    99+
    2023-02-02
    mysql
  • Mysql如何实现数据迁移
    这篇文章将为大家详细讲解有关Mysql如何实现数据迁移,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。MySQL迁移通常使用的有三种方法:1、数据库直接导出,拷贝文件到新服...
    99+
    2024-04-02
  • 如何迁移MySQL 5.7数据库
    这篇文章主要介绍如何迁移MySQL 5.7数据库,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!在源库用mysqldump备份数据库:mysqldump -uroot -p --def...
    99+
    2024-04-02
  • Mysql迁移OpenGauss
    目录 一、数据库迁移 1.1Mysql、Oracle迁移OpenGauss 1.1.1使用navicat链接openGauss数据库 二、通用流程改造 2.1、application.yml的设置 2.1.1JDBC链接 2.1.2acti...
    99+
    2023-09-29
    mysql 数据库 postgresql
  • webpack4如何迁移
    这篇文章给大家分享的是有关webpack4如何迁移的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。1.x到2.x这次升级跨度比较大,我们是从webpack1.x升级到4.x,因为1...
    99+
    2024-04-02
  • 如何将数据从 Oracle 迁移到 MySQL:分步指南
    数据迁移在各种业务场景中发挥着至关重要的作用。当您的公司将其服务从本地迁移到云端时,数据迁移就会介入,将数据从旧位置传输到新位置。另一种常见的做法可能是更换或升级服务器或存储设备。在这种情况下,数据迁移可确保数据的顺利高效传输,最大限度地减...
    99+
    2023-08-31
    oracle mysql 数据库
  • 如何将MySQL从Windows迁移到Linux
    表名问题    lower_case_file_systemSystem VariableNamelower_case_file_systemVariable Sco...
    99+
    2024-04-02
  • 如何对Oracle分区表进行表空间迁移并处理
    这篇文章主要讲解了“如何对Oracle分区表进行表空间迁移并处理”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“如何对Oracle分区表进行表空间迁移并处理”...
    99+
    2024-04-02
  • redis如何迁移key
    将redis1库中的key转移到redis2库中的示例:在终端命令行连接redis后,输入命令:redis-cli -n 1 -a 'foobared' keys ...
    99+
    2024-04-02
  • 如何快速完成mysql数据迁移
    这篇文章主要介绍“如何快速完成mysql数据迁移”,在日常操作中,相信很多人在如何快速完成mysql数据迁移问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”如何快速完成mysq...
    99+
    2024-04-02
  • 如何在 Linux 上将 MySQL 迁移到 MariaDB?
    本文将帮助您将数据库从 MySQL 迁移到 MariaDB,因为迁移过程中 MySQL 到 MariaDB 的二进制兼容性非常简单。Oracle 收购 MySQL 后,社区推动了此类运动的成果,并开发了一个名为 MariaDB 的新数据库。...
    99+
    2023-10-22
  • HBASE表如何迁移
    这篇文章主要介绍了HBASE表如何迁移,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。 以下方法可以实现重命名,...
    99+
    2024-04-02
  • MySQL中数据迁移的示例分析
    这篇文章主要为大家展示了“MySQL中数据迁移的示例分析”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“MySQL中数据迁移的示例分析”这篇文章吧。1.关于数据迁...
    99+
    2024-04-02
  • Oracle数据迁移MySQL
    前言: 现今,Oracle数据迁移MySQL的需求已经越来越普遍,主要的迁移场景大致可以分为三类,第一类是涉及小表以及少量表的一次性迁移,无需进行增量同步,第二类是涉及大表以及多表的一次性迁移,第三类是涉及增量实时同步,而对于数据的迁移方法...
    99+
    2023-09-26
    oracle mysql 数据库 运维 dba
  • PHP中如何进行迁移学习和模型迁移?
    随着机器学习在各个领域中的广泛应用,迁移学习和模型迁移已经成为了热门话题。在使用PHP进行机器学习时,如何进行迁移学习和模型迁移也成为了一个必须要考虑的问题。本文将介绍PHP中如何进行迁移学习和模型迁移,并提供一些实用的技巧和建议。什么是迁...
    99+
    2023-05-21
    迁移学习 PHP 模型迁移
  • 如何使用 PHP 进行 MySQL 数据迁移?
    php mysql 数据迁移指南:建立到源和目标数据库的连接。从源数据库提取数据。在目标数据库中创建匹配源表的结构。使用逐行插入逐行将数据从源数据库迁移到目标数据库。 如何使用 PHP...
    99+
    2024-05-12
    mysql php
  • Linux系统中如何迁移MySQL数据库
    这篇文章将为大家详细讲解有关Linux系统中如何迁移MySQL数据库,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。第一步 – 执行MySQL转储在将数据库文件传输到新的VPS之前,我们...
    99+
    2023-06-27
  • 行迁移对跨分区update效率的影响分析
    本篇内容介绍了“行迁移对跨分区update效率的影响分析”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作