互联网网站应用大多采用mysql作为DB存储,限于mysql单机性能的瓶颈,为了支撑更大容量和更大的访问量,dba一般通过建立分布式集群,让多个mysql共同提供服务。所谓的mysql分布式集群,实质就是将原有的数据拆成多份,放在多个mysql数据库上存储,应用通过中间层路由到对应的数据库分片,访问所需要数据,基本架构如图1所示。这里的关键点就是“拆”,如何拆库,根据业务场景,一般可以采取水平拆分和垂直拆分。所谓水平拆分是指,将一个大表按一定的规则分片,分布在多个mysql数据库中;垂直拆分则是指根据业务模块划分,将不同模块分布在不同的mysql数据库中。无论是水平拆分,还是垂直拆分,对于底层运维人员来说,迁移扩容的本质是一样的。本文会结合一个具体的例子,详细讲解mysql拆库的具体步骤。

前提:mysq集群部署采用MM架构,Master与Slave采用双向复制,Master对外提供服务,Slave作为热备。

假设:实例上有库A和库B,目前受限于单机mysql的性能瓶颈,需要扩容。

目的:将库B拆出来,使得库A和库B分别单独占用物理机,如图2所示

实施步骤:

1.搭建备库

Mysql搭建备库主要有两种方式,逻辑备份(mysqldump)或物理备份(extrabackup)。由于我们需要将其中一个库拆出来,选择mysqldump会比较合适。

mysqldump -uxxx -pxxx –h ip_addr  -P port --databases B mysql --master-data=2 --single-transaction --default-character-set=xxx > /u01/bak/B_dump.sql 2>/u01/bak/B_dump.log &

说明:

1)   参数

--master-data=2,--single-transaction这两个参数一起使用,全局读锁只会在dump开始的时候加一小段时间,通过设置repeatable read隔离级别,保证读取事务开始时的数据,获取一致性数据,并且在备份文件开头处显示位点(File,Position)。

2)   为什么要备份mysql库

这里是因为数据库的元数据信息都存储在mysql中,比如表定义,用户信息等,因此需要一起备份过去。

2.检查备份是否成功

查看/u01/bak/B_dump.sql的结尾是否有dump complete

查看/u01/bak/B_dump.log文件是否异常输出

3.导入备份到新机器

Mysql –uroot</u01/bak/B_dump.sql>B_import.log 2>&1 &

4.导入增量

1)   由于老库上面有A,B两个库,新库只有B库,通过复制获取增量时,必然会导致报错,因此在导入前需要对新库设置复制过滤参数,replicate-do-db

replicate-do-db=mysql

replicate-do-db=B

2)   新库与老库建立复制关系,这里需要用到步骤1获取的位点信息(File,Position)

CHANGE master TO master_host=xxx, master_port=xxx,master_user='slave',master_password='slave',

master_log_file=File,master_log_pos=Position;

5. 等待新库与老库同步,至此新库与老库复制结构如下图

6. 切换

1)   将New M设置为可写状态,并将Old M与New M构成双M架构

备注:红色代表本次操作的复制变动

2)   通知应用将B库流量切换到New Master,由于这里设置到中间件的细节,不同公司采用的中间件不一样,这里不作说明

3)   B库流量全部切换到New Master 后,检查Old Master是否还有B库流量访问,确定没有,调整复制结构

备注:检查是否还有流量,可以通过show processlist看看是否还有连接来验证。

7.切换完毕,断开New Master 和Old Master的复制

8.善后

清理Old Master的B库数据,释放磁盘空间。

