(转)教你手工mysql拆库
原文:http://www.cnblogs.com/cchust/p/3859967.html
互联网网站应用大多采用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拆库的更多相关文章
- 教你手工mysql拆库
互联网网站应用大多采用mysql作为DB存储,限于mysql单机性能的瓶颈,为了支撑更大容量和更大的访问量,dba一般通过建立分布式集群,让多个mysql共同提供服务.所谓的mysql分布式集群,实质 ...
- mysql spider之拆库无忧
数据库的三板斧 先上MySQL,之后再上读写分离,然后呢? 后面典型的做法是垂直拆库和水平分表. 一旦数据库拆了之后,代价就来了. 1.事务不能跨库了(少,但是很重要,可以适当改写) 2.相关的关联查 ...
- 1、通过CP数据文件的方式恢复MySQL 从库 启动后报错:Last_IO_Errno: 1236:A slave with the same server_uuid/server_id as this slave has connected to the master;
1.问题: MySQL从库中查看主从状态: show slave status\G,发现出现IO的报错: Last_IO_Errno: Last_IO_Error: Got fatal error f ...
- PHP基础Mysql扩展库
mysql扩展库操作步骤如下: 1.连接数据库 2.选择数据库 3.设置操作编码 4.发送指令sql,并返回结果集 ddl:数据定义语句 dml:数据操作语句 dql:数据查询 ...
- mysql扩展库-1
启用mysql扩展库 在php.ini文件中去配置mysql扩展库 extension=php_mysql.dll 可以通过 phpinfo() 查看当前php支持什么扩展库. 在sql扩展库中创建一 ...
- Mysql主从库同步错误:1062 Error 'Duplicate entry '1438019'
mysql主从库同步错误:1062 Error 'Duplicate entry '1438019' for key 'PRIMARY'' on query mysql主从库在同步时会发生1062 L ...
- MySQL 建库、建用户及建表事项
1,MySQL建库语句比较简单,一句话: create database tppamltest3 2,创建用户及授权: insert into mysql.user(Host,User,Passwor ...
- haproxy实现mysql从库负载均衡
本文主要讲述通过haproxy实现mysql从库间的负载均衡,至于mysql主从的搭建,本文不再重述,可以参考我之前写的博客. 1.首先下载haproxy包 wget http://haproxy.1 ...
- 创建MySQL从库
我们知道Oracle有DataGuard实时备份数据.能够做主备切换,而MySQL也有自己的一套备库方案.称之为主从复制. 搭建MySQL从库是为了实时同步主库数据,同一时候也能够分担主库的读压力.对 ...
随机推荐
- 2018.07.25 hdu5306Gorgeous Sequence(线段树)
传送门 线段树基本操作. 要求维护区间取min" role="presentation" style="position: relative;"> ...
- 超全table功能Datatables使用的填坑之旅--2:post 动态传参: 解决: ajax 传参无值问题.
官网解释与方法:1 当向服务器发出一个ajax请求,Datatables将会把服务器请求到的数据构造成一个数据对象. 2 实际上他是参考jQuery的ajax.data属性来的,他能添加额外的参数传给 ...
- Java 原始类型JComboBox的成员JComboBox(E())的调用 未经过检查
问题描述: 根据书上的代码 ,编译时候出现以下问题 自定义了一个字符数组: private String[] grades = {"1","2","3 ...
- webuploader传递参数
实际开发过程中,比如我有个工单提交系统,提交工单的时候用webuploader上传图片,如果工单的ID是自增长类型的,那么我在上传图片的时候肯定需要关联上工单的id,这时候就需要通过webupload ...
- 1) Spring_HelloWorld
1. Spring Tool Suite™ 方式一:下载对应eclipse版本的文件,离线安装 4.4.2 springsource-tool-suite-3.6.4.RELEASE-e4.4.2-u ...
- 信息管理代码分析<二>读取二进制文件数据
first和end做为全局变量,分别指向链表的头和尾.建立链表的方式也比较简易,从二进制文件数据块中,依次从头到尾读取,每读取一个就建立一个结点. /*基本模型*/ EMP *emp1; while( ...
- Codeforces735A Ostap and Grasshopper 2016-12-13 11:53 78人阅读 评论(0) 收藏
A. Ostap and Grasshopper time limit per test 2 seconds memory limit per test 256 megabytes input sta ...
- U盘单个文件最大4G限制问题
1.不同文件系统的最大分区以及单个文件最大限制 FAT32单个文件最大不能超过4G,超过4G就不能读取了. NTFS(Windows):支持最大分区2TB,最大文件2TB FAT16(Windows) ...
- underscore utility
1._.noConflict:命名冲突处理方法 _.noConflict = function() { root._ = previousUnderscore; //返回this不错 return t ...
- 安卓读写INI文件
安卓读写INI文件 uses System.IoUtils procedure TForm1.Button1Click(Sender: TObject);var IniFile:TIniFile; C ...