Mysql企业实战
==========================业务垂直分割:
1》介绍说明:
随着公司的业务规模扩展,DBA需要根据企业数据业务进行切割,垂直切割又称为纵向切割,垂直数据切割是根据企业网站业务、产品进行切分,比如:用户数 据、博客文章数据、照片数据、标签数据类型、群组数等等,每个业务都独立的分库分表进行切割. 如果一个应用只针对单纯的业务功能模块,那么可以直接连接相应 的被垂直切分的数据库,但是有些复杂的应用需要利用到相当多的业务数据,甚至牵扯到所有业务数据那么垂直切割将给应用带来一定的复杂度,而且对研发人员也会 有一定的影响,导致整个应用复杂度提升,那么Amoeba在其中充当了门面功能,疏通应用于多个数据库的通讯如果垂直切分功能:假如有有3个数据库:userdb blogdb otherdb
2》DB架构图:


================================业务水平分割
1》介绍说明:
上次我们讲到垂值切割。那么如果垂值切割不能满足企业需求怎么办??那么我们对架构进行进一步优化,让水平切割来解决这一问题,水平切割根User_ID范 围值划分,然后再进去取模 % 2 ,那么最终得到的值只有0 和1定义到每台DB Server 上去。此范围适合用于中小DB架构扩展,我们将在下一章将讲到360度环形库 的扩展,将用于大型DB架构设计;
需求说明:
总用户数量500万
User_DB 存储用户基本信息<如、登录认证、个人信息>
Blog_DB 存储用户博客文章
Other_DB 存储其它业务
经过垂直分割将3个DB分割到不同的服务器上面,然后进行水平切割将DB用户量分割开来,
User_DB1 承载250万用户的基本信息 User_ID范围值<500万 User_ID取模 % 2 取值0的读此服务器
User_DB2 承载250万用户的基本信息 User_ID范围值<500万 User_ID取模 % 2 取值1的读此服务器
Blog_DB1 承载250万用户的博客文章 User_ID范围值<500万 User_ID取模 % 2 取值0的读此服务器
Blog_DB2 承载250万用户的博客文章 User_ID范围值<500万User_ID取模 % 2 取值1的读此服务器
Other_DB1 承载250万用户的其它信息 User_ID范围值<500万User_ID取模 % 2 取值0的读此服务器
Other_DB2 承载250万用户的其它信息 User_ID范围值<500万User_ID取模 % 2 取值1的读此服务器
相当于2台机器针对500万用户。各承载了。2分之1,此范围可以根据ID范围值,无限扩展下去。
2》DB架构图

3》环境案例实战
因为我们上面已经讲过了读写分离,这个实战案例主要讲水平分割,通过Amoeba实现分割,判断ID范围值与取模
1>Amoeba_Server(Linux) 10.0.0.203 实现水平切割
2>User_DBA_Server1(Linux) 10.0.0.201 承载250万用户基本信息User_ID范围值<500万 User_ID取模 % 2 取值0的读此服务器
3>User_DBA_Server2(Linux) 10.0.0.202 承载250万用户基本信息User_ID范围值<500 User_ID取模 % 2 取值1的读此服务器
相当于2台机器针对500万用三户。各承载了。2分之1,此范围可以根据ID范围值,无限扩展下去。注意这2台机器。并没有做主 从,是单独的两台单机MYSQL
4》设置DB_server1 DB_server2 设置Amoeba远程访问授权
mysql-->grant all privileges on *.* to amoeba@'%' identified by '123456';
mysql-->flush privileges;
5》创建测试表
在DB_server1 和DB_server2 上,两边的表结构以及表名是一样的。注意。
创建t_user表
create table zyalvin (
user_id integer unsigned not null,
user_name varchar(45),
user_address varchar(100),
primary key (user_id)
)engine=innodb;
Query OK, 0 rows affected (0.01 sec
6》配置Amoeba IP 与用户
vim /usr/local/amoeba/conf/amoeba.xml

7》配置Server1和Server2
配置Server1:

配置Server2


8》配置水平分割规则
# vim /usr/local/amoeba/conf/rule.xml
tableRule name=”zyalvin,t_user”可以多个表,

启动服务
#:nohup bash -x amoeba &
9》插入测试数据
在Amoeba Server登录:
# mysql -uroot -p123456 -h 192.168.100.214 -P 9006
mysql->use zytest;
mysql->insert into zyalvin(user_id,user_name,user_address)values('1','user1','China');
mysql->insert into zyalvin (user_id,user_name,user_address)values('2','user1','China');
mysql->insert into zyalvin (user_id,user_name,user_address)values('3','user1','China');
mysql->insert into zyalvin (user_id,user_name,user_address)values('4','user1','China');
mysql->insert into zyalvin (user_id,user_name,user_address)values('5','user1','China');
mysql->insert into zyalvin (user_id,user_name,user_address)values('6','user1','China');
mysql->insert into zyalvin (user_id,user_name,user_address)values('7','user1','China');
mysql->insert into zyalvin user_id,user_name,user_address)values('8','user1','China');
mysql->insert into zyalvin (user_id,user_name,user_address)values('9','user1','China');
mysql->insert into zyalvin (user_id,user_name,user_address)values('10','user1','China');
DB_server1查看,偶数全部写入了server1

DB_server2 查看,奇数全部写入了server2

