教你手工mysql拆库

时间:2022-10-14 11:26:00

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

教你手工mysql拆库

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

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

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

教你手工mysql拆库

实施步骤:

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. 等待新库与老库同步,至此新库与老库复制结构如下图

教你手工mysql拆库

6. 切换

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

教你手工mysql拆库

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

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

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

教你手工mysql拆库

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

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

教你手工mysql拆库

8.善后

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

教你手工mysql拆库的更多相关文章

  1. &lpar;转&rpar;教你手工mysql拆库

    原文:http://www.cnblogs.com/cchust/p/3859967.html 互联网网站应用大多采用mysql作为DB存储,限于mysql单机性能的瓶颈,为了支撑更大容量和更大的访问 ...

  2. mysql spider之拆库无忧

    数据库的三板斧 先上MySQL,之后再上读写分离,然后呢? 后面典型的做法是垂直拆库和水平分表. 一旦数据库拆了之后,代价就来了. 1.事务不能跨库了(少,但是很重要,可以适当改写) 2.相关的关联查 ...

  3. 1、通过CP数据文件的方式恢复MySQL 从库 启动后报错:Last&lowbar;IO&lowbar;Errno&colon; 1236:A slave with the same server&lowbar;uuid&sol;server&lowbar;id as this slave has connected to the master&semi;

    1.问题: MySQL从库中查看主从状态: show slave status\G,发现出现IO的报错: Last_IO_Errno: Last_IO_Error: Got fatal error f ...

  4. PHP基础Mysql扩展库

    mysql扩展库操作步骤如下: 1.连接数据库 2.选择数据库 3.设置操作编码 4.发送指令sql,并返回结果集     ddl:数据定义语句     dml:数据操作语句     dql:数据查询 ...

  5. mysql扩展库-1

    启用mysql扩展库 在php.ini文件中去配置mysql扩展库 extension=php_mysql.dll 可以通过 phpinfo() 查看当前php支持什么扩展库. 在sql扩展库中创建一 ...

  6. Mysql主从库同步错误:1062 Error &&num;39&semi;Duplicate entry &&num;39&semi;1438019&&num;39&semi;

    mysql主从库同步错误:1062 Error 'Duplicate entry '1438019' for key 'PRIMARY'' on query mysql主从库在同步时会发生1062 L ...

  7. MySQL 建库、建用户及建表事项

    1,MySQL建库语句比较简单,一句话: create database tppamltest3 2,创建用户及授权: insert into mysql.user(Host,User,Passwor ...

  8. haproxy实现mysql从库负载均衡

    本文主要讲述通过haproxy实现mysql从库间的负载均衡,至于mysql主从的搭建,本文不再重述,可以参考我之前写的博客. 1.首先下载haproxy包 wget http://haproxy.1 ...

  9. 创建MySQL从库

    我们知道Oracle有DataGuard实时备份数据.能够做主备切换,而MySQL也有自己的一套备库方案.称之为主从复制. 搭建MySQL从库是为了实时同步主库数据,同一时候也能够分担主库的读压力.对 ...

随机推荐

  1. POJ 3159 Candies(差分约束)

    http://poj.org/problem?id=3159 题意:有向图,第一行n是点数,m是边数,每一行有三个数,前两个是有向边的起点与终点,最后一个是权值,求从1到n的最短路径. 思路:这个题让 ...

  2. 【转】JAVA字符串格式化-String&period;format&lpar;&rpar;的使用--不错

    原文网址:http://blog.csdn.net/lonely_fireworks/article/details/7962171 常规类型的格式化 String类的format()方法用于创建格式 ...

  3. 隐藏NGINX服务器名称 和版本号

    隐藏NGINX服务器名称: 修改或隐藏服务器名称需要修改源码nginx.h,nginx.h在src/core/目录下 .具体操作如下: 把下面两个宏的值修改为自己设定的值,例如"NGX&qu ...

  4. c&num;中的属性

    在C#中我们可以很*的访问共有字段,但有时我们可能需要某字段只能读或者写,或在改变字段值得时候做一些其他事情,显然这些仅仅依靠字段是无法实现的,于是便有了属性. 1.基本用法 c#中的属性由属性作用 ...

  5. Step one &colon; 熟悉Unix&sol;Linux Shell 常见命令行 &lpar;三&rpar;

    3.学会使用一些管理命令 ps/top/lsof/netstat/kill/tcpdump/iptables/dd 端口查看 ps -- process status ps aux  观察程序所有程序 ...

  6. Java 9 揭秘(5&period; 实现服务)

    Tips做一个终身学习的人. Implementing Services 在这章中,主要介绍如下内容: 什么服务,服务接口,服务提供者: 在 JDK 9之前和在JDK 9中如何实现服务 如何使用Jav ...

  7. C&sol;C&plus;&plus;中容器vector用法

    C++中数组非常坑,有没有相似Python中list的数据类型呢?相似的就是vector!vector 是同一种类型的对象的集合,每一个对象都有一个对应的整数索引值. 和 string 对象一样.标准 ...

  8. Cnario Player 接入视频采集卡采集外部音视频信号测试

    测试产品 型号: TC-D56N1-30P采集卡 参数: 1* HDMI 1.4输入, PCIe 接口为PCI-Express x4(Gen2), 最高支持4096x2160@30Hz, 支持1920 ...

  9. 第 10 章 容器监控 - 078 - Docker 最常用的监控方案

    Docker 最常用的监控方案 当 Docker 部署规模逐步变大后,可视化监控容器环境的性能和健康状态将会变得越来越重要. Docker 自带的几个监控子命令: ps .top .stats 功能更 ...

  10. Webservice开发、引用

    一.Webservice开发 1.在解决方案右键添加新建项目,新建空的web应用程序 2.在新建的项目右键添加新建项选择web服务 3.这里就是webservice 里的方法,可以添加自己需要的方法( ...