学习笔记0809

分库分表

分片规则-范围
根据指定字段及其配置的范围与数据节点的对应情况,来决定该数据属于哪一个分片。

分片规则-取模
根据指定的字段值与节点数量进行求模运算,根据运算结果,来决定该数据属于哪一个分片。

分片规则-一致性hash
所谓一致性哈希,相同的哈希因子计算值总是被划分到相同的分区表中,不会因为节点的增加而改变原来数据的分区位置。

分片规则-枚举
通过在配置文件中配置可能的枚举值,指定数据分不到不同数据节点上,本规则适用于按照省份、性别、状态拆分数据等业务。

分片规则-应用指定
运行阶段由应用自主决定路由到那个分片,直接根据字符子串(必须是数字)计算分片号。

分片规则-固定分片hash算法
该算法类似于十进制的求模运算,但是为二进制的操作,例如,取id的二进制低10位与1111111111进行位&运算。
特点:
如果是求模,连续的值,分别分配到各个不同的分片;但是此算法会将连续的值可能分配到相同的分片,降低事务处理的难度。
可以均匀分配,也可以非均匀分配。
分片字段必须为数字类型。

分片规则-字符串hash解析
截取字符串中的指定位置的子字符串,进行hash算法,算出分片。

分片规则-按(天)日期分片

分片规则-自然月
使用场景为按照月份来分片,每个自然月为一个分片。

mycat默认开通了2个端口,可以在server.xml中进行修改
8066数据访问端口,即进行DML和DDL操作。
9066数据库管理端口,即mycat服务管理控制功能,用于管理mycat的整个集群状态

mysql -h 192.168.200.210 -P 9066 -uroot -p123456

Mycat-web(Mycat-eye)是对mycat-server提供监控服务,功能不局限于mycat-server使用。他通过JDBC连接对Mycat、Mysql监控,监控远程服务器(目前仅限linux系统)的cpu、内存、网络、磁盘。
Mycat-eye运行过程需要依赖zookeeper,因此需要先按照zookeeper。

读写分离

读写分离,简单地说是把对数据库的读和写操作分开,以对应不同的数据库服务器。主数据库提供写操作,从数据库提供读操作,这样能有效地减轻单台数据库的压力。
通过MyCat即可轻易实现上述功能,不仅可以支持MySQL,也可以支持Oracle和SQL Server。

MySQL的主从复制,是基于二进制日志实现的。

dataHost的balance属性的四种取值
0 不开启读写分离机制,所有读操作都发送到当前可用的writeHost上
1 全部的raedHost与备用writeHost都参与select语句的负载均衡(主要针对于双主双从模式)
2 所有的读写操作都随机在writeHost,readHost上分发
3 所有的读请求随机分发到writeHost对应的readHost上执行,writeHost不负担读压力

一主一从,如果Master宕机,只能进行查询不能进行更新和新增。

双主双从
一个主机Master1用于处理所有读写请求,它的从机Slave1和另一台主机Master2还有它的从机Slave2负责所有读请求。当Master1主机宕机后,Master2主机负责写请求,Master1、Master2互为备机。

搭建过程
主库配置(Master1-192.168.200.211)
1.修改配置文件/etc/my.cnf

#mysql服务器ID,保证整个集群环境中唯一,取值范围:1-2的32次方-1,默认为1
server-id=1
#指定同步的数据库
binlog-do-db=db01
binlog-do-db=db02
binlog-do-db=db03
#在作为从数据库的时候,有写入操作也要更新二进制日志文件
log-slave-updates

2.重启MySQL服务器

systemctl restart mysqld

主库配置(Master2-192.168.200.213)
1.修改配置文件/etc/my.cnf

#mysql服务器ID,保证整个集群环境中唯一,取值范围:1-2的32次方-1,默认为1
server-id=3
#指定同步的数据库
binlog-do-db=db01
binlog-do-db=db02
binlog-do-db=db03
#在作为从数据库的时候,有写入操作也要更新二进制日志文件
log-slave-updates

2.重启MySQL服务器

systemctl restart mysqld