总结:
(1)amoeba 是根据 sql 解析来进行水平切分的,需要把切分的关键字段(这里是user_id),加入到insert sql语句中,否则切分规 则无效。无效后,会在 server1, server2 均都插入数据。
(2)amoeba插入数据的时候必须先use dbname(比如要先use test库名,或者查询带上库名和表名,test.t_user) 否则插入数据会默 认插到server1上面
(3)在rule.xml 指定的ID范围,在插入数据user_id的时候,不能超过这个范围,否则分片无效,比如定义的ID范围为:1-500000号
insert into zyalvin(user_id,user_name,user_address)values('5000001','user1','China');如果插入ID超过5000000,变成了 5000001的话那么这个数据将同时写到server1和server2 导致分片无效。
打开以.xml结尾的文件出现乱码时,用以下方法处理:

Mysql企业实战的更多相关文章
- (转)linux运维必会MySQL企业面试题
linux运维必会MySQL企业面试题 老男孩教育运维班全体学员MySQL必会企业面试题最实战.最细致.最落地的运维实训基地,老男孩教育连续多年国内平均就业工资最高! 数据库的重要性是所有技术里最核 ...
- 3.awk数组详解及企业实战案例
awk数组详解及企业实战案例 3.打印数组: [root@nfs-server test]# awk 'BEGIN{array[1]="zhurui";array[2]=" ...
- mysql颠覆实战笔记(五)--商品系统设计(二):定时更新商品总点击量
继续回到沈老师的MYSQL颠覆实战,首先回顾下上一节课的内容,请大家会看下上节课写的存储过程. 打开prod_clicklog表, 我们只要把日期(不含时分秒)的部分存在数据库中, 如果同一日期有相同 ...
- mysql颠覆实战笔记(四)--商品系统设计(一):商品主表设计
版权声明:笔记整理者亡命小卒热爱自由,崇尚分享.但是本笔记源自www.jtthink.com(程序员在囧途)沈逸老师的<web级mysql颠覆实战课程 >.如需转载请尊重老师劳动,保留沈逸 ...
- mysql颠覆实战笔记(一)--设计一个项目需求,灌入一万数据先
版权声明:笔记整理者亡命小卒热爱自由,崇尚分享.但是本笔记源自www.jtthink.com(程序员在囧途)沈逸老师的<web级mysql颠覆实战课程 >.如需转载请尊重老师劳动,保留沈逸 ...
- mysql颠覆实战笔记(七)--白话理解事务
今天我们学习web开发级mysql颠覆实战课程第9课没MYSQL事务(一):白话理解事务.前面有两节课第7讲:商品系统设计(四):商品属性设计之自定义属性,第8讲:商品系统设计(五):一维属性的商品价 ...
- mysql颠覆实战笔记(六)--商品系统设计(三):商品属性设计之固定属性
今天我们来讲一下商品属性 我们知道,不同类别的商品属性是不同的. 我们先建一个表prod_class_attr:
- mysql颠覆实战笔记(三)-- 用户登录(二):保存用户操作日志的方法
版权声明:笔记整理者亡命小卒热爱自由,崇尚分享.但是本笔记源自www.jtthink.com(程序员在囧途)沈逸老师的<web级mysql颠覆实战课程 >.如需转载请尊重老师劳动,保留沈逸 ...
- mysql颠覆实战笔记(二)-- 用户登录(一):唯一索引的妙用
版权声明:笔记整理者亡命小卒热爱自由,崇尚分享.但是本笔记源自www.jtthink.com(程序员在囧途)沈逸老师的<web级mysql颠覆实战课程 >.如需转载请尊重老师劳动,保留沈逸 ...
随机推荐
- OD 实验(二十) - 对反调试程序的逆向分析(一)
程序: Keyfile.dat 里的内容 该文件中要至少有 9 个 ReverseMe.A: 运行程序 用 OD 打开该程序,运行 弹出的是错误的对话框 该程序发现 OD 对它的调试,所以该程序对 O ...
- 如何卸载windows的服务?卸载服务?
前面小编给大家介绍过如何禁用一些不需要的服务: 但是哪些多余的服务其实完成时可以直接卸载掉的: 所以今天小编将指导大家如何卸载一些不需要的服务: 切记请一定要确认卸载的是不需要的服务哦: 工具/原料 ...
- 华为OJ机试题目:两个大整数相乘(纯C语言实现两个大整数相乘,两种方法实现大数相乘)
题目描述: 输出两个不超过100位的大整数的乘积. 输入: 输入两个大整数,如1234567 123 输出: 输出乘积,如:151851741 样例输入: 1234567 123 样例输出: 1518 ...
- 查看Java文件对应的字节码
1. 编译为class文件:javac 2. 使用javap查看bytecode:javap -v
- web开发-CORS支持
一.简介 Web 开发经常会遇到跨域问题,解决方案有:jsonp,iframe,CORS 等等 1.1.CORS与JSONP相比 1.JSONP只能实现GET请求,而CORS支持所有类型的HTTP请求 ...
- Python 小练习三 发邮件
import smtplib,os from email.mime.text import MIMEText from email.mime.multipart import MIMEMultipar ...
- 重构--去除丑陋的switch语句
最近几天,在进行重构的时候,遇到了一个极其丑陋的代码(自己写的 /捂脸 当时时间紧,于是....),今天去重构的时候无论如何也想不出方法,去除这个丑陋的switch语句 ,于是写篇博客,让自己记住这 ...
- APP微信登录---第三方登录
(一)引入maven配置 <dependency> <groupId>com.github.liyiorg</groupId> <artifactId> ...
- ShadowVolume
[ShadowVolume] 1.z-pass 算法. z-pass 是 shadow volume 一开始的标准算法,用来确定某一个象素是否处于阴影当中.其原理是: Pass1:enable z-b ...
- Composer切换到Laravel-China 镜像
全局 composer config -g repo.packagist composer https://packagist.laravel-china.org 该项目 composer confi ...