MySQL 常见数据拆分办法

 更新时间:2016年07月16日 22:43:35   投稿:mdxy-dxy  
在生产环境中,由于业务的增长或者业务的拆分,DBA经常需要拆库操作。那么我们常见的拆库手段有哪些呢

在生产环境中,由于业务的增长或者业务的拆分,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 常见命令和学习心得

    mysql 常见命令和学习心得

    mysql 常见命令和学习心得,学习php的朋友需要了解的一些基础,方便日后的开发。
    2009-09-09
  • MySQL5.x版本乱码问题解决方案

    MySQL5.x版本乱码问题解决方案

    这篇文章主要介绍了MySQL5.x版本乱码问题解决方案,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-09-09
  • mysql如何将查询结果插入到另一张表中

    mysql如何将查询结果插入到另一张表中

    这篇文章主要介绍了mysql如何将查询结果插入到另一张表中问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2023-10-10
  • 浅谈MySQL中float、double、decimal三个浮点类型的区别与总结

    浅谈MySQL中float、double、decimal三个浮点类型的区别与总结

    这篇文章主要介绍了浅谈MySQL中float、double、decimal三个浮点类型的区别与总结,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-11-11
  • MySql行转列&列转行方式

    MySql行转列&列转行方式

    在MySQL数据库管理中,行转列和列转行是常见的数据处理需求,行转列通常涉及将表中的行数据按照某种规则转换成列形式,常用于报表生成、数据分析等场景,列转行则是将原本以列形式存储的数据转换成行形式,以便于进行进一步的数据处理或分析
    2024-11-11
  • 浅析mysql迁移到clickhouse的5种方法

    浅析mysql迁移到clickhouse的5种方法

    这篇文章主要介绍了mysql迁移到clickhouse的5种方法,本文给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下
    2019-07-07
  • 使用mysqladmin检测MySQL运行状态的教程

    使用mysqladmin检测MySQL运行状态的教程

    这篇文章主要介绍了使用mysqladmin检测MySQL运行状态的教程,包括mysqladmin工具简单的awk使用,需要的朋友可以参考下
    2015-06-06
  • mysql滑动聚合/年初至今聚合原理与用法实例分析

    mysql滑动聚合/年初至今聚合原理与用法实例分析

    这篇文章主要介绍了mysql滑动聚合原理与用法,结合实例形式分析了mysql滑动聚合的相关功能、原理、使用方法及操作注意事项,需要的朋友可以参考下
    2019-12-12
  • SQL如何使用正则表达式对数据进行过滤

    SQL如何使用正则表达式对数据进行过滤

    正则表达式的作用是匹配文本,将一个正则表达式与一个文本串进行比较,下面这篇文章主要给大家介绍了关于SQL如何使用正则表达式对数据进行过滤的相关资料,文中通过实例代码介绍的非常详细,需要的朋友可以参考下
    2022-09-09
  • 修改mysql允许主机访问的权限方法

    修改mysql允许主机访问的权限方法

    默认mysql的用户是没有远程访问的权限的,因此当程序跟数据库不在同一台服务器上时,我们需要开启mysql的远程访问权限,下面通过本文给大家分享修改mysql允许主机访问的权限的方法,感兴趣的朋友一起看看吧
    2017-07-07

最新评论