mysql运维(读写分离)

介绍

读写分离,简单地说是把对数据库的读和写操作分开,以对应不同的数据库服务器。主数据库提供写操作,从数据库提供读操作,这样能有效的减轻单台数据库的压力。

通过mycat即可轻易实现上述功能,不仅可以支持mysql,也可以支持orcle和sql server

一主一从读写分离

逻辑库:可以不指定表(读取数据节点关联数据库中的所有表)

xml 复制代码
<schema name="itcast" checkSQLschema="true" sqlMaxLimit="100" randomDataNode="dn1">
	</schema>

数据节点

xml 复制代码
<dataNode name="dn1" dataHost="dhost1" database="shopping" />

数据主机

xml 复制代码
	<dataHost name="dhost7" maxCon="1000" minCon="10" balance="1"
			  writeType="0" dbType="mysql" dbDriver="jdbc" switchType="1"  slaveThreshold="100">
		<heartbeat>select user()</heartbeat>
		<writeHost host="master" url="jdbc:mysql://192.168.160.153:3306?useSSL=false&amp;serverTimezone=Asia/Shanghai&amp;characterEncoding=utf8" user="root"
				   password="1234">
			<readHost host="slave" url="jdbc:mysql://192.168.160.139:3306?useSSL=false&amp;serverTimezone=Asia/Shanghai&amp;characterEncoding=utf8" user="root"
				   password="1234">
			</readHost>
		</writeHost>
	</dataHost>

balance(负载均衡策略,目前取值有4种)

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

双主双从

一个主机master1用于处理所有写操作,他的从机slave1和另一台主机master2还有它的从机slave2负责所有读请求。当master1主机宕机后,master2主机负责写请求,master1、master2互为备用机

主库配置

1、修改配置文件(/etc/my.cnf)

xml 复制代码
#mysql服务id
server-id=1
#指定同步的数据库
binlog-do-db=db01
binlog-do-db=db02
binlog-do-db=db03
#在作为从数据库的时候,有写入操作也要更新二进制日志文件
log-slave-updates

2、重启服务

shell 复制代码
systemctl restart mysqld

3、创建用户、授予权限

sql 复制代码
create user 'itcast'@'%' identified with mysql_native_password by 'Root@123456';

grant replication slave on *.* to 'itcast'@'%';

从库配置

1、修改配置文件

shell 复制代码
server-id=2

2、重启Mysql服务器

java 复制代码
systemctl restart mysqld

配置从库管理的主库

sql 复制代码
change replication source to source_host='xxx.xxx'
,source_user='xxx'
,source_password='xxx'
,source_log_file='xxx'
,source_log_pos=xxx;

开启

xml 复制代码
show replica status;#8.0.22之后

双主双从读写分离

schema.xml

xml 复制代码
<schema name="itcast_rw" checkSQLschema="true" sqlMaxLimit="100" dataNode="dn7">
	</schema>

<dataNode name="dn7" dataHost="dhost7" database="itcast" />

<dataHost name="dhost7" maxCon="1000" minCon="10" balance="1"
			  writeType="0" dbType="mysql" dbDriver="jdbc" switchType="1"  slaveThreshold="100">
		<heartbeat>select user()</heartbeat>
		<writeHost host="master" url="jdbc:mysql://192.168.160.153:3306?useSSL=false&amp;serverTimezone=Asia/Shanghai&amp;characterEncoding=utf8" user="root"
				   password="1234">
			<readHost host="slave" url="jdbc:mysql://192.168.160.139:3306?useSSL=false&amp;serverTimezone=Asia/Shanghai&amp;characterEncoding=utf8" user="root"
				   password="1234">
			</readHost>
		</writeHost>
<writeHost host="master" url="jdbc:mysql://192.168.160.154:3306?useSSL=false&amp;serverTimezone=Asia/Shanghai&amp;characterEncoding=utf8" user="root"
				   password="1234">
			<readHost host="slave" url="jdbc:mysql://192.168.160.138:3306?useSSL=false&amp;serverTimezone=Asia/Shanghai&amp;characterEncoding=utf8" user="root"
				   password="1234">
			</readHost>
		</writeHost>
	</dataHost>

dataHost参数配置

  • banlance=1
    代表全部的readHost与stand by writeHost参与select语句的负载均衡,简单的说,当双主双从模式(M1->s1,M2->s2,并且M1,M2互为主备),正常情况下,M2,s2,s1都参与select语句的负载均衡
  • writeType
    • 0:写操作都转发到第一台writeHost,writeHost1挂了,会切换到writeHost2上;
    • 1:所有的写操作都随机的发送到配置的writeHost上
  • switchType
    • -1:不自动切换
    • 1:自动切换
相关推荐
C++ 老炮儿的技术栈9 分钟前
MFC 自定义纯色居中文字进度条控件
c语言·数据库·c++·windows·算法·c·visual studio
灯澜忆梦21 分钟前
【MySQL1】| DDL 数据定义语言
数据库·sql·mysql
想你依然心痛28 分钟前
嵌入式容器:Docker与BalenaOS在边缘设备上的实践——容器运行时与OTA
运维·docker·容器
竣达技术33 分钟前
NAS / 服务器断电数据丢失?UPS 配套 USB关机保护板,市电断电池低自动提示服务器/电脑关机
运维·服务器·电脑
Lottie202639 分钟前
京东电商进阶运营:精准定价+安全铺货+竞品监控+利润管控全自动化方案
运维·安全·自动化
2601_9637713739 分钟前
Speeding Up Creative Agency Portfolios: A Performance Guide
前端·数据库·php
章老师说41 分钟前
NGINX官方谈Lua风险:这其实是两条网关技术路线之争
运维·nginx·负载均衡·lua·openresty
运维大师1 小时前
【安全与故障排查】03-【复盘】数据库被入侵:从发现到溯源全过程
数据库·安全·adb
wbs_scy1 小时前
仿 muduo 高并发服务器项目:实现 Any 通用容器并理解 std::any
运维·服务器
做个文艺程序员1 小时前
Linux第11篇:存储管理——磁盘分区、LVM 与文件系统
linux·运维·服务器