教你手工mysql拆库相关推荐

  1. 手把手教你玩 MySQL 删库不跑路,直接把 MySQL 的 binlog 玩溜

    我们常常听人说,只要你愿意,MySQL 可以恢复至半个月甚至一个月以内的任何一个状态.网上也有很多删库跑路的段子... 那么今天松哥想和大家来聊一聊 MySQL 中的 binlog,来手把手教大家如何 ...

  2. mysql构建栋_【转载】这次拆库 应是微服务化的拆分方式

    一.现状 现状.png 我们将一个大而全的系统一拆为三,容器,发布,测试都已经独立出去,但是原始的数据库还是一套,现在需要将数据库做一个拆分,A.B.C三个系统有各自的数据库之后,我们的微服务化在现有 ...

  3. 【SQL注入】通过实战教你手工注入MySql数据库

    [SQL注入]通过实战教你手工注入MySql数据库 Hello,各位小伙伴们大家晚上好~~ 不知不觉,已经是本公众号的第八篇技术文章了,你们都有认真阅读吗? 正当小编发愁下一篇写什么的时候,鲁迅发话了 ...

  4. mysql 从库状态_大神教你自动发现监控mysql从库状态

    导读 zabbix从库如果复制有问题,在主库机器有问题的时候,切为主就会导致数据的丢失.或者主从分离的时候,如果从库出现延时状态的话,会导致前端页面展示的数据不是为最新的数据.因此,监控mysql从库 ...

  5. 【转载】这次拆库 应是微服务化的拆分方式

    朝着微服务的方向去做一次数据库拆分 新栋BOOK 关注 2017.11.16 21:41* 字数 1389 阅读 152评论 0喜欢 3 一.现状 现状.png 我们将一个大而全的系统一拆为三,容器, ...

  6. 手把手教你建立私人数据检索库(二)

    声明:本文介绍的安全工具仅用于渗透测试及安全教学使用,禁止任何非法用途 0x00 序言 咳咳,这里是青空酱.本次为大家带来<手把手教你建立私人数据检索库>系列第二讲之数据的清洗导入与配置. ...

  7. 【手把手教你如何从Tushare库下载股票数据,并保存在硬盘当中,第一篇数据过滤】

    手把手教你如何从Tushare库下载股票数据,并保存在硬盘当中.第一篇数据过滤 前言 一.Tushare是什么? 二.代码 1.引入库 2.交易日的逻辑 3.先把每天个股的基础数据调出来 3.接下来我 ...

  8. MySQL之库表设计篇:一到五范式、BC范式与反范式详解

    引言 MySQL的库表设计,在很多时候我们都是率性而为,往往在前期的设计中考虑并不全面,同时对于库表结构的划分也并不明确,所以很多时候在开发过程中,代码敲着敲着会去重构某张表结构,甚至大面积重构多张表 ...

  9. mysql跨库查询 索引_MySQL中跨库查询怎么搞?

    导读 在MySQL中跨库查询主要分为两种情况,一种是同服务的跨库查询;另一种是不同服务的跨库查询;它们进行跨库查询是不同的,下面就具体介绍这两种跨库查询. 在MySQL中跨库查询主要分为两种情况,一种 ...

最新文章

  1. android网络编程之HttpUrlConnection的讲解--GET请求
  2. Watcher 实现机制之client注冊
  3. php 5.3.9 漏洞,PHP-5.3.9远程执行任意代码漏洞(CVE-2012-0830) 详解
  4. python能查询MySQL视图_python - 在使用Django的视图中,如何从mysql检索数据,并显示它_python_酷徒编程知识库...
  5. [JZOJ100026]图--倍增
  6. SQL Server — 更改数据库名
  7. openg es 之一
  8. mdadm管理raid
  9. bitlocker驱动器加密的解除方法
  10. 泛型类,泛型接口,泛型方法,底层擦除机制,可变参数,限类型通配符,反编译xjad
  11. Python爬虫实战之爬取链家广州房价_01简单的单页爬虫
  12. Asp.Net MVC 实用视频教程
  13. OOP(面向对象)总结(有这一篇足矣)
  14. ARP协议详解(3)--arp欺骗
  15. BOSS直聘新财报:用户、技术两手抓
  16. 2022-2028全球与中国工业机械电动执行器市场现状及未来发展趋势
  17. Oracle10g SQL分页查询写法与效率比较
  18. java web水果销售系统_基于jsp的水果销售-JavaEE实现水果销售 - java项目源码
  19. python识别火车票二维码_tickets:Python 实现的命令行火车票查看器
  20. shsh验证服务器,SHSH是什么

热门文章

  1. Facebook开源看图问答模型Pythia:拿下VQA比赛冠军就靠它
  2. 打车平台Lyft获Magna 2亿美元投资,携手打造自动驾驶汽车
  3. 在哈佛的一场闭门会上,专家说全球各国都应设置“人工智能部长”
  4. [20190312]视图v$datafile字段OFFLINE_CHANGE#, ONLINE_CHANGE#.txt
  5. JS---Math.Random()*10--[0,10)随机变颜色
  6. sqlmap工具使用用法详解
  7. 使用grunt合并压缩js、css文件
  8. (二)SSO之CAS框架单点退出,自己定义退出界面.
  9. PHP学习 - Composer的安装及配置
  10. [c/c++] c 操作mysql数据库