在生产环境中,由于业务的增长或者业务的拆分,DBA经常需要拆库操作。那么我们常见的拆库手段有哪些呢?

我这里提供几种解决办法:

1. 使用mysqldump 把表逻辑倒出,然后再source 到其它地方

2. 使用xtrabackup 把表、或者库逻辑备份出,然后再recovery出一个实例

3. 使用MySQL自带的表空间转移(Transport)[这个需要MySQL 5.6.6 以上版本支持]

I: 先来看一下MySQL 的 Transport 表空间的特性吧

比如我们要把  tab_test1 从 db_A 移动到 db_B ,那么我们需要做这么一系列动作:

Step 1: use db_A; show create table tab_test1;(首先,拿到需要的表结构)

Step 2: use db_B; create table tab_test1; alter tale tab_test1 discard tablespace;(discard tablespace 就是把ibd文件删掉,只留下.frm文件)(其次,到目标库删除掉idb文件)

Step 4: use db_A; flush table test122 for export;(把相关表的内存数据写入到数据库)

Step 5: 拷贝 tab_test1.ibd 文件到 db_B/   目录下;(操作系统层执行拷贝ibd文件操作)

Step 6: use db_A; unlock tables; (源库上解锁表)

Step 7: use db_B; alter table tab_test1 import tablespace;(目标库执行表空间导入)

执行完上边几个步骤,我们就完成了 在库之间迁移 某些个表的操作了。

II: 再来看一下 xtrabackup 导出部分表,以达到迁移目的

 Step 1: 我们需要使用xtrabackup 备份部分表

nohup perl /home/ddb/tmp/xtrabackup/bin/innobackupex-1.5.1 --ibbackup=/home/tmp/xtrabackup/bin/xtrabackup_55 --user=root --password=123 --defaults-file=/home/my.cnf  --slave-info  --tables-file=/mnt/back_tables.txt /mnt/backup_1

 
Step 2:  应用日志,进行恢复操作
nohup perl /home/tmp/percona-xtrabackup-2.1.9-Linux-x86_64/bin/innobackupex-1.5.1 --ibbackup=/home/tmp/percona-xtrabackup-2.1.9-Linux-x86_64/bin/xtrabackup_55 --export --apply-log --defaults-file=/home/node-1-1/backup-my.cnf /home/node-1-1/ > /tmp/r.log 2>&1 &
 
Step 3: 重新起实例,配置复制关系,只复制部分表
    my.cnf 文件配置: Replicate_Wild_Do_Table/Replicate_Wild_Ignore_Table
 

执行完上边几个步骤,我们就完成了表的迁移操作,并且新起了个实例,达到了分库的目的。

III:最后我们就看一下 mysqldump 的姿势吧

额, 这个就不多啰嗦了吧, mysqldump 做的事情就是 一些逻辑的导出, 倒出来的数据我们是可以用人肉可见的。    这个需要注意的一点就是  --single-transcation 选项

 
关于以上几种办法,我们在实际工作中需要 考虑 服务器的资源、内存容量等, 需要结合实际情况来使用 合适的办法进行拆库操作。