两台主库创建账户并授权

#创建itcast用户,并设置密码,该用户可在任意主机连接该MySQL服务
CREATE USER 'itcast'@'%' IDENTIFIED WITH mysql_native_password BY 'Root@123456';
#为'itcast'@'%'用户分配主从复制权限
GRANT REPLICATION SLAVE ON *.* TO 'itcast'@'%';

通过指令,查看两台主库的二进制日志坐标

show master status;

从库配置(Slave1-192.168.200.212)
1.修改配置文件/etc/my.cnf

#mysql服务ID,保证整个集群环境中唯一,取值范围:1-2的32次方-1,默认为1
server-id=2

2.重启MySQL服务器

systemctl restart mysqld

从库配置(Slave2-192.168.200.214)
1.修改配置文件/etc/my.cnf

#mysql服务ID,保证整个集群环境中唯一,取值范围:1-2的32次方-1,默认为1
server-id=4

2.重启MySQL服务器

systemctl restart mysqld

两台从库配置关联的主库

CHANGE MASTER TO MASTER_HOST='xxx.xxx.xxx.xxx',MASTER_USER='xxx',MASTER_PASSWORD='xxx',MASTER_LOG_FILE='xxx',MASTER_LOG_POS=xxx;

需要注意slave1对应的是master1,slave2对应的是master2
启动两台从库主从复制,查看从库状态

start slave;
show slave status\G;

两台主库相互复制
Master2复制Master1,Master1复制Master2

CHANGE MASTER TO MASTER_HOST='xxx.xxx.xxx.xxx',MASTER_USER='xxx',MASTER_PASSWORD='xxx',MASTER_LOG_FILE='xxx',MASTER_LOG_POS=xxx;

启动两台从库主从复制,查看从库状态

start slave;
show slave status\G;

读写分离
MyCat控制后台数据库的读写分离和负载均衡由schema.xml文件datahost标签的balance属性控制,通过writeType和switchType来完成失败自动切换

balance="1"
	代表 全部的readHost与stand by writeHost参与select语句的负载均衡,简单的说,当双主双从模式(M1->S1,M2->S2,并且M1与M2互为主备),正常情况下,M2,S1,S2都参与select语句的负载均衡;
writeType
	0:写操作都转发到第1台writeHost,writeHost挂了,会切换到writeHost2上;
	1:所有的写操作都会随机发送到配置的writeHost上;
switchType
	-1:不自动切换
	1:自动切换

MVCC

基本概念

当前读
读取的是记录的最新版本,读取时还要保证其他并发事务不能修改当前记录,会对读取的记录进行加锁。对于我们日常的操作,如:select…lock in share mode(共享锁),select…for update、update、insert、delete(排他锁)都是一种当前读。
快照读
简单的select(不加锁)就是快照读,快照读,读取的是记录数据的可见版本,有可能是历史数据,不加锁,是非阻塞读。
Read Commiitted:每次select,都生成一个快照读。
Repeatable Read:开启事务后第一个select语句才是快照读的地方。
Serializable:快照读会退化为当前读。
MVCC
全称Multi-Version Concurrency Control,多版本并发控制。指维护一个数据的多个版本,使得读写操作没有冲突,快照读为MySQL实现MVCC提供了一个非阻塞读功能。MVCC的具体实现,还需要依赖于数据库记录中的三个隐式字段、undo log日志、readView。

MVCC-实现原理

记录当中的隐藏字段
DB_TRX_ID 最近修改事务ID,记录插入这条记录或最后一次修改该记录的事务ID。
DB_ROLL_PTR 回滚指针,指向这条记录的上一个版本,用于配合undo log,指向上一个版本。
DB_ROW_ID 隐藏主键,如果表结构没有指定主键,将会生成该隐藏字段。

undo log
回滚日志,在insert、update、delete的时候产生的便于数据回滚的日志。
当insert的时候,产生的undo log日志只在回滚时需要,在事务提交后,可被立即删除。
而update、delete的时候,产生的undo log日志不仅在回滚时需要,在快照读也需要,不会立即被删除。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值