MySQL-常见数据拆分办法的更多相关文章

  1. MYSQL数据库数据拆分之分库分表总结

    数据存储演进思路一:单库单表 单库单表是最常见的数据库设计,例如,有一张用户(user)表放在数据库db中,所有的用户都可以在db库中的user表中查到. 数据存储演进思路二:单库多表 随着用户数量的 ...

  2. <转>MYSQL数据库数据拆分之分库分表总结

    数据存储演进思路一:单库单表 单库单表是最常见的数据库设计,例如,有一张用户(user)表放在数据库db中,所有的用户都可以在db库中的user表中查到. 数据存储演进思路二:单库多表 随着用户数量的 ...

  3. MYSQL数据库数据拆分之分库分表总结 (转)

      数据存储演进思路一:单库单表 单库单表是最常见的数据库设计,例如,有一张用户(user)表放在数据库db中,所有的用户都可以在db库中的user表中查到. 数据存储演进思路二:单库多表 随着用户数 ...

  4. mysql常见数据提示 mysql报错提示大全

    错误代码和消息 目录 B.1. 服务器错误代码和消息 B.2. 客户端错误代码和消息 本章列出了当你用任何主机语言调用MySQL时可能出现的错误.首先列出了服务器错误消息.其次列出了客户端程序消息. ...

  5. Mysql删除数据后磁盘空间未释放的解决办法【转】

    转自 Mysql删除数据后,磁盘空间未释放的解决办法 - 今日头条(TouTiao.com)http://toutiao.com/a6303087712678412546/?tt_from=mobil ...

  6. mysql根据逗号将一行数据拆分成多行数据

    mysql根据逗号将一行数据拆分成多行数据 原始数据 处理结果展示 DDL CREATE TABLE `company` ( `id` ) DEFAULT NULL, `name` ) DEFAULT ...

  7. mysql常见知识点总结

    mysql常见知识点总结 参考: http://www.cnblogs.com/hongfei/archive/2012/10/20/2732516.html https://www.cnblogs. ...

  8. java+Mysql大数据的一些优化技巧

    众所周知,java在处理数据量比较大的时候,加载到内存必然会导致内存溢出,而在一些数据处理中我们不得不去处理海量数据,在做数据处理中,我们常见的手段是分解,压缩,并行,临时文件等方法; 例如,我们要将 ...

  9. MYSQL常见的可优化点

    MYSQL常见的可优化点 SQL常见的可优化点 2014年6月8日 DBA 发表回复 # #################################################### 索引 ...

随机推荐

  1. requestAnimationFrame优势何在?

    大概半年前,无意中在网上看到一个新的js函数requestAnimationFrame,据说,此函数可以优化传统的js动画效果,似乎是未来js动画的新方向. 当时我所在的项目正好用到了和js动画有关的 ...

  2. selenium+java多层级frame切换的问题

    关于selenium多层iframe切换,及iframe没有id和name属性的情况下进行切换的问题.(如下图:) 问题: 1. 在切入到frame:left中后,直接切换其他同级和上级frame报错 ...

  3. requests.get()解析

    1.requests.get(url, params=None, headers=None, cookies=None, auth=None, timeout=None) Sends a GET re ...

  4. unittest—selenium自动化登录百度绕过校验

    这个脚本融合了unittest的校验,以及selenium的自动化,并且通过派发cookie信息成功绕过百度的验证码,并且利用装饰器成功只打开一次浏览器 #encoding=utf-8 from se ...

  5. linux_connect_mysql

    原文来自 https://www.cnblogs.com/lywy510/p/3615710.html #include <stdio.h> #include <stdlib.h&g ...

  6. wpf在image控件上快速显示内存图像

    这是在博客园的第一篇文章 如果你在寻找能够快速在image控件刷新大图像(比如分辨率3000*3000的图像)的办法,尤其是想把内存中的裸数据(只有图像的数据,不包含图像头等信息)快速显示到界面,那么 ...

  7. windows docker 安装cloudera/quickstart

    最近需要写一个大数据的项目,但是公司没有测试环境,真是cao蛋,没办法,只能自己搭建一个测试环境,所以就在本地电脑装一个cloudera/quickstart,这个是一个单节点的大数据平台, 是clo ...

  8. 在NodeJS中使用Redis缓存数据

    Redis数据库采用极简的设计思想,最新版的源码包还不到2Mb.其在使用上也有别于一般的数据库. node_redis redis驱动程序多使用 node_redis 此模块可搭载官方的 hiredi ...

  9. python之爬虫_模块

    目录 一.requests模块二.Beautifulsoup模块 一.requests模块 1.介绍 Python标准库中提供了:urllib.urllib2.httplib等模块以供Http请求,但 ...

  10. Django_rest_framework_Serializer

    序列化Serializer 序列化用于对用户请求数据进行验证和数据进行序列化(为了解决queryset序列化问题). 那什么是序列化呢?序列化就是把对象转换成字符串,反序列化就是把字符串转换成对象 m ...